content/telegraf/controller/configs/dynamic-values.md
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:
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 when requesting the configuration from {{% product-name %}}.
{{% telegraf/dynamic-values %}}
[[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:8181agent_id ({{< req >}})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-->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 above, Telegraf would load the following TOML configuration:
[[outputs.influxdb_v2]]
# Parameter with a default value
urls = ["https://mydomain:8181"]
[[outputs.heartbeat]]
# Required parameter without a default value
instance_id = "agent123"
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:
${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/dynamic-values %}}
[[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:8080AUTH_TOKEN ({{< req >}})Telegraf loads environment variables from the agent runtime environment.
<!--pytest.mark.skip-->API_ENDPOINT=https://mydomain.com/metrics
AUTH_TOKEN=x00x0xx00xxxX0xXXx0000xxxX000x00XXxXx
telegraf \
--config "http://localhost:8888/api/configs/xxxxxx/toml"
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 %}}
# 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.
When using secrets:
id so references to a secret store remain consistent.