# Telegraf Configuration # # Telegraf is entirely plugin driven. All metrics are gathered from the # declared inputs, and sent to the declared outputs. # # Plugins must be declared in here to be active. # To deactivate a plugin, comment out the name and any variables. # # Use 'telegraf -config telegraf.conf -test' to see what metrics a config # file would generate. # # Environment variables can be used anywhere in this config file, simply surround # them with ${}. For strings the variable must be within quotes (ie, "${STR_VAR}"), # for numbers and booleans they should be plain (ie, ${INT_VAR}, ${BOOL_VAR}) # Global tags can be specified here in key="value" format. [global_tags] # dc = "us-east-1" # will tag all metrics with dc=us-east-1 # rack = "1a" ## Environment variables can be used as tags, and throughout the config file # user = "$USER" # Configuration for telegraf agent [agent] ## Default data collection interval for all inputs interval = "10s" ## Rounds collection interval to 'interval' ## ie, if interval="10s" then always collect on :00, :10, :20, etc. round_interval = true ## Telegraf will send metrics to outputs in batches of at most ## metric_batch_size metrics. ## This controls the size of writes that Telegraf sends to output plugins. metric_batch_size = 1000 ## Maximum number of unwritten metrics per output. Increasing this value ## allows for longer periods of output downtime without dropping metrics at the ## cost of higher maximum memory usage. metric_buffer_limit = 10000 ## 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. collection_jitter = "0s" ## Default flushing interval for all outputs. Maximum flush_interval will be ## flush_interval + flush_jitter flush_interval = "10s" ## 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. ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s flush_jitter = "0s" ## By default or when set to "0s", precision will be set to the same ## timestamp order as the collection interval, with the maximum being 1s. ## ie, when interval = "10s", precision will be "1s" ## when interval = "250ms", precision will be "1ms" ## Precision will NOT be used for service inputs. It is up to each individual ## service input to set the timestamp at the appropriate precision. ## Valid time units are "ns", "us" (or "µs"), "ms", "s". precision = "" ## Log at debug level. # debug = false ## Log only error level messages. # quiet = false ## Log target controls the destination for logs and can be one of "file", ## "stderr" or, on Windows, "eventlog". When set to "file", the output file ## is determined by the "logfile" setting. # logtarget = "file" ## Name of the file to be logged to when using the "file" logtarget. If set to ## the empty string then logs are written to stderr. # logfile = "" ## The logfile will be rotated after the time interval specified. When set ## to 0 no time based rotation is performed. Logs are rotated only when ## written to, if there is no log activity rotation may be delayed. # logfile_rotation_interval = "0d" ## The logfile will be rotated when it becomes larger than the specified ## size. When set to 0 no size based rotation is performed. # logfile_rotation_max_size = "0MB" ## Maximum number of rotated archives to keep, any older logs are deleted. ## If set to -1, no archives are removed. # logfile_rotation_max_archives = 5 ## Override default hostname, if empty use os.Hostname() hostname = "" ## If set to true, do no set the "host" tag in the telegraf agent. omit_hostname = false ############################################################################### # OUTPUT PLUGINS # ############################################################################### # Configuration for sending metrics to InfluxDB #[[outputs.influxdb]] ## The full HTTP or UDP URL for your InfluxDB instance. ## ## Multiple URLs can be specified for a single cluster, only ONE of the ## urls will be written to each interval. # urls = ["unix:///var/run/influxdb.sock"] # urls = ["udp://127.0.0.1:8089"] # urls = ["http://127.0.0.1:8086"] ## The target database for metrics; will be created as needed. ## For UDP url endpoint database needs to be configured on server side. # database = "telegraf" ## The value of this tag will be used to determine the database. If this ## tag is not set the 'database' option is used as the default. # database_tag = "" ## If true, the 'database_tag' will not be included in the written metric. # exclude_database_tag = false ## If true, no CREATE DATABASE queries will be sent. Set to true when using ## Telegraf with a user without permissions to create databases or when the ## database already exists. # skip_database_creation = false ## Name of existing retention policy to write to. Empty string writes to ## the default retention policy. Only takes effect when using HTTP. # retention_policy = "" ## The value of this tag will be used to determine the retention policy. If this ## tag is not set the 'retention_policy' option is used as the default. # retention_policy_tag = "" ## If true, the 'retention_policy_tag' will not be included in the written metric. # exclude_retention_policy_tag = false ## Write consistency (clusters only), can be: "any", "one", "quorum", "all". ## Only takes effect when using HTTP. # write_consistency = "any" ## Timeout for HTTP messages. # timeout = "5s" ## HTTP Basic Auth # username = "telegraf" # password = "metricsmetricsmetricsmetrics" ## HTTP User-Agent # user_agent = "telegraf" ## UDP payload size is the maximum packet size to send. # udp_payload = "512B" ## Optional TLS Config for use on HTTP connections. # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification # insecure_skip_verify = false ## HTTP Proxy override, if unset values the standard proxy environment ## variables are consulted to determine which proxy, if any, should be used. # http_proxy = "http://corporate.proxy:3128" ## Additional HTTP headers # http_headers = {"X-Special-Header" = "Special-Value"} ## HTTP Content-Encoding for write request body, can be set to "gzip" to ## compress body or "identity" to apply no encoding. # content_encoding = "gzip" ## When true, Telegraf will output unsigned integers as unsigned values, ## i.e.: "42u". You will need a version of InfluxDB supporting unsigned ## integer values. Enabling this option will result in field type errors if ## existing data has been written. # influx_uint_support = false # # Send metrics to nowhere at all # [[outputs.discard]] # # no configuration # # Send metrics to command as input over stdin # [[outputs.exec]] # ## Command to ingest metrics via stdin. # command = ["tee", "-a", "/dev/null"] # # ## Timeout for command to complete. # # timeout = "5s" # # ## Data format to output. # ## Each data format has its own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md # # data_format = "influx" # # Run executable as long-running output plugin # [[outputs.execd]] # ## Program to run as daemon # command = ["my-telegraf-output", "--some-flag", "value"] # # ## Delay before the process is restarted after an unexpected termination # restart_delay = "10s" # # ## Data format to export. # ## Each data format has its own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md # data_format = "influx" # Send telegraf metrics to file(s) [[outputs.file]] ## Files to write to, "stdout" is a specially handled file. files = ["stdout", "/tmp/metrics.out"] ## Use batch serialization format instead of line based delimiting. The ## batch format allows for the production of non line based output formats and ## may more efficiently encode metric groups. # use_batch_format = false ## The file will be rotated after the time interval specified. When set ## to 0 no time based rotation is performed. # rotation_interval = "0d" ## The logfile will be rotated when it becomes larger than the specified ## size. When set to 0 no size based rotation is performed. # rotation_max_size = "0MB" ## Maximum number of rotated archives to keep, any older logs are deleted. ## If set to -1, no archives are removed. # rotation_max_archives = 5 ## Data format to output. ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md data_format = "influx" # # Configuration for Graphite server to send metrics to # [[outputs.graphite]] # ## TCP endpoint for your graphite instance. # ## If multiple endpoints are configured, output will be load balanced. # ## Only one of the endpoints will be written to with each iteration. # servers = ["localhost:2003"] # ## Prefix metrics name # prefix = "" # ## Graphite output template # ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md # template = "host.tags.measurement.field" # # ## Enable Graphite tags support # # graphite_tag_support = false # # ## Character for separating metric name and field for Graphite tags # # graphite_separator = "." # # ## Graphite templates patterns # ## 1. Template for cpu # ## 2. Template for disk* # ## 3. Default template # # templates = [ # # "cpu tags.measurement.host.field", # # "disk* measurement.field", # # "host.measurement.tags.field" # #] # # ## timeout in seconds for the write connection to graphite # timeout = 2 # # ## Optional TLS Config # # tls_ca = "/etc/telegraf/ca.pem" # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # ## Use TLS but skip chain & host verification # # insecure_skip_verify = false # # Send telegraf metrics to graylog # [[outputs.graylog]] # ## UDP endpoint for your graylog instance. # servers = ["127.0.0.1:12201"] # # ## The field to use as the GELF short_message, if unset the static string # ## "telegraf" will be used. # ## example: short_message_field = "message" # # short_message_field = "" # # Configurable HTTP health check resource based on metrics # [[outputs.health]] # ## Address and port to listen on. # ## ex: service_address = "http://localhost:8080" # ## service_address = "unix:///var/run/telegraf-health.sock" # # service_address = "http://:8080" # # ## The maximum duration for reading the entire request. # # read_timeout = "5s" # ## The maximum duration for writing the entire response. # # write_timeout = "5s" # # ## Username and password to accept for HTTP basic authentication. # # basic_username = "user1" # # basic_password = "secret" # # ## Allowed CA certificates for client certificates. # # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] # # ## TLS server certificate and private key. # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # # ## One or more check sub-tables should be defined, it is also recommended to # ## use metric filtering to limit the metrics that flow into this output. # ## # ## When using the default buffer sizes, this example will fail when the # ## metric buffer is half full. # ## # ## namepass = ["internal_write"] # ## tagpass = { output = ["influxdb"] } # ## # ## [[outputs.health.compares]] # ## field = "buffer_size" # ## lt = 5000.0 # ## # ## [[outputs.health.contains]] # ## field = "buffer_size" # # A plugin that can transmit metrics over HTTP # [[outputs.http]] # ## URL is the address to send metrics to # url = "http://127.0.0.1:8080/telegraf" # # ## Timeout for HTTP message # # timeout = "5s" # # ## HTTP method, one of: "POST" or "PUT" # # method = "POST" # # ## HTTP Basic Auth credentials # # username = "username" # # password = "pa$$word" # # ## OAuth2 Client Credentials Grant # # client_id = "clientid" # # client_secret = "secret" # # token_url = "https://indentityprovider/oauth2/v1/token" # # scopes = ["urn:opc:idm:__myscopes__"] # # ## Optional TLS Config # # tls_ca = "/etc/telegraf/ca.pem" # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # ## Use TLS but skip chain & host verification # # insecure_skip_verify = false # # ## Data format to output. # ## Each data format has it's own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md # # data_format = "influx" # # ## HTTP Content-Encoding for write request body, can be set to "gzip" to # ## compress body or "identity" to apply no encoding. # # content_encoding = "identity" # # ## Additional HTTP headers # # [outputs.http.headers] # # # Should be set manually to "application/json" for json data_format # # Content-Type = "text/plain; charset=utf-8" # # ## Idle (keep-alive) connection timeout. # ## Maximum amount of time before idle connection is closed. # ## Zero means no limit. # # idle_conn_timeout = 0 # # Configuration for sending metrics to InfluxDB [[outputs.influxdb_v2]] ## The URLs of the InfluxDB cluster nodes. ## ## Multiple URLs can be specified for a single cluster, only ONE of the ## urls will be written to each interval. ## ex: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"] urls = ["{{influx_url}}"] ## Token for authentication. token = "{{influx_token}}" ## Organization is the name of the organization you wish to write to; must exist. organization = "{{influx_org}}" ## Destination bucket to write into. bucket = "{{influx_bucket}}" ## The value of this tag will be used to determine the bucket. If this ## tag is not set the 'bucket' option is used as the default. # bucket_tag = "" ## If true, the bucket tag will not be added to the metric. # exclude_bucket_tag = false ## Timeout for HTTP messages. # timeout = "5s" ## Additional HTTP headers # http_headers = {"X-Special-Header" = "Special-Value"} ## HTTP Proxy override, if unset values the standard proxy environment ## variables are consulted to determine which proxy, if any, should be used. # http_proxy = "http://corporate.proxy:3128" ## HTTP User-Agent # user_agent = "telegraf" ## Content-Encoding for write request body, can be set to "gzip" to ## compress body or "identity" to apply no encoding. # content_encoding = "gzip" ## Enable or disable uint support for writing uints influxdb 2.0. # influx_uint_support = false ## Optional TLS Config for use on HTTP connections. # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification # insecure_skip_verify = false # # Configuration for the Kafka server to send metrics to # [[outputs.kafka]] # ## URLs of kafka brokers # brokers = ["localhost:9092"] # ## Kafka topic for producer messages # topic = "telegraf" # # ## The value of this tag will be used as the topic. If not set the 'topic' # ## option is used. # # topic_tag = "" # # ## If true, the 'topic_tag' will be removed from to the metric. # # exclude_topic_tag = false # # ## Optional Client id # # client_id = "Telegraf" # # ## Set the minimal supported Kafka version. Setting this enables the use of new # ## Kafka features and APIs. Of particular interest, lz4 compression # ## requires at least version 0.10.0.0. # ## ex: version = "1.1.0" # # version = "" # # ## Optional topic suffix configuration. # ## If the section is omitted, no suffix is used. # ## Following topic suffix methods are supported: # ## measurement - suffix equals to separator + measurement's name # ## tags - suffix equals to separator + specified tags' values # ## interleaved with separator # # ## Suffix equals to "_" + measurement name # # [outputs.kafka.topic_suffix] # # method = "measurement" # # separator = "_" # # ## Suffix equals to "__" + measurement's "foo" tag value. # ## If there's no such a tag, suffix equals to an empty string # # [outputs.kafka.topic_suffix] # # method = "tags" # # keys = ["foo"] # # separator = "__" # # ## Suffix equals to "_" + measurement's "foo" and "bar" # ## tag values, separated by "_". If there is no such tags, # ## their values treated as empty strings. # # [outputs.kafka.topic_suffix] # # method = "tags" # # keys = ["foo", "bar"] # # separator = "_" # # ## The routing tag specifies a tagkey on the metric whose value is used as # ## the message key. The message key is used to determine which partition to # ## send the message to. This tag is prefered over the routing_key option. # routing_tag = "host" # # ## The routing key is set as the message key and used to determine which # ## partition to send the message to. This value is only used when no # ## routing_tag is set or as a fallback when the tag specified in routing tag # ## is not found. # ## # ## If set to "random", a random value will be generated for each message. # ## # ## When unset, no message key is added and each message is routed to a random # ## partition. # ## # ## ex: routing_key = "random" # ## routing_key = "telegraf" # # routing_key = "" # # ## Compression codec represents the various compression codecs recognized by # ## Kafka in messages. # ## 0 : None # ## 1 : Gzip # ## 2 : Snappy # ## 3 : LZ4 # ## 4 : ZSTD # # compression_codec = 0 # # ## Idempotent Writes # ## If enabled, exactly one copy of each message is written. # # idempotent_writes = false # # ## RequiredAcks is used in Produce Requests to tell the broker how many # ## replica acknowledgements it must see before responding # ## 0 : the producer never waits for an acknowledgement from the broker. # ## This option provides the lowest latency but the weakest durability # ## guarantees (some data will be lost when a server fails). # ## 1 : the producer gets an acknowledgement after the leader replica has # ## received the data. This option provides better durability as the # ## client waits until the server acknowledges the request as successful # ## (only messages that were written to the now-dead leader but not yet # ## replicated will be lost). # ## -1: the producer gets an acknowledgement after all in-sync replicas have # ## received the data. This option provides the best durability, we # ## guarantee that no messages will be lost as long as at least one in # ## sync replica remains. # # required_acks = -1 # # ## The maximum number of times to retry sending a metric before failing # ## until the next flush. # # max_retry = 3 # # ## The maximum permitted size of a message. Should be set equal to or # ## smaller than the broker's 'message.max.bytes'. # # max_message_bytes = 1000000 # # ## Optional TLS Config # # tls_ca = "/etc/telegraf/ca.pem" # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # ## Use TLS but skip chain & host verification # # insecure_skip_verify = false # # ## Optional SASL Config # # sasl_username = "kafka" # # sasl_password = "secret" # # ## Optional SASL: # ## one of: OAUTHBEARER, PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI # ## (defaults to PLAIN) # # sasl_mechanism = "" # # ## used if sasl_mechanism is GSSAPI (experimental) # # sasl_gssapi_service_name = "" # # ## One of: KRB5_USER_AUTH and KRB5_KEYTAB_AUTH # # sasl_gssapi_auth_type = "KRB5_USER_AUTH" # # sasl_gssapi_kerberos_config_path = "/" # # sasl_gssapi_realm = "realm" # # sasl_gssapi_key_tab_path = "" # # sasl_gssapi_disable_pafxfast = false # # ## used if sasl_mechanism is OAUTHBEARER (experimental) # # sasl_access_token = "" # # ## SASL protocol version. When connecting to Azure EventHub set to 0. # # sasl_version = 1 # # ## Data format to output. # ## Each data format has its own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md # # data_format = "influx" # # Configuration for the Prometheus client to spawn # [[outputs.prometheus_client]] # ## Address to listen on # listen = ":9273" # # ## Metric version controls the mapping from Telegraf metrics into # ## Prometheus format. When using the prometheus input, use the same value in # ## both plugins to ensure metrics are round-tripped without modification. # ## # ## example: metric_version = 1; # ## metric_version = 2; recommended version # # metric_version = 1 # # ## Use HTTP Basic Authentication. # # basic_username = "Foo" # # basic_password = "Bar" # # ## If set, the IP Ranges which are allowed to access metrics. # ## ex: ip_range = ["192.168.0.0/24", "192.168.1.0/30"] # # ip_range = [] # # ## Path to publish the metrics on. # # path = "/metrics" # # ## Expiration interval for each metric. 0 == no expiration # # expiration_interval = "60s" # # ## Collectors to enable, valid entries are "gocollector" and "process". # ## If unset, both are enabled. # # collectors_exclude = ["gocollector", "process"] # # ## Send string metrics as Prometheus labels. # ## Unless set to false all string metrics will be sent as labels. # # string_as_label = true # # ## If set, enable TLS with the given certificate. # # tls_cert = "/etc/ssl/telegraf.crt" # # tls_key = "/etc/ssl/telegraf.key" # # ## Set one or more allowed client CA certificate file names to # ## enable mutually authenticated TLS connections # # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] # # ## Export metric collection time. # # export_timestamp = false # # Configuration for the Riemann server to send metrics to # [[outputs.riemann]] # ## The full TCP or UDP URL of the Riemann server # url = "tcp://localhost:5555" # # ## Riemann event TTL, floating-point time in seconds. # ## Defines how long that an event is considered valid for in Riemann # # ttl = 30.0 # # ## Separator to use between measurement and field name in Riemann service name # ## This does not have any effect if 'measurement_as_attribute' is set to 'true' # separator = "/" # # ## Set measurement name as Riemann attribute 'measurement', instead of prepending it to the Riemann service name # # measurement_as_attribute = false # # ## Send string metrics as Riemann event states. # ## Unless enabled all string metrics will be ignored # # string_as_state = false # # ## A list of tag keys whose values get sent as Riemann tags. # ## If empty, all Telegraf tag values will be sent as tags # # tag_keys = ["telegraf","custom_tag"] # # ## Additional Riemann tags to send. # # tags = ["telegraf-output"] # # ## Description for Riemann event # # description_text = "metrics collected from telegraf" # # ## Riemann client write timeout, defaults to "5s" if not set. # # timeout = "5s" # # Configuration for the Riemann server to send metrics to # [[outputs.riemann_legacy]] # ## URL of server # url = "localhost:5555" # ## transport protocol to use either tcp or udp # transport = "tcp" # ## separator to use between input name and field name in Riemann service name # separator = " " # # Generic socket writer capable of handling multiple socket types. # [[outputs.socket_writer]] # ## URL to connect to # # address = "tcp://127.0.0.1:8094" # # address = "tcp://example.com:http" # # address = "tcp4://127.0.0.1:8094" # # address = "tcp6://127.0.0.1:8094" # # address = "tcp6://[2001:db8::1]:8094" # # address = "udp://127.0.0.1:8094" # # address = "udp4://127.0.0.1:8094" # # address = "udp6://127.0.0.1:8094" # # address = "unix:///tmp/telegraf.sock" # # address = "unixgram:///tmp/telegraf.sock" # # ## Optional TLS Config # # tls_ca = "/etc/telegraf/ca.pem" # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # ## Use TLS but skip chain & host verification # # insecure_skip_verify = false # # ## Period between keep alive probes. # ## Only applies to TCP sockets. # ## 0 disables keep alive probes. # ## Defaults to the OS configuration. # # keep_alive_period = "5m" # # ## Content encoding for packet-based connections (i.e. UDP, unixgram). # ## Can be set to "gzip" or to "identity" to apply no encoding. # ## # # content_encoding = "identity" # # ## Data format to generate. # ## Each data format has its own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md # # data_format = "influx" # # Configuration for Syslog server to send metrics to # [[outputs.syslog]] # ## URL to connect to # ## ex: address = "tcp://127.0.0.1:8094" # ## ex: address = "tcp4://127.0.0.1:8094" # ## ex: address = "tcp6://127.0.0.1:8094" # ## ex: address = "tcp6://[2001:db8::1]:8094" # ## ex: address = "udp://127.0.0.1:8094" # ## ex: address = "udp4://127.0.0.1:8094" # ## ex: address = "udp6://127.0.0.1:8094" # address = "tcp://127.0.0.1:8094" # # ## Optional TLS Config # # tls_ca = "/etc/telegraf/ca.pem" # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # ## Use TLS but skip chain & host verification # # insecure_skip_verify = false # # ## Period between keep alive probes. # ## Only applies to TCP sockets. # ## 0 disables keep alive probes. # ## Defaults to the OS configuration. # # keep_alive_period = "5m" # # ## The framing technique with which it is expected that messages are # ## transported (default = "octet-counting"). Whether the messages come # ## using the octect-counting (RFC5425#section-4.3.1, RFC6587#section-3.4.1), # ## or the non-transparent framing technique (RFC6587#section-3.4.2). Must # ## be one of "octet-counting", "non-transparent". # # framing = "octet-counting" # # ## The trailer to be expected in case of non-transparent framing (default = "LF"). # ## Must be one of "LF", or "NUL". # # trailer = "LF" # # ## SD-PARAMs settings # ## Syslog messages can contain key/value pairs within zero or more # ## structured data sections. For each unrecognized metric tag/field a # ## SD-PARAMS is created. # ## # ## Example: # ## [[outputs.syslog]] # ## sdparam_separator = "_" # ## default_sdid = "default@32473" # ## sdids = ["foo@123", "bar@456"] # ## # ## input => xyzzy,x=y foo@123_value=42,bar@456_value2=84,something_else=1 # ## output (structured data only) => [foo@123 value=42][bar@456 value2=84][default@32473 something_else=1 x=y] # # ## SD-PARAMs separator between the sdid and tag/field key (default = "_") # # sdparam_separator = "_" # # ## Default sdid used for tags/fields that don't contain a prefix defined in # ## the explicit sdids setting below If no default is specified, no SD-PARAMs # ## will be used for unrecognized field. # # default_sdid = "default@32473" # # ## List of explicit prefixes to extract from tag/field keys and use as the # ## SDID, if they match (see above example for more details): # # sdids = ["foo@123", "bar@456"] # # ## Default severity value. Severity and Facility are used to calculate the # ## message PRI value (RFC5424#section-6.2.1). Used when no metric field # ## with key "severity_code" is defined. If unset, 5 (notice) is the default # # default_severity_code = 5 # # ## Default facility value. Facility and Severity are used to calculate the # ## message PRI value (RFC5424#section-6.2.1). Used when no metric field with # ## key "facility_code" is defined. If unset, 1 (user-level) is the default # # default_facility_code = 1 # # ## Default APP-NAME value (RFC5424#section-6.2.5) # ## Used when no metric tag with key "appname" is defined. # ## If unset, "Telegraf" is the default # # default_appname = "Telegraf" ############################################################################### # PROCESSOR PLUGINS # ############################################################################### # # Attach AWS EC2 metadata to metrics # [[processors.aws_ec2]] # ## Instance identity document tags to attach to metrics. # ## For more information see: # ## https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html # ## # ## Available tags: # ## * accountId # ## * architecture # ## * availabilityZone # ## * billingProducts # ## * imageId # ## * instanceId # ## * instanceType # ## * kernelId # ## * pendingTime # ## * privateIp # ## * ramdiskId # ## * region # ## * version # imds_tags = [] # # ## EC2 instance tags retrieved with DescribeTags action. # ## In case tag is empty upon retrieval it's omitted when tagging metrics. # ## Note that in order for this to work, role attached to EC2 instance or AWS # ## credentials available from the environment must have a policy attached, that # ## allows ec2:DescribeTags. # ## # ## For more information see: # ## https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTags.html # ec2_tags = [] # # ## Timeout for http requests made by against aws ec2 metadata endpoint. # timeout = "10s" # # ## ordered controls whether or not the metrics need to stay in the same order # ## this plugin received them in. If false, this plugin will change the order # ## with requests hitting cached results moving through immediately and not # ## waiting on slower lookups. This may cause issues for you if you are # ## depending on the order of metrics staying the same. If so, set this to true. # ## Keeping the metrics ordered may be slightly slower. # ordered = false # # ## max_parallel_calls is the maximum number of AWS API calls to be in flight # ## at the same time. # ## It's probably best to keep this number fairly low. # max_parallel_calls = 10 # # Clone metrics and apply modifications. # [[processors.clone]] # ## All modifications on inputs and aggregators can be overridden: # # name_override = "new_name" # # name_prefix = "new_name_prefix" # # name_suffix = "new_name_suffix" # # ## Tags to be added (all values must be strings) # # [processors.clone.tags] # # additional_tag = "tag_value" # # Convert values to another metric value type # [[processors.converter]] # ## Tags to convert # ## # ## The table key determines the target type, and the array of key-values # ## select the keys to convert. The array may contain globs. # ## = [...] # [processors.converter.tags] # measurement = [] # string = [] # integer = [] # unsigned = [] # boolean = [] # float = [] # # ## Fields to convert # ## # ## The table key determines the target type, and the array of key-values # ## select the keys to convert. The array may contain globs. # ## = [...] # [processors.converter.fields] # measurement = [] # tag = [] # string = [] # integer = [] # unsigned = [] # boolean = [] # float = [] # # Dates measurements, tags, and fields that pass through this filter. # [[processors.date]] # ## New tag to create # tag_key = "month" # # ## New field to create (cannot set both field_key and tag_key) # # field_key = "month" # # ## Date format string, must be a representation of the Go "reference time" # ## which is "Mon Jan 2 15:04:05 -0700 MST 2006". # date_format = "Jan" # # ## If destination is a field, date format can also be one of # ## "unix", "unix_ms", "unix_us", or "unix_ns", which will insert an integer field. # # date_format = "unix" # # ## Offset duration added to the date string when writing the new tag. # # date_offset = "0s" # # ## Timezone to use when creating the tag or field using a reference time # ## string. This can be set to one of "UTC", "Local", or to a location name # ## in the IANA Time Zone database. # ## example: timezone = "America/Los_Angeles" # # timezone = "UTC" # # Filter metrics with repeating field values # [[processors.dedup]] # ## Maximum time to suppress output # dedup_interval = "600s" # # Defaults sets default value(s) for specified fields that are not set on incoming metrics. # [[processors.defaults]] # ## Ensures a set of fields always exists on your metric(s) with their # ## respective default value. # ## For any given field pair (key = default), if it's not set, a field # ## is set on the metric with the specified default. # ## # ## A field is considered not set if it is nil on the incoming metric; # ## or it is not nil but its value is an empty string or is a string # ## of one or more spaces. # ## = # # [processors.defaults.fields] # # field_1 = "bar" # # time_idle = 0 # # is_error = true # # Map enum values according to given table. # [[processors.enum]] # [[processors.enum.mapping]] # ## Name of the field to map. Globs accepted. # field = "status" # # ## Name of the tag to map. Globs accepted. # # tag = "status" # # ## Destination tag or field to be used for the mapped value. By default the # ## source tag or field is used, overwriting the original value. # dest = "status_code" # # ## Default value to be used for all values not contained in the mapping # ## table. When unset, the unmodified value for the field will be used if no # ## match is found. # # default = 0 # # ## Table of mappings # [processors.enum.mapping.value_mappings] # green = 1 # amber = 2 # red = 3 # # Run executable as long-running processor plugin # [[processors.execd]] # ## Program to run as daemon # ## eg: command = ["/path/to/your_program", "arg1", "arg2"] # command = ["cat"] # # ## Delay before the process is restarted after an unexpected termination # restart_delay = "10s" # # Performs file path manipulations on tags and fields # [[processors.filepath]] # ## Treat the tag value as a path and convert it to its last element, storing the result in a new tag # # [[processors.filepath.basename]] # # tag = "path" # # dest = "basepath" # # ## Treat the field value as a path and keep all but the last element of path, typically the path's directory # # [[processors.filepath.dirname]] # # field = "path" # # ## Treat the tag value as a path, converting it to its the last element without its suffix # # [[processors.filepath.stem]] # # tag = "path" # # ## Treat the tag value as a path, converting it to the shortest path name equivalent # ## to path by purely lexical processing # # [[processors.filepath.clean]] # # tag = "path" # # ## Treat the tag value as a path, converting it to a relative path that is lexically # ## equivalent to the source path when joined to 'base_path' # # [[processors.filepath.rel]] # # tag = "path" # # base_path = "/var/log" # # ## Treat the tag value as a path, replacing each separator character in path with a '/' character. Has only # ## effect on Windows # # [[processors.filepath.toslash]] # # tag = "path" # # Add a tag of the network interface name looked up over SNMP by interface number # [[processors.ifname]] # ## Name of tag holding the interface number # # tag = "ifIndex" # # ## Name of output tag where service name will be added # # dest = "ifName" # # ## Name of tag of the SNMP agent to request the interface name from # # agent = "agent" # # ## Timeout for each request. # # timeout = "5s" # # ## SNMP version; can be 1, 2, or 3. # # version = 2 # # ## SNMP community string. # # community = "public" # # ## Number of retries to attempt. # # retries = 3 # # ## The GETBULK max-repetitions parameter. # # max_repetitions = 10 # # ## SNMPv3 authentication and encryption options. # ## # ## Security Name. # # sec_name = "myuser" # ## Authentication protocol; one of "MD5", "SHA", or "". # # auth_protocol = "MD5" # ## Authentication password. # # auth_password = "pass" # ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv". # # sec_level = "authNoPriv" # ## Context Name. # # context_name = "" # ## Privacy protocol used for encrypted messages; one of "DES", "AES" or "". # # priv_protocol = "" # ## Privacy password used for encrypted messages. # # priv_password = "" # # ## max_parallel_lookups is the maximum number of SNMP requests to # ## make at the same time. # # max_parallel_lookups = 100 # # ## ordered controls whether or not the metrics need to stay in the # ## same order this plugin received them in. If false, this plugin # ## may change the order when data is cached. If you need metrics to # ## stay in order set this to true. keeping the metrics ordered may # ## be slightly slower # # ordered = false # # ## cache_ttl is the amount of time interface names are cached for a # ## given agent. After this period elapses if names are needed they # ## will be retrieved again. # # cache_ttl = "8h" # # Apply metric modifications using override semantics. # [[processors.override]] # ## All modifications on inputs and aggregators can be overridden: # # name_override = "new_name" # # name_prefix = "new_name_prefix" # # name_suffix = "new_name_suffix" # # ## Tags to be added (all values must be strings) # # [processors.override.tags] # # additional_tag = "tag_value" # # Parse a value in a specified field/tag(s) and add the result in a new metric # [[processors.parser]] # ## The name of the fields whose value will be parsed. # parse_fields = [] # # ## If true, incoming metrics are not emitted. # drop_original = false # # ## If set to override, emitted metrics will be merged by overriding the # ## original metric using the newly parsed metrics. # merge = "override" # # ## The dataformat to be read from files # ## Each data format has its own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md # data_format = "influx" # # Rotate a single valued metric into a multi field metric # [[processors.pivot]] # ## Tag to use for naming the new field. # tag_key = "name" # ## Field to use as the value of the new field. # value_key = "value" # # Given a tag/field of a TCP or UDP port number, add a tag/field of the service name looked up in the system services file # [[processors.port_name]] # [[processors.port_name]] # ## Name of tag holding the port number # # tag = "port" # ## Or name of the field holding the port number # # field = "port" # # ## Name of output tag or field (depending on the source) where service name will be added # # dest = "service" # # ## Default tcp or udp # # default_protocol = "tcp" # # ## Tag containing the protocol (tcp or udp, case-insensitive) # # protocol_tag = "proto" # # ## Field containing the protocol (tcp or udp, case-insensitive) # # protocol_field = "proto" # # Print all metrics that pass through this filter. # [[processors.printer]] # # Transforms tag and field values with regex pattern # [[processors.regex]] # ## Tag and field conversions defined in a separate sub-tables # # [[processors.regex.tags]] # # ## Tag to change # # key = "resp_code" # # ## Regular expression to match on a tag value # # pattern = "^(\\d)\\d\\d$" # # ## Matches of the pattern will be replaced with this string. Use ${1} # # ## notation to use the text of the first submatch. # # replacement = "${1}xx" # # # [[processors.regex.fields]] # # ## Field to change # # key = "request" # # ## All the power of the Go regular expressions available here # # ## For example, named subgroups # # pattern = "^/api(?P/[\\w/]+)\\S*" # # replacement = "${method}" # # ## If result_key is present, a new field will be created # # ## instead of changing existing field # # result_key = "method" # # ## Multiple conversions may be applied for one field sequentially # ## Let's extract one more value # # [[processors.regex.fields]] # # key = "request" # # pattern = ".*category=(\\w+).*" # # replacement = "${1}" # # result_key = "search_category" # # Rename measurements, tags, and fields that pass through this filter. # [[processors.rename]] # # ReverseDNS does a reverse lookup on IP addresses to retrieve the DNS name # [[processors.reverse_dns]] # ## For optimal performance, you may want to limit which metrics are passed to this # ## processor. eg: # ## namepass = ["my_metric_*"] # # ## cache_ttl is how long the dns entries should stay cached for. # ## generally longer is better, but if you expect a large number of diverse lookups # ## you'll want to consider memory use. # cache_ttl = "24h" # # ## lookup_timeout is how long should you wait for a single dns request to repsond. # ## this is also the maximum acceptable latency for a metric travelling through # ## the reverse_dns processor. After lookup_timeout is exceeded, a metric will # ## be passed on unaltered. # ## multiple simultaneous resolution requests for the same IP will only make a # ## single rDNS request, and they will all wait for the answer for this long. # lookup_timeout = "3s" # # ## max_parallel_lookups is the maximum number of dns requests to be in flight # ## at the same time. Requesting hitting cached values do not count against this # ## total, and neither do mulptiple requests for the same IP. # ## It's probably best to keep this number fairly low. # max_parallel_lookups = 10 # # ## ordered controls whether or not the metrics need to stay in the same order # ## this plugin received them in. If false, this plugin will change the order # ## with requests hitting cached results moving through immediately and not # ## waiting on slower lookups. This may cause issues for you if you are # ## depending on the order of metrics staying the same. If so, set this to true. # ## keeping the metrics ordered may be slightly slower. # ordered = false # # [[processors.reverse_dns.lookup]] # ## get the ip from the field "source_ip", and put the result in the field "source_name" # field = "source_ip" # dest = "source_name" # # [[processors.reverse_dns.lookup]] # ## get the ip from the tag "destination_ip", and put the result in the tag # ## "destination_name". # tag = "destination_ip" # dest = "destination_name" # # ## If you would prefer destination_name to be a field instead, you can use a # ## processors.converter after this one, specifying the order attribute. # # Add the S2 Cell ID as a tag based on latitude and longitude fields # [[processors.s2geo]] # ## The name of the lat and lon fields containing WGS-84 latitude and # ## longitude in decimal degrees. # # lat_field = "lat" # # lon_field = "lon" # # ## New tag to create # # tag_key = "s2_cell_id" # # ## Cell level (see https://s2geometry.io/resources/s2cell_statistics.html) # # cell_level = 9 # # Process metrics using a Starlark script # [[processors.starlark]] # ## The Starlark source can be set as a string in this configuration file, or # ## by referencing a file containing the script. Only one source or script # ## should be set at once. # ## # ## Source of the Starlark script. # source = ''' # def apply(metric): # return metric # ''' # # ## File containing a Starlark script. # # script = "/usr/local/bin/myscript.star" # # ## The constants of the Starlark script. # # [processors.starlark.constants] # # max_size = 10 # # threshold = 0.75 # # default_name = "Julia" # # debug_mode = true # # Perform string processing on tags, fields, and measurements # [[processors.strings]] # ## Convert a tag value to uppercase # # [[processors.strings.uppercase]] # # tag = "method" # # ## Convert a field value to lowercase and store in a new field # # [[processors.strings.lowercase]] # # field = "uri_stem" # # dest = "uri_stem_normalised" # # ## Convert a field value to titlecase # # [[processors.strings.titlecase]] # # field = "status" # # ## Trim leading and trailing whitespace using the default cutset # # [[processors.strings.trim]] # # field = "message" # # ## Trim leading characters in cutset # # [[processors.strings.trim_left]] # # field = "message" # # cutset = "\t" # # ## Trim trailing characters in cutset # # [[processors.strings.trim_right]] # # field = "message" # # cutset = "\r\n" # # ## Trim the given prefix from the field # # [[processors.strings.trim_prefix]] # # field = "my_value" # # prefix = "my_" # # ## Trim the given suffix from the field # # [[processors.strings.trim_suffix]] # # field = "read_count" # # suffix = "_count" # # ## Replace all non-overlapping instances of old with new # # [[processors.strings.replace]] # # measurement = "*" # # old = ":" # # new = "_" # # ## Trims strings based on width # # [[processors.strings.left]] # # field = "message" # # width = 10 # # ## Decode a base64 encoded utf-8 string # # [[processors.strings.base64decode]] # # field = "message" # # Restricts the number of tags that can pass through this filter and chooses which tags to preserve when over the limit. # [[processors.tag_limit]] # ## Maximum number of tags to preserve # limit = 10 # # ## List of tags to preferentially preserve # keep = ["foo", "bar", "baz"] # # Uses a Go template to create a new tag # [[processors.template]] # ## Tag to set with the output of the template. # tag = "topic" # # ## Go template used to create the tag value. In order to ease TOML # ## escaping requirements, you may wish to use single quotes around the # ## template string. # template = '{ { .Tag "hostname" }}.{ { .Tag "level" }}' # # Print all metrics that pass through this filter. # [[processors.topk]] # ## How many seconds between aggregations # # period = 10 # # ## How many top metrics to return # # k = 10 # # ## Over which tags should the aggregation be done. Globs can be specified, in # ## which case any tag matching the glob will aggregated over. If set to an # ## empty list is no aggregation over tags is done # # group_by = ['*'] # # ## Over which fields are the top k are calculated # # fields = ["value"] # # ## What aggregation to use. Options: sum, mean, min, max # # aggregation = "mean" # # ## Instead of the top k largest metrics, return the bottom k lowest metrics # # bottomk = false # # ## The plugin assigns each metric a GroupBy tag generated from its name and # ## tags. If this setting is different than "" the plugin will add a # ## tag (which name will be the value of this setting) to each metric with # ## the value of the calculated GroupBy tag. Useful for debugging # # add_groupby_tag = "" # # ## These settings provide a way to know the position of each metric in # ## the top k. The 'add_rank_field' setting allows to specify for which # ## fields the position is required. If the list is non empty, then a field # ## will be added to each and every metric for each string present in this # ## setting. This field will contain the ranking of the group that # ## the metric belonged to when aggregated over that field. # ## The name of the field will be set to the name of the aggregation field, # ## suffixed with the string '_topk_rank' # # add_rank_fields = [] # # ## These settings provide a way to know what values the plugin is generating # ## when aggregating metrics. The 'add_aggregate_field' setting allows to # ## specify for which fields the final aggregation value is required. If the # ## list is non empty, then a field will be added to each every metric for # ## each field present in this setting. This field will contain # ## the computed aggregation for the group that the metric belonged to when # ## aggregated over that field. # ## The name of the field will be set to the name of the aggregation field, # ## suffixed with the string '_topk_aggregate' # # add_aggregate_fields = [] # # Rotate multi field metric into several single field metrics # [[processors.unpivot]] # ## Tag to use for the name. # tag_key = "name" # ## Field to use for the name of the value. # value_key = "value" ############################################################################### # AGGREGATOR PLUGINS # ############################################################################### # # Keep the aggregate basicstats of each metric passing through. # [[aggregators.basicstats]] # ## The period on which to flush & clear the aggregator. # period = "30s" # # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = false # # ## Configures which basic stats to push as fields # # stats = ["count", "min", "max", "mean", "stdev", "s2", "sum"] # # Calculates a derivative for every field. # [[aggregators.derivative]] # ## The period in which to flush the aggregator. # period = "30s" # ## # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = false # ## # ## This aggregator will estimate a derivative for each field, which is # ## contained in both the first and last metric of the aggregation interval. # ## Without further configuration the derivative will be calculated with # ## respect to the time difference between these two measurements in seconds. # ## The formula applied is for every field: # ## # ## value_last - value_first # ## derivative = -------------------------- # ## time_difference_in_seconds # ## # ## The resulting derivative will be named *fieldname_rate*. The suffix # ## "_rate" can be configured by the *suffix* parameter. When using a # ## derivation variable you can include its name for more clarity. # # suffix = "_rate" # ## # ## As an abstraction the derivative can be calculated not only by the time # ## difference but by the difference of a field, which is contained in the # ## measurement. This field is assumed to be monotonously increasing. This # ## feature is used by specifying a *variable*. # ## Make sure the specified variable is not filtered and exists in the metrics # ## passed to this aggregator! # # variable = "" # ## # ## When using a field as the derivation parameter the name of that field will # ## be used for the resulting derivative, e.g. *fieldname_by_parameter*. # ## # ## Note, that the calculation is based on the actual timestamp of the # ## measurements. When there is only one measurement during that period, the # ## measurement will be rolled over to the next period. The maximum number of # ## such roll-overs can be configured with a default of 10. # # max_roll_over = 10 # ## # # Report the final metric of a series # [[aggregators.final]] # ## The period on which to flush & clear the aggregator. # period = "30s" # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = false # # ## The time that a series is not updated until considering it final. # series_timeout = "5m" # # Create aggregate histograms. # [[aggregators.histogram]] # ## The period in which to flush the aggregator. # period = "30s" # # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = false # # ## If true, the histogram will be reset on flush instead # ## of accumulating the results. # reset = false # # ## Whether bucket values should be accumulated. If set to false, "gt" tag will be added. # ## Defaults to true. # cumulative = true # # ## Example config that aggregates all fields of the metric. # # [[aggregators.histogram.config]] # # ## Right borders of buckets (with +Inf implicitly added). # # buckets = [0.0, 15.6, 34.5, 49.1, 71.5, 80.5, 94.5, 100.0] # # ## The name of metric. # # measurement_name = "cpu" # # ## Example config that aggregates only specific fields of the metric. # # [[aggregators.histogram.config]] # # ## Right borders of buckets (with +Inf implicitly added). # # buckets = [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0] # # ## The name of metric. # # measurement_name = "diskio" # # ## The concrete fields of metric # # fields = ["io_time", "read_time", "write_time"] # # Merge metrics into multifield metrics by series key # [[aggregators.merge]] # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = true # # Keep the aggregate min/max of each metric passing through. # [[aggregators.minmax]] # ## General Aggregator Arguments: # ## The period on which to flush & clear the aggregator. # period = "30s" # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = false # # Keep the aggregate quantiles of each metric passing through. # [[aggregators.quantile]] # ## General Aggregator Arguments: # ## The period on which to flush & clear the aggregator. # period = "30s" # # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = false # # ## Quantiles to output in the range [0,1] # # quantiles = [0.25, 0.5, 0.75] # # ## Type of aggregation algorithm # ## Supported are: # ## "t-digest" -- approximation using centroids, can cope with large number of samples # ## "exact R7" -- exact computation also used by Excel or NumPy (Hyndman & Fan 1996 R7) # ## "exact R8" -- exact computation (Hyndman & Fan 1996 R8) # ## NOTE: Do not use "exact" algorithms with large number of samples # ## to not impair performance or memory consumption! # # algorithm = "t-digest" # # ## Compression for approximation (t-digest). The value needs to be # ## greater or equal to 1.0. Smaller values will result in more # ## performance but less accuracy. # # compression = 100.0 # # Count the occurrence of values in fields. # [[aggregators.valuecounter]] # ## General Aggregator Arguments: # ## The period on which to flush & clear the aggregator. # period = "30s" # ## If true, the original metric will be dropped by the # ## aggregator and will not get sent to the output plugins. # drop_original = false # ## The fields for which the values will be counted # fields = [] ############################################################################### # INPUT PLUGINS # ############################################################################### # Read metrics from one or more commands that can output to stdout # [[inputs.exec]] # ## Commands array # commands = [ # "/tmp/test.sh", # "/usr/bin/mycollector --foo=bar", # "/tmp/collect_*.sh" # ] # # ## Timeout for each command to complete. # timeout = "5s" # # ## measurement name suffix (for separating different commands) # name_suffix = "_mycollector" # # ## Data format to consume. # ## Each data format has its own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md # data_format = "influx" # # Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints # [[inputs.influxdb]] # ## Works with InfluxDB debug endpoints out of the box, # ## but other services can use this format too. # ## See the influxdb plugin's README for more details. # # ## Multiple URLs from which to read InfluxDB-formatted JSON # ## Default is "http://localhost:8086/debug/vars". # urls = [ # "http://localhost:8086/debug/vars" # ] # # ## Username and password to send using HTTP Basic Authentication. # # username = "" # # password = "" # # ## Optional TLS Config # # tls_ca = "/etc/telegraf/ca.pem" # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # ## Use TLS but skip chain & host verification # # insecure_skip_verify = false # # ## http request & header timeout # timeout = "5s" # # Collect statistics about itself # [[inputs.internal]] # ## If true, collect telegraf memory stats. # # collect_memstats = true # # Retrieve data from MODBUS slave devices # [[inputs.modbus]] # ## Connection Configuration # ## # ## The plugin supports connections to PLCs via MODBUS/TCP or # ## via serial line communication in binary (RTU) or readable (ASCII) encoding # ## # ## Device name # name = "Device" # # ## Slave ID - addresses a MODBUS device on the bus # ## Range: 0 - 255 [0 = broadcast; 248 - 255 = reserved] # slave_id = 1 # # ## Timeout for each request # timeout = "1s" # # ## Maximum number of retries and the time to wait between retries # ## when a slave-device is busy. # # busy_retries = 0 # # busy_retries_wait = "100ms" # # # TCP - connect via Modbus/TCP # controller = "tcp://localhost:502" # # ## Serial (RS485; RS232) # # controller = "file:///dev/ttyUSB0" # # baud_rate = 9600 # # data_bits = 8 # # parity = "N" # # stop_bits = 1 # # transmission_mode = "RTU" # # # ## Measurements # ## # # ## Digital Variables, Discrete Inputs and Coils # ## measurement - the (optional) measurement name, defaults to "modbus" # ## name - the variable name # ## address - variable address # # discrete_inputs = [ # { name = "start", address = [0]}, # { name = "stop", address = [1]}, # { name = "reset", address = [2]}, # { name = "emergency_stop", address = [3]}, # ] # coils = [ # { name = "motor1_run", address = [0]}, # { name = "motor1_jog", address = [1]}, # { name = "motor1_stop", address = [2]}, # ] # # ## Analog Variables, Input Registers and Holding Registers # ## measurement - the (optional) measurement name, defaults to "modbus" # ## name - the variable name # ## byte_order - the ordering of bytes # ## |---AB, ABCD - Big Endian # ## |---BA, DCBA - Little Endian # ## |---BADC - Mid-Big Endian # ## |---CDAB - Mid-Little Endian # ## data_type - INT16, UINT16, INT32, UINT32, INT64, UINT64, # ## FLOAT32-IEEE, FLOAT64-IEEE (the IEEE 754 binary representation) # ## FLOAT32, FIXED, UFIXED (fixed-point representation on input) # ## scale - the final numeric variable representation # ## address - variable address # # holding_registers = [ # { name = "power_factor", byte_order = "AB", data_type = "FIXED", scale=0.01, address = [8]}, # { name = "voltage", byte_order = "AB", data_type = "FIXED", scale=0.1, address = [0]}, # { name = "energy", byte_order = "ABCD", data_type = "FIXED", scale=0.001, address = [5,6]}, # { name = "current", byte_order = "ABCD", data_type = "FIXED", scale=0.001, address = [1,2]}, # { name = "frequency", byte_order = "AB", data_type = "UFIXED", scale=0.1, address = [7]}, # { name = "power", byte_order = "ABCD", data_type = "UFIXED", scale=0.1, address = [3,4]}, # ] # input_registers = [ # { name = "tank_level", byte_order = "AB", data_type = "INT16", scale=1.0, address = [0]}, # { name = "tank_ph", byte_order = "AB", data_type = "INT16", scale=1.0, address = [1]}, # { name = "pump1_speed", byte_order = "ABCD", data_type = "INT32", scale=1.0, address = [3,4]}, # ] # # Read current weather and forecasts data from openweathermap.org # [[inputs.openweathermap]] # ## OpenWeatherMap API key. # app_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # # ## City ID's to collect weather data from. # city_id = ["5391959"] # # ## Language of the description field. Can be one of "ar", "bg", # ## "ca", "cz", "de", "el", "en", "fa", "fi", "fr", "gl", "hr", "hu", # ## "it", "ja", "kr", "la", "lt", "mk", "nl", "pl", "pt", "ro", "ru", # ## "se", "sk", "sl", "es", "tr", "ua", "vi", "zh_cn", "zh_tw" # # lang = "en" # # ## APIs to fetch; can contain "weather" or "forecast". # fetch = ["weather", "forecast"] # # ## OpenWeatherMap base URL # # base_url = "https://api.openweathermap.org/" # # ## Timeout for HTTP response. # # response_timeout = "5s" # # ## Preferred unit system for temperature and wind speed. Can be one of # ## "metric", "imperial", or "standard". # # units = "metric" # # ## Query interval; OpenWeatherMap updates their weather data every 10 # ## minutes. # interval = "10m" ############################################################################### # SERVICE INPUT PLUGINS # ############################################################################### # Generic socket listener capable of handling multiple socket types. [[inputs.socket_listener]] ## URL to listen on # service_address = "tcp://:8094" # service_address = "tcp://127.0.0.1:http" # service_address = "tcp4://:8094" # service_address = "tcp6://:8094" # service_address = "tcp6://[2001:db8::1]:8094" service_address = "udp://:8094" # service_address = "udp4://:8094" # service_address = "udp6://:8094" # service_address = "unix:///tmp/telegraf.sock" # service_address = "unixgram:///tmp/telegraf.sock" ## Change the file mode bits on unix sockets. These permissions may not be ## respected by some platforms, to safely restrict write permissions it is best ## to place the socket into a directory that has previously been created ## with the desired permissions. ## ex: socket_mode = "777" # socket_mode = "" ## Maximum number of concurrent connections. ## Only applies to stream sockets (e.g. TCP). ## 0 (default) is unlimited. # max_connections = 1024 ## Read timeout. ## Only applies to stream sockets (e.g. TCP). ## 0 (default) is unlimited. # read_timeout = "30s" ## Optional TLS configuration. ## Only applies to stream sockets (e.g. TCP). # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Enables client authentication if set. # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] ## Maximum socket buffer size (in bytes when no unit specified). ## For stream sockets, once the buffer fills up, the sender will start backing up. ## For datagram sockets, once the buffer fills up, metrics will start dropping. ## Defaults to the OS default. # read_buffer_size = "64KiB" ## Period between keep alive probes. ## Only applies to TCP sockets. ## 0 disables keep alive probes. ## Defaults to the OS configuration. # keep_alive_period = "5m" ## Data format to consume. ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md # data_format = "influx" ## Content encoding for message payloads, can be set to "gzip" to or ## "identity" to apply no encoding. # content_encoding = "identity" # # Accepts syslog messages following RFC5424 format with transports as per RFC5426, RFC5425, or RFC6587 # [[inputs.syslog]] # ## Specify an ip or hostname with port - eg., tcp://localhost:6514, tcp://10.0.0.1:6514 # ## Protocol, address and port to host the syslog receiver. # ## If no host is specified, then localhost is used. # ## If no port is specified, 6514 is used (RFC5425#section-4.1). # server = "tcp://:6514" # # ## TLS Config # # tls_allowed_cacerts = ["/etc/telegraf/ca.pem"] # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # # ## Period between keep alive probes. # ## 0 disables keep alive probes. # ## Defaults to the OS configuration. # ## Only applies to stream sockets (e.g. TCP). # # keep_alive_period = "5m" # # ## Maximum number of concurrent connections (default = 0). # ## 0 means unlimited. # ## Only applies to stream sockets (e.g. TCP). # # max_connections = 1024 # # ## Read timeout is the maximum time allowed for reading a single message (default = 5s). # ## 0 means unlimited. # # read_timeout = "5s" # # ## The framing technique with which it is expected that messages are transported (default = "octet-counting"). # ## Whether the messages come using the octect-counting (RFC5425#section-4.3.1, RFC6587#section-3.4.1), # ## or the non-transparent framing technique (RFC6587#section-3.4.2). # ## Must be one of "octet-counting", "non-transparent". # # framing = "octet-counting" # # ## The trailer to be expected in case of non-transparent framing (default = "LF"). # ## Must be one of "LF", or "NUL". # # trailer = "LF" # # ## Whether to parse in best effort mode or not (default = false). # ## By default best effort parsing is off. # # best_effort = false # # ## Character to prepend to SD-PARAMs (default = "_"). # ## A syslog message can contain multiple parameters and multiple identifiers within structured data section. # ## Eg., [id1 name1="val1" name2="val2"][id2 name1="val1" nameA="valA"] # ## For each combination a field is created. # ## Its name is created concatenating identifier, sdparam_separator, and parameter name. # # sdparam_separator = "_"