177 lines
5.2 KiB
Markdown
177 lines
5.2 KiB
Markdown
---
|
|
title: Use dynamic values in configurations
|
|
seotitle: Use dynamic values in Telegraf configurations with Telegraf Controller
|
|
description: >
|
|
Use parameters, environment variables, and secrets to dynamically set values
|
|
in your Telegraf configurations.
|
|
menu:
|
|
telegraf_controller:
|
|
name: Use dynamic values
|
|
parent: Manage configurations
|
|
weight: 103
|
|
---
|
|
|
|
Use dynamic values in your Telegraf configurations and reuse a single
|
|
configuration for multiple distinct agents or across environments.
|
|
|
|
Telegraf Controller supports the following dynamic value types:
|
|
|
|
- **Parameters** for values you want to set or override per agent.
|
|
- **Environment variables** for values provided by the running Telegraf agent.
|
|
- **Secrets** for sensitive values stored in an external secret store.
|
|
|
|
## Parameters
|
|
|
|
Use parameters for values that change between agents, deployments, or environments.
|
|
Define the parameter where the configuration is easy to find, and then
|
|
reference it in plugin settings. _Configuration parameters are a feature of
|
|
{{% product-name %}} and are not part of the Telegraf project._
|
|
|
|
> [!Important]
|
|
> #### Do not use parameters for sensitive information
|
|
>
|
|
> Do not use parameters to provide sensitive information in agent configurations.
|
|
> Parameter values are passed over the network.
|
|
> Use environment variables or secrets to provide sensitive information to agents.
|
|
|
|
Use the following syntax:
|
|
|
|
```
|
|
&{param_name[:default_value]}
|
|
```
|
|
|
|
Parameters do not require a default value. Any parameter without a default
|
|
value is considered required and must [be defined](#define-parameters) when
|
|
requesting the configuration from {{% product-name %}}.
|
|
|
|
### Use parameters in Telegraf configurations
|
|
|
|
{{% telegraf/dynamic-values %}}
|
|
```toml
|
|
[[outputs.influxdb_v2]]
|
|
# Parameter with a default value
|
|
urls = ["&{db_host:https://localhost:8181}"]
|
|
|
|
[[outputs.heartbeat]]
|
|
# Required parameter without a default value
|
|
instance_id = "&{agent_id}"
|
|
```
|
|
{{% /telegraf/dynamic-values %}}
|
|
|
|
The example above uses two parameters:
|
|
|
|
- `db_host` with a default value of `https://localhost:8181`
|
|
- `agent_id` ({{< req >}})
|
|
|
|
### Define parameters
|
|
|
|
Use URL-encoded query parameters to define parameter values when requesting a
|
|
configuration's TOML. The {{% product-name %}} API returns the TOML with replaced
|
|
parameters.
|
|
|
|
_For readability, the following example uses Shell variables to build the
|
|
configuration URL with query parameters for each configuration parameter:_
|
|
|
|
<!--pytest.mark.skip-->
|
|
```sh
|
|
configUrl="http://localhost:8888/api/configs/xxxxxx/toml"
|
|
params="?db_host=https%3A%2F%2Fmydomain%3A8181"
|
|
params+="&agent_id=agent123"
|
|
configUrl+=$params
|
|
|
|
telegraf \
|
|
--config $configUrl
|
|
```
|
|
|
|
If requesting the [example configuration](#use-parameters-in-telegraf-configurations)
|
|
above, Telegraf would load the following TOML configuration:
|
|
|
|
```toml
|
|
[[outputs.influxdb_v2]]
|
|
# Parameter with a default value
|
|
urls = ["https://mydomain:8181"]
|
|
|
|
[[outputs.heartbeat]]
|
|
# Required parameter without a default value
|
|
instance_id = "agent123"
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
Use environment variables for values that Telegraf reads from the agent
|
|
environment at runtime.
|
|
Provide a default to keep the configuration portable across environments.
|
|
|
|
Use the following syntax:
|
|
|
|
```sh
|
|
${VAR_NAME[:-default_value]}
|
|
```
|
|
|
|
Environment variables do not require a default value. Any environment variable
|
|
without a default value is considered required and must be defined in the
|
|
Telegraf agent's environment when using the configuration.
|
|
|
|
For more information about Telegraf environment variable syntax, see
|
|
[Telegraf configuration options—Set environment variables](/telegraf/v1/configuration/#set-environment-variables).
|
|
|
|
### Use environment variables in Telegraf configurations
|
|
|
|
{{% telegraf/dynamic-values %}}
|
|
```toml
|
|
[[inputs.http]]
|
|
urls = ["${API_ENDPOINT:-http://localhost:8080}/metrics"]
|
|
|
|
[inputs.http.headers]
|
|
Authorization = "Bearer ${AUTH_TOKEN}"
|
|
```
|
|
{{% /telegraf/dynamic-values %}}
|
|
|
|
The example above uses two environment variables:
|
|
|
|
- `API_ENDPOINT` with a default value of `http://localhost:8080`
|
|
- `AUTH_TOKEN` ({{< req >}})
|
|
|
|
### Define environment variables at runtime
|
|
|
|
Telegraf loads environment variables from the agent runtime environment.
|
|
|
|
<!--pytest.mark.skip-->
|
|
```sh
|
|
API_ENDPOINT=https://mydomain.com/metrics
|
|
AUTH_TOKEN=x00x0xx00xxxX0xXXx0000xxxX000x00XXxXx
|
|
|
|
telegraf \
|
|
--config "http://localhost:8888/api/configs/xxxxxx/toml"
|
|
```
|
|
|
|
## Secrets
|
|
|
|
Use secrets for credentials or tokens you do not want to store in plain text.
|
|
Secrets require a secret store and its corresponding `secretstores` plugin.
|
|
|
|
{{% telegraf/dynamic-values %}}
|
|
```toml
|
|
# Configure a secret store plugin
|
|
[[secretstores.vault]]
|
|
id = "my_vault"
|
|
address = "my_vault:8200"
|
|
token_file = "/path/to/auth/token"
|
|
# ...
|
|
|
|
# Use secrets from the configured secret store
|
|
[[outputs.influxdb_v2]]
|
|
host = "my_influxdb.com:8181"
|
|
token = "@{my_vault:influx_token}"
|
|
```
|
|
{{% /telegraf/dynamic-values %}}
|
|
|
|
For more information about Telegraf secrets and secret stores, see
|
|
[Telegraf configuration options—Secret stores](/telegraf/v1/configuration/#secret-stores).
|
|
|
|
When using secrets:
|
|
|
|
- Configure the secret store plugin in the same configuration.
|
|
- Use a stable `id` so references to a secret store remain consistent.
|
|
- Ensure the Telegraf agent can reach and authenticate with the secret store.
|