Знакомство с Telegraf
Telegraf - это open source агент написанный на языке Go, предназначенный для сбора метрик или данных из системы, на которой он установлен, а также из других сервисов. Telegraf передает собранные метрики в InfluxDB в корректном формате.
Ключевые возможности
- MIT лицензия.
- Минимальное потребление памяти.
- Расширяемая плагинная архитектура. На момент написания статьи написано 40+ плагинов для сбора метрик и для отправки в различные хранилища.
- Возможность отправлять статистику в сторонние API, например в OpenTSDB, Datadog, RabbitMQ и пр.
- Возможность собирать системные метрики CPU, Memory, disks, I/O и прочее.
Установка и настройка Telegraf
Скачиваем последнюю версию Telegraf с сайта https://influxdata.com/downloads/ и устанавливаем:
wget https://s3.amazonaws.com/get.influxdb.org/telegraf/telegraf_0.2.4_amd64.deb
sudo dpkg -i telegraf_0.2.4_amd64.deb
На Debian Telegraf устанавливается в /opt/telegraf. Символьная ссылка telegraf по умолчанию почему-то не создается. Для удобства сделаем символьную ссылку на /opt/telegraf/telegraf:
Для удобства в telegraf есть утилита, которая генерирует файл telegraf.conf и позволяет указать имена требуемых плагинов и outputs'ов. Выглядит эта команда в общем виде так:
Если не указывать параметры -filter и -outputfilter, то создастся файл конфигурации со всеми доступными плагинами и всеми доступными outputs:
Весь файл разбит на 4 блока:
sudo ln -s /opt/telegraf/telegraf /usr/bin/telegraf
Создание и редактирование файла конфигурации
Перед запуском сервиса telegraf необходимо подготовить файл конфигурации. По умолчанию файл конфигурации находится по пути /etc/opt/telegraf/telegraf.conf. В файле telegraf.conf описываются плагины (то откуда получаются значения метрик) и каналы для вывода метрик (outputs) - наименования поддерживаемых API для отправки метрик. Существует несколько способов создания и редактирования файла telegraf.conf.Для удобства в telegraf есть утилита, которая генерирует файл telegraf.conf и позволяет указать имена требуемых плагинов и outputs'ов. Выглядит эта команда в общем виде так:
telegraf -sample-config -filter <pluginname>[:<pluginname>] -outputfilter <outputname>[:<outputname>] > telegraf.conf
Параметр -filter - задает имена плагинов, разделенных ":", а параметр -outputfilter - задает имена output'ов. Со списком поддерживаемых плагинов, можно ознакомиться здесь, а со списком поддерживаемых outputs можно ознакомиться здесь.Если не указывать параметры -filter и -outputfilter, то создастся файл конфигурации со всеми доступными плагинами и всеми доступными outputs:
telegraf -sample-config > telegraf.conf
Для нашего примера мониторинга создадим конфигурацию с плагинами cpu, mem, disk и одним каналом отправки метрик - influxdb:telegraf -sample-config -filter cpu:mem:disk -outputfilter influxdb > telegraf.conf
Заглянем в полученный файл telegraf.conf и разберемся, что там есть.# Telegraf configuration
# Telegraf is entirely plugin driven. All metrics are gathered from the
# declared plugins.
# Even if a plugin has no configuration, it must be declared in here
# to be active. Declaring a plugin means just specifying the name
# as a section with no variables. To deactivate a plugin, comment
# out the name and any variables.
# Use 'telegraf -config telegraf.toml -test' to see what metrics a config
# file would generate.
# One rule that plugins conform to is wherever a connection string
# can be passed, the values '' and 'localhost' are treated specially.
# They indicate to the plugin to use their own builtin configuration to
# connect to the local system.
# NOTE: The configuration has a few required parameters. They are marked
# with 'required'. Be sure to edit those to make this configuration work.
# Tags can also be specified via a normal map, but only one form at a time:
[tags]
# dc = "us-east-1"
# Configuration for telegraf agent
[agent]
# Default data collection interval for all plugins
interval = "1m"
# Rounds collection interval to 'interval'
# ie, if interval="10s" then always collect on :00, :10, :20, etc.
round_interval = true
# Default data flushing interval for all outputs. You should not set this below
# interval. 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"
# Run telegraf in debug mode
debug = false
# Override default hostname, if empty use os.Hostname()
hostname = ""
###############################################################################
# OUTPUTS #
###############################################################################
[outputs]
# Configuration for influxdb server to send metrics to
[[outputs.influxdb]]
# The full HTTP or UDP endpoint URL for your InfluxDB instance.
# Multiple urls can be specified but it is assumed that they are part of the same
# cluster, this means that only ONE of the urls will be written to each interval.
# urls = ["udp://localhost:8089"] # UDP endpoint example
urls = ["http://localhost:8086"] # required
# The target database for metrics (telegraf will create it if not exists)
database = "telegraf" # required
# Precision of writes, valid values are n, u, ms, s, m, and h
# note: using second precision greatly helps InfluxDB compression
precision = "s"
# Connection timeout (for the connection with InfluxDB), formatted as a string.
# If not provided, will default to 0 (no timeout)
# timeout = "5s"
# username = "telegraf"
# password = "metricsmetricsmetricsmetrics"
# Set the user agent for HTTP POSTs (can be useful for log differentiation)
# user_agent = "telegraf"
# Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
# udp_payload = 512
###############################################################################
# PLUGINS #
###############################################################################
[plugins]
# Read metrics about cpu usage
[[plugins.cpu]]
# Whether to report per-cpu stats or not
percpu = true
# Whether to report total system cpu stats or not
totalcpu = true
# Comment this line if you want the raw CPU time metrics
drop = ["cpu_time"]
# Read metrics about disk usage by mount point
[[plugins.disk]]
# By default, telegraf gather stats for all mountpoints.
# Setting mountpoints will restrict the stats to the specified mountpoints.
# Mountpoints=["/"]
# Read metrics about memory usage
[[plugins.mem]]
# no configuration
###############################################################################
# SERVICE PLUGINS #
###############################################################################
Весь файл разбит на 4 блока:
- Глобальные настройки Telegraf.
- OUTPUTS - настройки каналов отправки метрик.
- PLUGINS - настройки плагинов.
- SERVICES - настройки мониторинга сервисов.
Глобальные настройки Telegraf
Telegraf имеет несколько глобальных настроек расположенных в секции agent в конфигурационном файле:
- hostname - имя хоста, которое передается в качестве тега. Значение по умолчанию - имя хоста системы, на которой запущен Telegraf. При желании можно переопределить.
- interval - интервал сбора метрик по умолчанию для всех плагинов. Задается в формате числа и единицы времени, например, 10s - 10 секунд, 5m - 5 минут. При желании в отдельных плагинах можно интервал переопределить.
- debug - если true, то значения метрик будет выводиться в STDOUT и в InfluxDB.
Настройки OUTPUTS
В данном блоке настраиваются параметры доступа к каналам отправки метрик. В нашем случае мы будем отправлять в локальный инстанс базы данных InfluxDB, поэтому оставим этот блок без изменений.
Настройки PLUGINS
Плагины - это скрипты, которые собирают значения метрик. При старте Telegraf загружает все настроенные плагины. Например, плагин system собирает основные параметры системы, такие как загрузка процессора, размер оперативной памяти и жестких дисков и прочее. Если вам нужно что-то собрать дополнительно, то необходимо сконфигурировать соответствующий плагин.
Все плагины имеют собственные настройки, а также общие настройки:
- pass - массив строк, который служит для фильтрации метрик, генерируемых данным плагином.
- drop - параметр обратный параметру pass, если имя метрики находится в этом списке, то данная метрика не отправляется.
- tagpass - список тегов, по которым разрешается отправка метрик. При сборе проверяется каждый элемент списка на полное совпадение с тегом метрики, и метрика отправляется если хотя бы один из списка элемент совпал.
- tagdrop - параметр обратный параметру tagpass.
- interval - специфичный интервал опроса для плагина.
Для нашего мониторинга оставим раздел PLUGINS без изменения.
Telegraf на момент написания статьи насчитывал 40+ плагинов и каналов для отправки. Для актуальной информации по наличию того или иного плагина лучше обратиться к странице на GitHub. Чтобы посмотреть, как настраивать определенный плагин или output можно воспользоваться командой:
telegraf -usage <pluginname>
Запуск telegraf
Пришло время запустить Telegraf, для этого выполним команду:
Все! Мониторинг работает, метрики собираются и записываются базу данных.
sudo service telegraf start
Starting the process telegraf [ OK ]
telegraf process was started [ OK ]
С этого момента запущен процесс telegraf, который собирает сконфигурированные метрики и отправляет в сконфигурированные каналы отправки. В InfluxDB автоматически создалась база данных с именем telegraf:> show databases
name: databases
---------------
name
_internal
mydb
telegraf
Посмотрим, какие метрики создались в базе telegraf:> use telegraf
Using database telegraf
> show measurements
name: measurements
------------------
name
cpu_usage_guest
cpu_usage_guest_nice
cpu_usage_idle
cpu_usage_iowait
cpu_usage_irq
cpu_usage_nice
cpu_usage_softirq
cpu_usage_steal
cpu_usage_system
cpu_usage_user
disk_free
disk_inodes_free
disk_inodes_total
disk_inodes_used
disk_total
disk_used
mem_available
mem_available_percent
mem_buffered
mem_cached
mem_free
mem_total
mem_used
mem_used_percent
Посмотрим значения метрики cpu_usage_idle:> SELECT value FROM cpu_usage_idle WHERE cpu='cpu-total' LIMIT 5
name: cpu_usage_idle
--------------------
time value
1452271200000000000 95.77983560503617
1452271260000000000 98.04077365394461
1452271320000000000 99.24956625347593
1452271380000000000 99.16506235875006
1452271500000000000 92.37084040124813
Все! Мониторинг работает, метрики собираются и записываются базу данных.
Заключение
Таким образом, мы научились устанавливать и настраивать сбор значений метрик с помощью Telegraf. Научились генерировать конфигурационный файл, разобрались с плагинами и каналами отправки метрик. Для более подробного ознакомления с возможностями Telegraf можно обратиться к документации.
На данный момент мы собираем и сохраняем метрики, а в следующей статье научимся визуализировать значения метрик с помощью приложения Chronograf из TICK стека.