From 37684a65dd5f94e94919ae9bf3a4d6ec53dce538 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Tue, 31 Mar 2026 15:46:08 -0600 Subject: [PATCH 1/5] WIP get started with telegraf controller --- content/telegraf/controller/get-started.md | 219 +++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 content/telegraf/controller/get-started.md diff --git a/content/telegraf/controller/get-started.md b/content/telegraf/controller/get-started.md new file mode 100644 index 0000000000..18afaf89c5 --- /dev/null +++ b/content/telegraf/controller/get-started.md @@ -0,0 +1,219 @@ +--- +title: Get started with Telegraf Controller +description: > + Get started with Telegraf Controller by creating a configuration, generating + an API token, starting a Telegraf agent, and verifying agent reporting. +menu: + telegraf_controller: + name: Get started +weight: 3 +--- + +After you've [installed {{% product-name %}}](/telegraf/controller/install/) and +set up your owner account, you're ready to start managing Telegraf configurations +and agents. +This guide walks you through the core workflow: creating a configuration, +starting a Telegraf agent using the configuration, and verifying that the agent +reports back to {{% product-name %}}. + +1. [Create a Telegraf configuration](#create-a-telegraf-configuration) +2. [Create an API token](#create-an-api-token) +3. [Start a Telegraf agent](#start-a-telegraf-agent) +4. [View the reporting agent](#view-the-reporting-agent) +5. [Update the configuration](#update-the-configuration) +6. [Verify the configuration update](#verify-the-configuration-update) + +## Create a Telegraf configuration + +Configurations define what data Telegraf collects, how it processes the data, +and where it sends it. +For this guide, you'll create a simple configuration that prints a message to +stdout and reports agent health back to {{% product-name %}}. + +1. In the {{% product-name %}} user interface (UI), select **Configurations** + in the navigation bar. +2. Click **{{% icon "plus" %}} Add Config**. +3. Enter a name and description for the configuration—for example, + "Getting Started." +4. In the **Code Editor**, enter the following TOML: + + ```toml { .tc-dynamic-values } + [[inputs.internal]] + + [[outputs.file]] + files = ["stdout"] + data_format = "influx" + + [[outputs.heartbeat]] + url = "http://localhost:8000/agents/heartbeat" + instance_id = "&{agent_id}" + interval = "1m" + include = ["hostname", "statistics", "configs", "status"] + token = "${INFLUX_TOKEN}" + + [outputs.heartbeat.status] + default = "ok" + ``` + + Telegraf requires at least one input plugin and one output plugin. + This configuration uses the `internal` input plugin to collect Telegraf's + own metrics and writes them to stdout using the `file` output plugin. + +5. Click **Create Configuration**. + +After creating the configuration, {{% product-name %}} automatically adds a +[heartbeat output plugin](/telegraf/v1/output-plugins/heartbeat/) to the +configuration. +The heartbeat plugin periodically sends agent status information back to +{{% product-name %}}, which lets you monitor agent health, track which +configurations are loaded, and detect when agents stop reporting. + +## Create an API token + +API tokens authenticate Telegraf agents when they retrieve configurations and +send heartbeats to {{% product-name %}}. + +1. Navigate to the **API Tokens** page. +2. Click **Create Token**. +3. Enter a description—for example, `Getting started agent token`. +4. Click **Create**. + +> [!Important] +> #### Copy and store your token +> +> Copy your API token immediately after creation. +> The full token value is only displayed once and cannot be retrieved later. + +The default token permissions are sufficient for this guide. +For more information about token permissions, see +[Manage API tokens](/telegraf/controller/tokens/). + +## Start a Telegraf agent + +With a configuration and token ready, start a Telegraf agent that pulls its +configuration from {{% product-name %}} and reports back via the heartbeat plugin. + +### Use the command builder + +{{% product-name %}} can build the `telegraf` command for you: + +1. In {{% product-name %}}, select **Configurations** in the navigation bar. +2. Click the name of the configuration you created. +3. Click **Use this Configuration**. +4. In the command builder modal, enable **Auto-update** and set the interval to + `1m` (one minute). +5. Click **Copy Commands** to copy the generated command to your clipboard. +6. Paste and run the command in your terminal. + +### Run manually + +Alternatively, start the agent manually by running the following commands in +your terminal. +Replace the placeholder values with your actual {{% product-name %}} URL, +configuration ID, and API token: + +{{< code-tabs-wrapper >}} +{{% code-tabs %}} +[Linux/macOS](#) +[Windows (PowerShell)](#) +{{% /code-tabs %}} +{{% code-tab-content %}} + + + +```bash { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID" } +export INFLUX_TOKEN=YOUR_TC_API_TOKEN + +telegraf \ + --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml" \ + --config-url-watch-interval 1m +``` + + +{{% /code-tab-content %}} +{{% code-tab-content %}} + + + +```powershell { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID" } +$env:INFLUX_TOKEN="YOUR_TC_API_TOKEN" + +telegraf.exe ` + --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml" ` + --config-url-watch-interval 1m +``` + + +{{% /code-tab-content %}} +{{< /code-tabs-wrapper >}} + +Replace the following: + +- {{% code-placeholder-key %}}`YOUR_TC_API_TOKEN`{{% /code-placeholder-key %}}: + API token you created in the [previous step](#create-an-api-token) +- {{% code-placeholder-key %}}`YOUR_CONFIG_ID`{{% /code-placeholder-key %}}: + Configuration ID from your configuration's detail page in {{% product-name %}} + +The `INFLUX_TOKEN` environment variable authorizes the agent to retrieve the +configuration and send heartbeats to {{% product-name %}}. + +The `--config-url-watch-interval` flag tells Telegraf to check for configuration +updates at the specified interval. +In this example, the agent checks every minute and automatically reloads the +configuration if it has changed. + +After starting, Telegraf retrieves the configuration from {{% product-name %}} +and begins collecting metrics. +You should see `internal` metrics printed to stdout. + +## View the reporting agent + +Once the agent sends its first heartbeat (within about one minute), it appears +in {{% product-name %}}. + +1. In {{% product-name %}}, select **Agents** in the navigation bar. +2. Confirm your agent appears in the list with an **Ok** status. +3. Click the **More button ({{% icon "tc-more" %}})** and select + **View Details** to see agent metadata, the loaded configuration, and + reporting history. + +## Update the configuration + +To see how configuration changes propagate to running agents, update the +configuration to use a different output format. + +1. In {{% product-name %}}, select **Configurations** in the navigation bar. +2. Click the name of the configuration you created. +3. In the **Code Editor**, change the `data_format` from `"influx"` to `"json"`: + + ```toml + [[outputs.file]] + files = ["stdout"] + data_format = "json" + ``` + +4. Click **Save**. + +## Verify the configuration update + +Because you started Telegraf with `--config-url-watch-interval 1m`, the agent +checks for configuration updates every minute. +After {{% product-name %}} saves the updated configuration, the agent detects +the change and automatically reloads. + +Watch the terminal where Telegraf is running. +Within one minute, the stdout output changes from InfluxDB line protocol format +to JSON format, confirming that the agent picked up the updated configuration. + +## Next steps + +- [Create and manage configurations](/telegraf/controller/configs/) to define + more advanced Telegraf pipelines. +- [Use dynamic values](/telegraf/controller/configs/dynamic-values/) to keep + configurations portable across environments. +- [Set up reporting rules](/telegraf/controller/agents/reporting-rules/) to + define when agents are considered not reporting. +- [Configure agent statuses](/telegraf/controller/agents/status/) to monitor + agent health using CEL expressions. +- [Manage API tokens](/telegraf/controller/tokens/) to control access to + {{% product-name %}} APIs. \ No newline at end of file From 2271138e707dcf15060a137cddf1397d131f0cf9 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 6 Apr 2026 12:52:29 -0600 Subject: [PATCH 2/5] WIP get started with telegraf controller --- content/telegraf/controller/get-started.md | 179 ++++++++++++------ .../controller-gs-command-builder.png | Bin 0 -> 74196 bytes 2 files changed, 125 insertions(+), 54 deletions(-) create mode 100644 static/img/telegraf/controller-gs-command-builder.png diff --git a/content/telegraf/controller/get-started.md b/content/telegraf/controller/get-started.md index 18afaf89c5..94f90e99fa 100644 --- a/content/telegraf/controller/get-started.md +++ b/content/telegraf/controller/get-started.md @@ -37,36 +37,88 @@ stdout and reports agent health back to {{% product-name %}}. "Getting Started." 4. In the **Code Editor**, enter the following TOML: - ```toml { .tc-dynamic-values } - [[inputs.internal]] + {{< code-tabs-wrapper >}} +{{% code-tabs %}} +[Linux/macOS](#) +[Windows](#) +{{% /code-tabs %}} +{{% code-tab-content %}} + + +```toml { .tc-dynamic-values } +[[inputs.exec]] + commands = [ + "echo 'Telegraf started using configuration from Telegraf Controller'" + ] + data_format = "value" + data_type = "string" + +[[outputs.file]] + files = ["stdout"] + +[[outputs.heartbeat]] + url = "http://localhost:8000/agents/heartbeat" + instance_id = "&{agent_id}" + interval = "1m" + include = ["hostname", "statistics", "configs", "status"] + token = "${INFLUX_TOKEN}" + + [outputs.heartbeat.status] + default = "ok" +``` - [[outputs.file]] - files = ["stdout"] - data_format = "influx" - - [[outputs.heartbeat]] - url = "http://localhost:8000/agents/heartbeat" - instance_id = "&{agent_id}" - interval = "1m" - include = ["hostname", "statistics", "configs", "status"] - token = "${INFLUX_TOKEN}" - - [outputs.heartbeat.status] - default = "ok" - ``` + +{{% /code-tab-content %}} +{{% code-tab-content %}} + + +```toml { .tc-dynamic-values } +[[inputs.exec]] + commands = [ + "cmd /C echo Telegraf started using configuration from Telegraf Controller" + ] + data_format = "value" + data_type = "string" + +[[outputs.file]] + files = ["stdout"] + +[[outputs.heartbeat]] + url = "http://localhost:8000/agents/heartbeat" + instance_id = "&{agent_id}" + interval = "1m" + include = ["hostname", "statistics", "configs", "status"] + token = "${INFLUX_TOKEN}" + + [outputs.heartbeat.status] + default = "ok" +``` - Telegraf requires at least one input plugin and one output plugin. - This configuration uses the `internal` input plugin to collect Telegraf's - own metrics and writes them to stdout using the `file` output plugin. + +{{% /code-tab-content %}} + {{< /code-tabs-wrapper >}} -5. Click **Create Configuration**. + This configuration does the following: + + - Uses the `exec` input plugin to execute an `echo` command to output a message. + - Uses the `file` output plugin to output the message to `stdout`, formatted + as InfluxDB line protocol (default). + - Uses the heartbeat plugin to periodically sends agent status information + back to {{% product-name %}}, which lets you monitor agent health, track + which configurations are loaded, and detect when agents stop reporting. + - Uses the `INFLUX_TOKEN` environment variable to authorize with + {{% product-name %}}. + - Uses the `agent_id` [parameter](/telegraf/controller/configs/dynamic-values/#parameters) + to set the `instance_id` which uniquely identifies the Telegraf agent. + + > [!Important] + > #### Heartbeat URL and port + > + > The example above uses `http://localhost` and the default heartbeat port, + > `8000`. If you are using HTTPS or a custom domain and port, update the + > `url` setting in the Heartbeat output plugin accordingly. -After creating the configuration, {{% product-name %}} automatically adds a -[heartbeat output plugin](/telegraf/v1/output-plugins/heartbeat/) to the -configuration. -The heartbeat plugin periodically sends agent status information back to -{{% product-name %}}, which lets you monitor agent health, track which -configurations are loaded, and detect when agents stop reporting. +5. Click **Create Configuration**. ## Create an API token @@ -74,9 +126,17 @@ API tokens authenticate Telegraf agents when they retrieve configurations and send heartbeats to {{% product-name %}}. 1. Navigate to the **API Tokens** page. -2. Click **Create Token**. +2. Click **+ Create API Token**. 3. Enter a description—for example, `Getting started agent token`. -4. Click **Create**. +4. Select a token **Expiration**. +4. Select the permissions to assign to the token. For convenience, you can + select the one of the available **Permission Presets**. + + > [!Tip] + > The **Telegraf Agent** preset includes all permissions a Telegraf agent + > needs to interact with {{% product-name %}}. + +5. Click **Create Token**. > [!Important] > #### Copy and store your token @@ -84,9 +144,7 @@ send heartbeats to {{% product-name %}}. > Copy your API token immediately after creation. > The full token value is only displayed once and cannot be retrieved later. -The default token permissions are sufficient for this guide. -For more information about token permissions, see -[Manage API tokens](/telegraf/controller/tokens/). +_For more information about token permissions, see [Manage API tokens](/telegraf/controller/tokens/)._ ## Start a Telegraf agent @@ -100,8 +158,19 @@ configuration from {{% product-name %}} and reports back via the heartbeat plugi 1. In {{% product-name %}}, select **Configurations** in the navigation bar. 2. Click the name of the configuration you created. 3. Click **Use this Configuration**. -4. In the command builder modal, enable **Auto-update** and set the interval to - `1m` (one minute). +4. In the command builder modal: + + 1. In the **Environment Variables** section, define the **INFLUX_TOKEN** + environment variable using the raw token string of the API token you + created. This authorizes the Telegraf agent to interact with + {{% product-name %}}. + 2. In the **Parameters** section, define the **agent_id** parameter with + a unique agent identifier. + 3. In the **Auto Update** section, enable auto-update and set the interval + to `30s`. This instructs Telegraf to check for configuration updates + every 30 seconds. + + {{< img-hd src="/img/telegraf/controller-gs-command-builder.png" alt="Telegraf Controller Command Builder" />}} 5. Click **Copy Commands** to copy the generated command to your clipboard. 6. Paste and run the command in your terminal. @@ -109,8 +178,8 @@ configuration from {{% product-name %}} and reports back via the heartbeat plugi Alternatively, start the agent manually by running the following commands in your terminal. -Replace the placeholder values with your actual {{% product-name %}} URL, -configuration ID, and API token: +Replace the placeholder values with your actual {{% product-name %}} URL and +port, configuration ID, API token, and agent ID: {{< code-tabs-wrapper >}} {{% code-tabs %}} @@ -121,12 +190,12 @@ configuration ID, and API token: -```bash { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID" } +```bash { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID|AGENT_ID" } export INFLUX_TOKEN=YOUR_TC_API_TOKEN telegraf \ - --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml" \ - --config-url-watch-interval 1m + --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml?agent_id=AGENT_ID" \ + --config-url-watch-interval 30s ``` @@ -135,12 +204,12 @@ telegraf \ -```powershell { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID" } +```powershell { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID|AGENT_ID" } $env:INFLUX_TOKEN="YOUR_TC_API_TOKEN" telegraf.exe ` - --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml" ` - --config-url-watch-interval 1m + --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml?agent_id=AGENT_ID" ` + --config-url-watch-interval 30s ``` @@ -153,18 +222,20 @@ Replace the following: API token you created in the [previous step](#create-an-api-token) - {{% code-placeholder-key %}}`YOUR_CONFIG_ID`{{% /code-placeholder-key %}}: Configuration ID from your configuration's detail page in {{% product-name %}} +- {{% code-placeholder-key %}}`AGENT_ID`{{% /code-placeholder-key %}}: + A unique ID for your Telegraf agent The `INFLUX_TOKEN` environment variable authorizes the agent to retrieve the configuration and send heartbeats to {{% product-name %}}. The `--config-url-watch-interval` flag tells Telegraf to check for configuration updates at the specified interval. -In this example, the agent checks every minute and automatically reloads the +In this example, the agent checks every 30 seconds and automatically reloads the configuration if it has changed. After starting, Telegraf retrieves the configuration from {{% product-name %}} and begins collecting metrics. -You should see `internal` metrics printed to stdout. +You should see `message` printed to stdout formatted as InfluxDB line protocol (default). ## View the reporting agent @@ -180,30 +251,30 @@ in {{% product-name %}}. ## Update the configuration To see how configuration changes propagate to running agents, update the -configuration to use a different output format. +message generated by the `exec` input plugin. 1. In {{% product-name %}}, select **Configurations** in the navigation bar. 2. Click the name of the configuration you created. -3. In the **Code Editor**, change the `data_format` from `"influx"` to `"json"`: +3. Update the `echo` command to print a different message: - ```toml + ```toml { callout="AN UPDATED" } [[outputs.file]] - files = ["stdout"] - data_format = "json" + commands = ["echo 'Telegraf started using AN UPDATED configuration from Telegraf Controller'"] + # ... ``` 4. Click **Save**. ## Verify the configuration update -Because you started Telegraf with `--config-url-watch-interval 1m`, the agent -checks for configuration updates every minute. -After {{% product-name %}} saves the updated configuration, the agent detects -the change and automatically reloads. +Because you started Telegraf with `--config-url-watch-interval 30s`, the agent +checks for configuration updates every 30 seconds. +After you update the configuration in {{% product-name %}}, the agent detects +the change on its next check interval and automatically reloads. Watch the terminal where Telegraf is running. -Within one minute, the stdout output changes from InfluxDB line protocol format -to JSON format, confirming that the agent picked up the updated configuration. +Within 30 seconds, the message returned in the `stdout` output updates to the +new message, confirming that the agent picked up the updated configuration. ## Next steps diff --git a/static/img/telegraf/controller-gs-command-builder.png b/static/img/telegraf/controller-gs-command-builder.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0f5ec519a0b44680b83a370c40db8c342d535c GIT binary patch literal 74196 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ξg>Na11dL^K&3~kl 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 Hu0mjfbKO~H literal 0 HcmV?d00001 From 4340b3944c7db9584ce8646a262b7005ccc24116 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 13 Apr 2026 07:57:22 -0600 Subject: [PATCH 3/5] WIP telegraf controller get started --- content/telegraf/controller/get-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/telegraf/controller/get-started.md b/content/telegraf/controller/get-started.md index 94f90e99fa..e292d480a8 100644 --- a/content/telegraf/controller/get-started.md +++ b/content/telegraf/controller/get-started.md @@ -257,7 +257,7 @@ message generated by the `exec` input plugin. 2. Click the name of the configuration you created. 3. Update the `echo` command to print a different message: - ```toml { callout="AN UPDATED" } + ```toml { callout="AN UPDATED" callout-color="orange" } [[outputs.file]] commands = ["echo 'Telegraf started using AN UPDATED configuration from Telegraf Controller'"] # ... From b082bcd4b0a22c3954bb702012d103dd31b52aa0 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Mon, 4 May 2026 16:44:22 -0600 Subject: [PATCH 4/5] chore(tc-gs): WIP telegraf controller getting started --- content/telegraf/controller/get-started.md | 44 ++++++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/content/telegraf/controller/get-started.md b/content/telegraf/controller/get-started.md index e292d480a8..bfa565a536 100644 --- a/content/telegraf/controller/get-started.md +++ b/content/telegraf/controller/get-started.md @@ -55,6 +55,8 @@ stdout and reports agent health back to {{% product-name %}}. [[outputs.file]] files = ["stdout"] + data_format = "template" + template = "{{ .Time.Format \"15:04:05\" }}: {{ .Field \"value\" }}\n" [[outputs.heartbeat]] url = "http://localhost:8000/agents/heartbeat" @@ -82,6 +84,8 @@ stdout and reports agent health back to {{% product-name %}}. [[outputs.file]] files = ["stdout"] + data_format = "template" + template = "{{ .Time.Format \"15:04:05\" }}: {{ .Field \"value\" }}\n" [[outputs.heartbeat]] url = "http://localhost:8000/agents/heartbeat" @@ -102,7 +106,7 @@ stdout and reports agent health back to {{% product-name %}}. - Uses the `exec` input plugin to execute an `echo` command to output a message. - Uses the `file` output plugin to output the message to `stdout`, formatted - as InfluxDB line protocol (default). + using a template includes a timestamp and the message. - Uses the heartbeat plugin to periodically sends agent status information back to {{% product-name %}}, which lets you monitor agent health, track which configurations are loaded, and detect when agents stop reporting. @@ -235,7 +239,7 @@ configuration if it has changed. After starting, Telegraf retrieves the configuration from {{% product-name %}} and begins collecting metrics. -You should see `message` printed to stdout formatted as InfluxDB line protocol (default). +You should see the timestamp and message printed to stdout. ## View the reporting agent @@ -257,11 +261,35 @@ message generated by the `exec` input plugin. 2. Click the name of the configuration you created. 3. Update the `echo` command to print a different message: - ```toml { callout="AN UPDATED" callout-color="orange" } - [[outputs.file]] - commands = ["echo 'Telegraf started using AN UPDATED configuration from Telegraf Controller'"] - # ... - ``` + {{< code-tabs-wrapper >}} +{{% code-tabs %}} +[Linux/macOS](#) +[Windows](#) +{{% /code-tabs %}} +{{% code-tab-content %}} + + + +```toml { callout="AN UPDATED" callout-color="orange" } +[[outputs.file]] + commands = ["echo 'Telegraf started using AN UPDATED configuration from Telegraf Controller'"] + # ... +``` + + +{{% /code-tab-content %}} +{{% code-tab-content %}} + + +```toml { callout="AN UPDATED" callout-color="orange" } +[[outputs.file]] + commands = ["cmd /C echo 'Telegraf started using AN UPDATED configuration from Telegraf Controller'"] + # ... +``` + + +{{% /code-tab-content %}} + {{< /code-tabs-wrapper >}} 4. Click **Save**. @@ -287,4 +315,4 @@ new message, confirming that the agent picked up the updated configuration. - [Configure agent statuses](/telegraf/controller/agents/status/) to monitor agent health using CEL expressions. - [Manage API tokens](/telegraf/controller/tokens/) to control access to - {{% product-name %}} APIs. \ No newline at end of file + {{% product-name %}} APIs. From 5d79516ef1baa458b5067a26b42df0b97e27a41d Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Fri, 12 Jun 2026 15:53:18 -0600 Subject: [PATCH 5/5] feat(tc-get-started): minor updates to the telegraf controller getting started guide --- assets/jsconfig.json | 3 +- content/telegraf/controller/get-started.md | 92 ++++++++++++---------- 2 files changed, 52 insertions(+), 43 deletions(-) diff --git a/assets/jsconfig.json b/assets/jsconfig.json index 377218ccba..4ad710c105 100644 --- a/assets/jsconfig.json +++ b/assets/jsconfig.json @@ -3,7 +3,8 @@ "baseUrl": ".", "paths": { "*": [ - "*" + "*", + "../node_modules/*" ] } } diff --git a/content/telegraf/controller/get-started.md b/content/telegraf/controller/get-started.md index bfa565a536..9ae37e633b 100644 --- a/content/telegraf/controller/get-started.md +++ b/content/telegraf/controller/get-started.md @@ -16,13 +16,39 @@ This guide walks you through the core workflow: creating a configuration, starting a Telegraf agent using the configuration, and verifying that the agent reports back to {{% product-name %}}. -1. [Create a Telegraf configuration](#create-a-telegraf-configuration) -2. [Create an API token](#create-an-api-token) +1. [Create an API token](#create-an-api-token) +2. [Create a Telegraf configuration](#create-a-telegraf-configuration) 3. [Start a Telegraf agent](#start-a-telegraf-agent) 4. [View the reporting agent](#view-the-reporting-agent) 5. [Update the configuration](#update-the-configuration) 6. [Verify the configuration update](#verify-the-configuration-update) +## Create an API token + +API tokens authenticate Telegraf agents when they retrieve configurations and +send heartbeats to {{% product-name %}}. + +1. Navigate to the **API Tokens** page. +2. Click **+ Create API Token**. +3. Enter a description--for example, `Getting started agent token`. +4. Select a token **Expiration**. +4. Select the permissions to assign to the token. For convenience, you can + select the one of the available **Permission Presets**. + + > [!Tip] + > The **Telegraf Agent** preset includes all permissions a Telegraf agent + > needs to interact with {{% product-name %}}. + +5. Click **Create Token**. + +> [!Important] +> #### Copy and store your token +> +> Copy your API token immediately after creation. +> The full token value is only displayed once and cannot be retrieved later. + +_For more information about token permissions, see [Manage API tokens](/telegraf/controller/tokens/)._ + ## Create a Telegraf configuration Configurations define what data Telegraf collects, how it processes the data, @@ -33,7 +59,7 @@ stdout and reports agent health back to {{% product-name %}}. 1. In the {{% product-name %}} user interface (UI), select **Configurations** in the navigation bar. 2. Click **{{% icon "plus" %}} Add Config**. -3. Enter a name and description for the configuration—for example, +3. Enter a name and description for the configuration--for example, "Getting Started." 4. In the **Code Editor**, enter the following TOML: @@ -43,7 +69,7 @@ stdout and reports agent health back to {{% product-name %}}. [Windows](#) {{% /code-tabs %}} {{% code-tab-content %}} - + ```toml { .tc-dynamic-values } [[inputs.exec]] @@ -63,16 +89,18 @@ stdout and reports agent health back to {{% product-name %}}. instance_id = "&{agent_id}" interval = "1m" include = ["hostname", "statistics", "configs", "status"] - token = "${INFLUX_TOKEN}" + # Include to authorize with Telegraf Controller + # Note: If using Telegraf 1.38.x or earlier, use INFLUX_TOKEN + token = "${TELEGRAF_CONTROLLER_TOKEN}" [outputs.heartbeat.status] default = "ok" ``` - + {{% /code-tab-content %}} {{% code-tab-content %}} - + ```toml { .tc-dynamic-values } [[inputs.exec]] @@ -92,13 +120,15 @@ stdout and reports agent health back to {{% product-name %}}. instance_id = "&{agent_id}" interval = "1m" include = ["hostname", "statistics", "configs", "status"] - token = "${INFLUX_TOKEN}" + # Include to authorize with Telegraf Controller + # Note: If using Telegraf 1.38.x or earlier, use INFLUX_TOKEN + token = "${TELEGRAF_CONTROLLER_TOKEN}" [outputs.heartbeat.status] default = "ok" ``` - + {{% /code-tab-content %}} {{< /code-tabs-wrapper >}} @@ -110,7 +140,8 @@ stdout and reports agent health back to {{% product-name %}}. - Uses the heartbeat plugin to periodically sends agent status information back to {{% product-name %}}, which lets you monitor agent health, track which configurations are loaded, and detect when agents stop reporting. - - Uses the `INFLUX_TOKEN` environment variable to authorize with + - Uses the `TELEGRAF_CONTROLLER_TOKEN` (Telegraf 1.39+) or the`INFLUX_TOKEN` + (Telegraf 1.38.x or earlier) environment variable to authorize with {{% product-name %}}. - Uses the `agent_id` [parameter](/telegraf/controller/configs/dynamic-values/#parameters) to set the `instance_id` which uniquely identifies the Telegraf agent. @@ -119,37 +150,11 @@ stdout and reports agent health back to {{% product-name %}}. > #### Heartbeat URL and port > > The example above uses `http://localhost` and the default heartbeat port, - > `8000`. If you are using HTTPS or a custom domain and port, update the - > `url` setting in the Heartbeat output plugin accordingly. + > `8000`. Your {{% product-name %}} instance provides a default heartbeat + > configuration with the heartbeat URL and port for your instance. 5. Click **Create Configuration**. -## Create an API token - -API tokens authenticate Telegraf agents when they retrieve configurations and -send heartbeats to {{% product-name %}}. - -1. Navigate to the **API Tokens** page. -2. Click **+ Create API Token**. -3. Enter a description—for example, `Getting started agent token`. -4. Select a token **Expiration**. -4. Select the permissions to assign to the token. For convenience, you can - select the one of the available **Permission Presets**. - - > [!Tip] - > The **Telegraf Agent** preset includes all permissions a Telegraf agent - > needs to interact with {{% product-name %}}. - -5. Click **Create Token**. - -> [!Important] -> #### Copy and store your token -> -> Copy your API token immediately after creation. -> The full token value is only displayed once and cannot be retrieved later. - -_For more information about token permissions, see [Manage API tokens](/telegraf/controller/tokens/)._ - ## Start a Telegraf agent With a configuration and token ready, start a Telegraf agent that pulls its @@ -195,7 +200,8 @@ port, configuration ID, API token, and agent ID: ```bash { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID|AGENT_ID" } -export INFLUX_TOKEN=YOUR_TC_API_TOKEN +# Note: If using Telegraf 1.38.x or earlier, use INFLUX_TOKEN environment variable +export TELEGRAF_CONTROLLER_TOKEN=YOUR_TC_API_TOKEN telegraf \ --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml?agent_id=AGENT_ID" \ @@ -209,7 +215,8 @@ telegraf \ ```powershell { placeholders="YOUR_TC_API_TOKEN|YOUR_CONFIG_ID|AGENT_ID" } -$env:INFLUX_TOKEN="YOUR_TC_API_TOKEN" +# Note: If using Telegraf 1.38.x or earlier, use INFLUX_TOKEN environment variable +$env:TELEGRAF_CONTROLLER_TOKEN="YOUR_TC_API_TOKEN" telegraf.exe ` --config "http://localhost:8888/api/configs/YOUR_CONFIG_ID/toml?agent_id=AGENT_ID" ` @@ -229,8 +236,9 @@ Replace the following: - {{% code-placeholder-key %}}`AGENT_ID`{{% /code-placeholder-key %}}: A unique ID for your Telegraf agent -The `INFLUX_TOKEN` environment variable authorizes the agent to retrieve the -configuration and send heartbeats to {{% product-name %}}. +The `TELEGRAF_CONTROLLER_TOKEN` (Telegraf 1.39+) or the`INFLUX_TOKEN` +(Telegraf 1.38.x or earlier) environment variables authorize the agent to +retrieve the configuration and send heartbeats to {{% product-name %}}. The `--config-url-watch-interval` flag tells Telegraf to check for configuration updates at the specified interval.