Configuring Telegraf
This page documents an earlier version of Telegraf. Telegraf v1.21 is the latest stable version. View this page in the v1.21 documentation.
The Telegraf configuration file (telegraf.conf
) lists all available Telegraf plugins. See the current version here: telegraf.conf.
Generate a configuration file
A default Telegraf configuration file can be auto-generated by Telegraf:
telegraf config > telegraf.conf
To generate a configuration file with specific inputs and outputs, you can use the
--input-filter
and --output-filter
flags:
telegraf --input-filter cpu:mem:net:swap --output-filter influxdb:kafka config
Configuration file locations
Use the --config
flag to specify the configuration file location:
- Filename and path, for example:
--config /etc/default/telegraf
- Remote URL endpoint, for example:
--config "http://remote-URL-endpoint"
Use the --config-directory
flag to include files ending with .conf
in the specified directory in the Telegraf
configuration.
On most systems, the default locations are /etc/telegraf/telegraf.conf
for
the main configuration file and /etc/telegraf/telegraf.d
for the directory of
configuration files.
Set environment variables
Add environment variables anywhere in the configuration file by prepending them with $
.
For strings, variables must be in quotes (for example, "$STR_VAR"
).
For numbers and Booleans, variables must be unquoted (for example, $INT_VAR
, $BOOL_VAR
).
You can also set environment variables using the Linux export
command: export password=mypassword
Note: We recommend using environment variables for sensitive information.
Example: Telegraf environment variables
In the Telegraf environment variables file (/etc/default/telegraf
):
USER="alice"
INFLUX_URL="http://localhost:8086"
INFLUX_SKIP_DATABASE_CREATION="true"
INFLUX_PASSWORD="monkey123"
In the Telegraf configuration file (/etc/telegraf.conf
):
[global_tags]
user = "${USER}"
[[inputs.mem]]
[[outputs.influxdb]]
urls = ["${INFLUX_URL}"]
skip_database_creation = ${INFLUX_SKIP_DATABASE_CREATION}
password = "${INFLUX_PASSWORD}"
The environment variables above add the following configuration settings to Telegraf:
[global_tags]
user = "alice"
[[outputs.influxdb]]
urls = "http://localhost:8086"
skip_database_creation = true
password = "monkey123"
Global tags
Global tags can be specified in the [global_tags]
section of the config file
in key="value"
format. All metrics being gathered on this host will be tagged
with the tags specified here.
Agent configuration
Telegraf has a few options you can configure under the [agent]
section of the
config.
- interval: Default data collection interval for all inputs
- round_interval: Rounds collection interval to
interval
. For example, ifinterval
is set to 10s then always collect on :00, :10, :20, etc. - metric_batch_size: Telegraf will send metrics to output in batch of at
most
metric_batch_size
metrics. - metric_buffer_limit: Telegraf will cache
metric_buffer_limit
metrics for each output, and will flush this buffer on a successful write. This should be a multiple ofmetric_batch_size
and could not be less than 2 timesmetric_batch_size
. - collection_jitter: Collection jitter is used to jitter the collection by a random amount. Each plugin will sleep for a random time within jitter before collecting. This can be used to avoid many plugins querying things like sysfs at the same time, which can have a measurable effect on the system.
- flush_interval: Default data flushing interval for all outputs.
You should not set this below
interval
. Maximumflush_interval
will beflush_interval
+flush_jitter
- flush_jitter: Jitter the flush interval by a random amount.
This is primarily to avoid
large write spikes for users running a large number of Telegraf instances.
For example, a
flush_jitter
of 5s andflush_interval
of 10s means flushes will happen every 10-15s. - precision: By default, precision will be set to the same timestamp order
as the collection interval, with the maximum being 1s. Precision will NOT
be used for service inputs, such as
logparser
andstatsd
. Valid values arens
,us
(orµs
),ms
, ands
. - logfile: Specify the log file name. The empty string means to log to
stderr
. - debug: Run Telegraf in debug mode.
- quiet: Run Telegraf in quiet mode (error messages only).
- hostname: Override default hostname, if empty use
os.Hostname()
. - omit_hostname: If true, do no set the
host
tag in the Telegraf agent.
Input configuration
The following config parameters are available for all inputs:
- interval: How often to gather this metric. Normal plugins use a single global interval, but if one particular input should be run less or more often, you can configure that here.
- name_override: Override the base name of the measurement. (Default is the name of the input).
- name_prefix: Specifies a prefix to attach to the measurement name.
- name_suffix: Specifies a suffix to attach to the measurement name.
- tags: A map of tags to apply to a specific input’s measurements.
Output configuration
There are no generic configuration options available for all outputs.
Aggregator configuration
The following config parameters are available for all aggregators:
- period: The period on which to flush & clear each aggregator. All metrics that are sent with timestamps outside of this period will be ignored by the aggregator.
- delay: The delay before each aggregator is flushed. This is to control how long for aggregators to wait before receiving metrics from input plugins, in the case that aggregators are flushing and inputs are gathering on the same interval.
- drop_original: If true, the original metric will be dropped by the aggregator and will not get sent to the output plugins.
- name_override: Override the base name of the measurement. (Default is the name of the input).
- name_prefix: Specifies a prefix to attach to the measurement name.
- name_suffix: Specifies a suffix to attach to the measurement name.
- tags: A map of tags to apply to a specific input’s measurements.
Processor configuration
The following config parameters are available for all processors:
- order: This is the order in which processors are executed. If this is not specified, then processor execution order will be random.
Measurement filtering
Filters can be configured per input, output, processor, or aggregator, see below for examples.
- namepass: An array of glob pattern strings. Only points whose measurement name matches a pattern in this list are emitted.
- namedrop:
The inverse of
namepass
. If a match is found the point is discarded. This is tested on points after they have passed thenamepass
test. - fieldpass: An array of glob pattern strings. Only fields whose field key matches a pattern in this list are emitted.
- fielddrop:
The inverse of
fieldpass
. Fields with a field key matching one of the patterns will be discarded from the point. - tagpass: A table mapping tag keys to arrays of glob pattern strings. Only points that contain a tag key in the table and a tag value matching one of its patterns is emitted.
- tagdrop:
The inverse of
tagpass
. If a match is found the point is discarded. This is tested on points after they have passed thetagpass
test. - taginclude:
An array of glob pattern strings. Only tags with a tag key matching one of
the patterns are emitted. In contrast to
tagpass
, which will pass an entire point based on its tag,taginclude
removes all non matching tags from the point. This filter can be used on both inputs & outputs, but it is recommended to be used on inputs, as it is more efficient to filter out tags at the ingestion point. - tagexclude:
The inverse of
taginclude
. Tags with a tag key matching one of the patterns will be discarded from the point.
NOTE Due to the way TOML is parsed, tagpass
and tagdrop
parameters
must be defined at the end of the plugin definition, otherwise subsequent
plugin config options will be interpreted as part of the tagpass/tagdrop
tables.
Input configuration examples
This is a full working config that will output CPU data to an InfluxDB instance
at 192.168.59.103:8086
, tagging measurements with dc="denver-1"
. It will output
measurements at a 10s interval and will collect per-cpu data, dropping any
fields which begin with time_
.
[global_tags]
dc = "denver-1"
[agent]
interval = "10s"
# OUTPUTS
[[outputs.influxdb]]
url = "http://192.168.59.103:8086" # required.
database = "telegraf" # required.
precision = "s"
# INPUTS
[[inputs.cpu]]
percpu = true
totalcpu = false
# filter all fields beginning with 'time_'
fielddrop = ["time_*"]
Input Config: tagpass
and tagdrop
NOTE tagpass
and tagdrop
parameters must be defined at the end of
the plugin definition, otherwise subsequent plugin config options will be
interpreted as part of the tagpass/tagdrop map.
[[inputs.cpu]]
percpu = true
totalcpu = false
fielddrop = ["cpu_time"]
# Don't collect CPU data for cpu6 & cpu7
[inputs.cpu.tagdrop]
cpu = [ "cpu6", "cpu7" ]
[[inputs.disk]]
[inputs.disk.tagpass]
# tagpass conditions are OR, not AND.
# If the (filesystem is ext4 or xfs) OR (the path is /opt or /home)
# then the metric passes
fstype = [ "ext4", "xfs" ]
# Globs can also be used on the tag values
path = [ "/opt", "/home*" ]
Input Config: fieldpass
and fielddrop
# Drop all metrics for guest & steal CPU usage
[[inputs.cpu]]
percpu = false
totalcpu = true
fielddrop = ["usage_guest", "usage_steal"]
# Only store inode related metrics for disks
[[inputs.disk]]
fieldpass = ["inodes*"]
Input Config: namepass
and namedrop
# Drop all metrics about containers for kubelet
[[inputs.prometheus]]
urls = ["http://kube-node-1:4194/metrics"]
namedrop = ["container_*"]
# Only store rest client related metrics for kubelet
[[inputs.prometheus]]
urls = ["http://kube-node-1:4194/metrics"]
namepass = ["rest_client_*"]
Input Config: taginclude
and tagexclude
# Only include the "cpu" tag in the measurements for the cpu plugin.
[[inputs.cpu]]
percpu = true
totalcpu = true
taginclude = ["cpu"]
# Exclude the `fstype` tag from the measurements for the disk plugin.
[[inputs.disk]]
tagexclude = ["fstype"]
Input config: prefix
, suffix
, and override
This plugin will emit measurements with the name cpu_total
.
[[inputs.cpu]]
name_suffix = "_total"
percpu = false
totalcpu = true
This will emit measurements with the name foobar
.
[[inputs.cpu]]
name_override = "foobar"
percpu = false
totalcpu = true
Input config: tags
This plugin will emit measurements with two additional tags: tag1=foo
and
tag2=bar
.
NOTE: Order matters, the [inputs.cpu.tags]
table must be at the end of the
plugin definition.
[[inputs.cpu]]
percpu = false
totalcpu = true
[inputs.cpu.tags]
tag1 = "foo"
tag2 = "bar"
Multiple inputs of the same type
Additional inputs (or outputs) of the same type can be specified by defining these instances in the configuration file. To avoid measurement collisions, use the name_override
, name_prefix
, or name_suffix
config options:
[[inputs.cpu]]
percpu = false
totalcpu = true
[[inputs.cpu]]
percpu = true
totalcpu = false
name_override = "percpu_usage"
fielddrop = ["cpu_time*"]
Output configuration examples:
[[outputs.influxdb]]
urls = [ "http://localhost:8086" ]
database = "telegraf"
precision = "s"
# Drop all measurements that start with "aerospike"
namedrop = ["aerospike*"]
[[outputs.influxdb]]
urls = [ "http://localhost:8086" ]
database = "telegraf-aerospike-data"
precision = "s"
# Only accept aerospike data:
namepass = ["aerospike*"]
[[outputs.influxdb]]
urls = [ "http://localhost:8086" ]
database = "telegraf-cpu0-data"
precision = "s"
# Only store measurements where the tag "cpu" matches the value "cpu0"
[outputs.influxdb.tagpass]
cpu = ["cpu0"]
Aggregator Configuration Examples:
This will collect and emit the min/max of the system load1 metric every 30s, dropping the originals.
[[inputs.system]]
fieldpass = ["load1"] # collects system load1 metric.
[[aggregators.minmax]]
period = "30s" # send & clear the aggregate every 30s.
drop_original = true # drop the original metrics.
[[outputs.file]]
files = ["stdout"]
This will collect and emit the min/max of the swap metrics every
30s, dropping the originals. The aggregator will not be applied
to the system load metrics due to the namepass
parameter.
[[inputs.swap]]
[[inputs.system]]
fieldpass = ["load1"] # collects system load1 metric.
[[aggregators.minmax]]
period = "30s" # send & clear the aggregate every 30s.
drop_original = true # drop the original metrics.
namepass = ["swap"] # only "pass" swap metrics through the aggregator.
[[outputs.file]]
files = ["stdout"]
Support and feedback
Thank you for being part of our community! We welcome and encourage your feedback and bug reports for Telegraf and this documentation. To find support, the following resources are available:
InfluxDB Cloud customers can contact InfluxData Support.