DrPsychick / docker-telegraf

Telegraf based on alpine, fully configurable through ENV
GNU General Public License v3.0
1 stars 1 forks source link
12-factor alpine docker telegraf

Docker image: drpsychick/telegraf

Docker image CircleCI DockerHub pulls GitHub stars DockerHub stars Contributors Paypal GitHub Sponsor

GitHub last commit (branch) license GitHub issues GitHub closed issues GitHub pull requests GitHub closed pull requests

based on telegraf:alpine docker image

Purpose

Usage

UPDATE 2021-04-28

BC Breaking Change in the environments:

The image is now using a small go utility (toml_update) to read, modify and write a valid toml configuration file.

# before
conf_templates="telegraf.conf.tmpl:/etc/telegraf/telegraf.conf"
conf_var_prefix=TEL_
conf_vars_telegrafconf=${conf_vars_telegrafconf:-'TEL_GLOBAL_TAGS TEL_AGENT TEL_OUTPUTS TEL_PROCESSORS TEL_AGGREGATORS TEL_INPUTS'}
TEL_AGENT_HOSTNAME=hostname = "myhostname"
TEL_OUTPUTS_INFLUXDB_URLS=urls = ["http://yourinfluxhost:8086"]
TEL_INPUTS_CPU_FLAGS = "percpu = true\ntotalcpu = true"
# after
CONF_UPDATE=/etc/telegraf/telegraf.con
CONF_PREFIX=TEL
TEL_AGENT_NAMEDOESNOTMATTER=agent.hostname=myhostname
TEL_REALLYDOESNOTMATTER=outputs.influxdb.urls=["https://yourinfluxhost:8086"]
TEL_CPUFLAG1=inputs.cpu.percpu=true
TEL_CPUFLAG2=inputs.cpu.totalcpu=true

Try it in 3 steps

1 create your own telegraf.env

docker run --rm -it drpsychick/telegraf:latest cat /default.env > telegraf.env

2 configure it

Edit at least your hostname and output (influxdb or sth. else) in telegraf.env:

TLG_AGENT_HOSTNAME=agent.hostname="myhostname"
TLG_INFLUXDB_URL=outputs.influxdb.urls=["http://yourinfluxhost:8086"]

You can add as many variables as you want for more inputs and their configuration, there are only a few rules:

  1. the variable must start with a known prefix (the CONF_PREFIX variable in default.env)
  2. the value must be a single row - due to Docker environment variables restrictions
  3. use one variable for each setting

For more examples see default.env

TLG_INPUTS_CPU_PERCPU=inputs.cpu.percpu=true
TLG_INPUTS_CPU_TOTAL=inputs.cpu.totalcpu=true
TLG_INPUTS_CPU_TIME=inputs.cpu.collect_cpu_time=false
TLG_INPUTS_CPU_ACTIVE=inputs.cpu.report_active=false

The toml_update tool will take the configured prefixes in order and update the configuration file from all matching variables one-by-one.

3 test and run it

Run in a separate teminal

docker run --rm -it --cap-add NET_ADMIN --env-file telegraf.env --name telegraf-1 drpsychick/telegraf:latest telegraf --test
docker run --rm -it --cap-add NET_ADMIN --env-file telegraf.env --name telegraf-1 drpsychick/telegraf:latest

Check your influxdb for new input

Configure it to your needs

You can use any TLG_ variable in your telegraf.env. They will be added to the config during container startup.

Example

TLG_INPUTS_DISK_FLAGS=inputs.disk.ignore_fs=["tmpfs", "devtmpfs", "devfs"]

Beware:

Docker only support simple variables. No ", no ' and especially no newlines in variables.