Telegraf: теоретична частина
1. Загальні поняття
Telegraf — це агент збору метрик з відкритим вихідним кодом, розроблений компанією InfluxData. Його основна функція — отримання, обробка та передача даних у системи зберігання, такі як InfluxDB, Prometheus, MQTT-брокери або інші сервіси. Завдяки модульній архітектурі з більш ніж 300 плагінами, Telegraf може збирати дані з широкого спектра джерел: системні метрики, журнали, датчики, мережеві пристрої (через SNMP), MQTT, OPC UA, Modbus, SQL-бази, http-endpoints тощо. Агент підтримує як перетворення даних, так і агрегацію, фільтрацію та мультиканальну відправку, що робить його ключовим компонентом у побудові інфраструктури моніторингу та IIoT-рішень.
Що саме повинен робити агент Telegraf задається у конфігураційному файлі. У цьому файлі потрібно вказати, які плагіни будуть використовуватись. Кожен конфігураційний файл повинен містити принаймні один увімкнений вхідний плагін (звідки надходять метрики) і щонайменше один вихідний плагін (куди метрики надсилаються). При запуску Telegraf вказується який саме конфігураційний файл використовується.
Метрики
Метрики Telegraf — це внутрішнє представлення даних, яке використовується під час обробки. Вони тісно пов’язані з моделлю даних InfluxDB і складаються з чотирьох основних компонентів:
- Назва вимірювання (measurement name): опис і простір імен для метрики.
- Теги (tags): пари ключ/значення у вигляді рядків, зазвичай використовуються для ідентифікації метрики.
- Поля (fields): пари ключ/значення з типами даних, зазвичай містять значення самої метрики.
- Часова мітка (timestamp): дата й час, що відповідають полям.
Метрики Telegraf існують лише в оперативній пам’яті й повинні бути перетворені в конкретний формат для передачі або перегляду. Для цього Telegraf надає вихідні формати даних (також відомі як серіалізатори). Типовий серіалізатор Telegraf перетворює метрики у формат InfluxDB line protocol
, що забезпечує високу продуктивність і пряме відображення кожної метрики Telegraf у формат InfluxDB.
Формат InfluxDB line protocol
, який використовується Telegraf для виводу метрик у консоль (а також для передачі в базу даних або інші вихідні плагіни), має чітку структуру. Кожен рядок метрики складається з трьох частин: назви метрики (measurement), тегів (tags), полів (fields) та часової мітки (timestamp).
Загальний шаблон виглядає так:
<measurement>,<tag_key>=<tag_value>,... <field_key>=<field_value>,... <timestamp>
Де:
Measurement
- це логічна назва метрики або категорія, наприкладcpu
,mem
,disk
,mqtt_consumer
тощо. Вона визначає тип або джерело метрики.Tags (теги)
- параметри, що описують контекст метрики. Вони завжди є рядками й використовуються для фільтрації та групування даних. Наприклад:
cpu=cpu0,host=raspberrypi,location=lab
Fields (поля)
- значення метрик. Кожне поле складається з пари ключ-значення. Поля можуть бути числовими, логічними або рядковими. Наприклад:
usage_user=12.3,usage_system=3.1,usage_idle=84.6
Timestamp (часова мітка)
- UNIX-час у наносекундах. Він показує момент часу, коли була зібрана метрика. Якщо він не вказаний явно, Telegraf вставляє поточну мітку автоматично при записі метрики.
Наприклад:
cpu,cpu=cpu0,host=osboxes usage_user=2.3,usage_system=1.1,usage_idle=96.6 1754638931000000000
Це означає, що:
- Зібрана метрика
cpu
- Вона стосується ядра
cpu0
на хостіosboxes
- У момент часу, заданий міткою
1754638931000000000
:- 2.3% процесора використовувалось користувацькими процесами
- 1.1% — системними
- 96.6% — перебувало в режимі очікування
Вивід у цьому форматі може бути надісланий до InfluxDB, збережений у файл або переданий через MQTT, у залежності від налаштованого вихідного плагіна та серіалізатора (data_format
). Telegraf підтримує й інші серіалізатори, такі як json
, graphite
, wavefront
, prometheus
, але саме influx
(InfluxDB line protocol) є найбільш ефективним та використовується за замовчуванням у багатьох конфігураціях.
Етапи організації збору метрик за допомогою Telegraf
У цьому розділі розглядається типовий порядок дій під час впровадження збору метрик із використанням агента Telegraf. Послідовне виконання кроків забезпечує ефективне налаштування системи моніторингу, яка може збирати, обробляти та передавати дані у потрібному форматі.
1) Визначення мети збору метрик. Першим кроком є чітке розуміння, які саме метрики потрібно збирати (наприклад, навантаження на процесор, обсяг доступної памʼяті, трафік у мережі, дані з датчиків тощо). Також слід визначити джерела метрик (локальна система, сторонні пристрої, API) та формат або середовище, в яке ці метрики будуть передаватись (InfluxDB, MQTT, файл, хмарна система тощо). 2) Встановлення Telegraf. На вибраному пристрої встановлюється Telegraf, зазвичай через менеджер пакетів (apt, yum, brew) або завантаженням окремого бінарного файла. Можливе також використання Telegraf у вигляді Docker-контейнера. 3) Створення початкової конфігурації. Telegraf дозволяє згенерувати шаблон конфігураційного файлу з усіма плагінами або тільки з обраними:
telegraf config --input-filter cpu:mem:disk --output-filter influxdb_v2 > telegraf.conf
Після генерації конфігурація редагується вручну відповідно до вимог.
4) Налаштування секції agent. У секції [agent]
задаються глобальні параметри агента: періодичність збору метрик, частота надсилання, лог-файл, режим налагодження тощо. Наприклад:
[agent]
interval = "10s"
flush_interval = "10s"
5) Налаштування вхідних плагінів. У секціях [[inputs.*]]
описуються джерела метрик. Це можуть бути як системні показники (cpu, mem, disk), так і зовнішні потоки (MQTT, HTTP, Modbus):
[[inputs.cpu]]
percpu = true
totalcpu = true
6) Додавання обробників і агрегаторів. Якщо потрібно перетворювати, обмежувати або агрегувати метрики, використовуються плагіни processors
і aggregators
. Наприклад, для перейменування поля або усереднення даних:
[[processors.rename]]
[[processors.rename.replace]]
field = "used_percent"
dest = "memory_used_percent"
7) Налаштування вихідних плагінів. У секціях [[outputs.*]]
задається, куди відправляти метрики. Наприклад, до бази даних InfluxDB або брокера MQTT:
[[outputs.mqtt]]
servers = ["tcp://broker.local:1883"]
topic_prefix = "metrics"
data_format = "json"
8) Тестування конфігурації. Для одноразової перевірки можна виконати команду:
telegraf --config ./telegraf.conf --test
Вивід метрик у консоль дозволяє переконатися, що дані збираються коректно і без помилок.
9) Запуск Telegraf. Після перевірки Telegraf запускається як фоновий сервіс через systemd
або вручну:
sudo systemctl start telegraf
або
telegraf --config ./telegraf.conf
10) Перевірка роботи та логування. Для перегляду логів використовується:
journalctl -u telegraf -f
або
tail -f /var/log/telegraf/telegraf.log
Це дозволяє вчасно виявити помилки або попередження.
11) Візуалізація метрик. Зібрані метрики можуть бути передані у системи візуалізації, наприклад, Grafana або Node-RED Dashboard.
12) Підтримка і розширення. З часом система може масштабуватись: додаються нові входи, виходи, обробка даних, дублювання на кілька хостів, централізоване управління конфігураціями.
Ця послідовність дозволяє системно і поетапно побудувати надійний процес збору метрик з допомогою Telegraf.
2. Файл конфігурації
Telegraf використовує конфігураційний файл для визначення, які плагіни потрібно ввімкнути та які параметри застосовувати під час запуску. Кожен плагін Telegraf має власний набір параметрів налаштування. Крім того, Telegraf надає глобальні параметри для налаштування загальних опцій.
Під час запуску Telegraf використовуй прапорець --config
, щоб вказати розташування конфігураційного файлу:
- Ім’я файлу та шлях, наприклад:
--config /etc/default/telegraf
- Віддалена URL-адреса, наприклад:
--config "http://remote-URL-endpoint"
Використовуй прапорець --config-directory
, щоб включити всі файли з розширенням .conf
у вказаній директорії до конфігурації Telegraf.
На більшості систем типовими шляхами є:
/etc/telegraf/telegraf.conf
— основний конфігураційний файл/etc/telegraf/telegraf.d
(на Windows —C:\Program Files\Telegraf\telegraf.d
) — директорія з додатковими конфігураційними файлами
Telegraf обробляє кожен конфігураційний файл окремо, а кінцева конфігурація є об’єднанням усіх файлів. Якщо якийсь файл має некоректну конфігурацію, Telegraf повертає помилку.
Структура файлу
Конфігураційний файл Telegraf (telegraf.conf
) є текстовим файлом у форматі TOML, який означує, як агент Telegraf повинен збирати, обробляти та надсилати метрики. Він складається з кількох ключових секцій, кожна з яких відповідає за певний аспект роботи агента.
[agent]
- центральна секція, що задає глобальні параметри роботи агента:[global_tags]
- глобальні теги, які автоматично додаються до всіх зібраних метрик. Глобальні теги задаються у форматіключ="значення"
.-
[[inputs.*]]
- вхідні плагіни, описують джерела, з яких збираються метрики. Кожен плагін може мати власні параметри, а також фільтри (namepass
,tagpass
тощо). Кожен плагін може мати власні параметри, а також фільтри (namepass
,tagpass
тощо). [[processors.*]]
- процесори (необов’язково), обробляють або модифікують метрики перед передачею. Обробляють або модифікують метрики перед передачею. Наприклад, перейменування, обчислення похідних значень або фільтрація тегів.-
[[aggregators.*]]
- агрегатори (необов’язково), виконують обчислення над метриками (середнє, максимум, сума тощо) за певний період часу. Застосовуються до потоків даних перед вихідними плагінами. [[outputs.*]]
- вихідні плагіни, означують, куди саме Telegraf буде надсилати метрики.
Загальна структура (схема)
[agent]
# глобальні налаштування
[global_tags]
# глобальні теги
[[inputs.*]]
# вхідні плагіни
[[processors.*]]
# (опційно) обробка метрик
[[aggregators.*]]
# (опційно) агрегування метрик
[[outputs.*]]
# вихідні плагіни
Ця структура дозволяє гнучко налаштовувати поведінку Telegraf у будь-яких сценаріях, як від простого моніторингу ресурсів Raspberry Pi до складних IoT-архітектур з агрегуванням та передачею в хмарні сервіси.
Нижче наведений приклад конфігураційного файлу Telegraf, який:
- збирає метрики використання:
- оперативної памʼяті (
mem
) - ЦПУ (
cpu
) - диску (
disk
)
- оперативної памʼяті (
- публікує їх у MQTT-брокер
- містить усі основні секції:
[agent]
,[global_tags]
,[[inputs.*]]
,[[outputs.mqtt]]
# --------------------
# [1] Глобальні параметри агента
# --------------------
[agent]
interval = "10s" # Інтервал збору метрик
flush_interval = "10s" # Інтервал відправки метрик
logfile = "/var/log/telegraf/telegraf.log" # Файл логів
# --------------------
# [2] Глобальні теги
# --------------------
[global_tags]
location = "lab"
device = "raspberrypi"
# --------------------
# [3] Вхідні плагіни (джерела метрик)
# --------------------
# CPU
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
# Оперативна пам’ять
[[inputs.mem]]
# Диск
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "overlay"]
# --------------------
# [4] Обробка (не використовується у цьому прикладі)
# --------------------
# [[processors.*]]
# (опційно)
# --------------------
# [5] Агрегатори (не використовується у цьому прикладі)
# --------------------
# [[aggregators.*]]
# (опційно)
# --------------------
# [6] Вихідний плагін: MQTT
# --------------------
[[outputs.mqtt]]
servers = ["tcp://localhost:1883"]
topic_prefix = "telegraf/metrics"
username = "mqtt_user" # (за потреби)
password = "mqtt_password" # (за потреби)
client_id = "telegraf-publisher"
qos = 0
retain = false
data_format = "json"
У цьому приклад дані публікуються в топіки типу:
telegraf/metrics/cpu
telegraf/metrics/mem
telegraf/metrics/disk
Формат публікації: JSON (наприклад, для mem
):
{
"used_percent": 45.23,
"total": 952107008,
...
}
Генерування файлу
Команда telegraf config
дає змогу згенерувати конфігураційний файл на основі списку плагінів Telegraf. Щоб згенерувати конфігураційний файл із типовими вхідними та вихідними плагінами, введи в терміналі таку команду:
telegraf config > telegraf.conf
Згенерований файл містить параметри для всіх доступних плагінів — деякі з них увімкнено, інші закоментовано.
Щоб згенерувати конфігураційний файл лише з потрібними плагінами, використовуй параметри --input-filter
і --output-filter
для вказання вхідних і вихідних плагінів. Імена плагінів розділяються двокрапкою (:
).
telegraf \
--input-filter <НАЗВА_ВХІДНОГО_ПЛАГІНА>[:<ІНШИЙ_ВХІДНИЙ_ПЛАГІН>] \
--output-filter <НАЗВА_ВИХІДНОГО_ПЛАГІНА>[:<ІНШИЙ_ВИХІДНИЙ_ПЛАГІН>] \
config > telegraf.conf
Наведена нижче команда включає конфігураційні секції лише для плагінів inputs.cpu
, inputs.http_listener_v2
, outputs.influxdb_v2
та outputs.file
:
telegraf \
--input-filter cpu:http_listener_v2 \
--output-filter influxdb_v2:file \
config > telegraf.conf
Змінні середовища
У конфігураційному файлі можна використовувати змінні середовища, обгорнувши їх у ${}
.
- Для рядків змінні потрібно вказувати в лапках, наприклад:
"test_${STR_VAR}"
- Для чисел і логічних значень — без лапок, наприклад:
${INT_VAR}
,${BOOL_VAR}
Змінні середовища можна також задавати за допомогою команди export
у Linux:
export password=mypassword
Примітка: для зберігання конфіденційних облікових даних слід використовувати сховище секретів або змінні середовища.
Наприклад:
USER="alice"
INFLUX_URL="https://cloud2.influxdata.com"
INFLUX_SKIP_DATABASE_CREATION="true"
INFLUX_PASSWORD="monkey123"
У конфігураційному файлі Telegraf (/etc/telegraf.conf
) посилайся на ці змінні, наприклад:
[global_tags]
user = "${USER}"
[[inputs.mem]]
[[outputs.influxdb]]
urls = ["${INFLUX_URL}"]
skip_database_creation = ${INFLUX_SKIP_DATABASE_CREATION}
password = "${INFLUX_PASSWORD}"
Коли Telegraf запуститься, кінцева конфігурація виглядатиме так:
[global_tags]
user = "alice"
[[outputs.influxdb]]
urls = "https://cloud2.influxdata.com"
skip_database_creation = true
password = "monkey123"
Конфігурація агента
Секція [agent]
у конфігураційному файлі Telegraf визначає глобальні параметри роботи агента, які застосовуються до всіх плагінів. Вона задає, як часто збирати метрики, як їх буферизувати та коли відправляти на вихідні плагіни. Інші секції (inputs
, outputs
, processors
, aggregators
) вже працюють у межах цих глобальних параметрів.
Щоб правильно налаштувати параметри секції [agent]
у Telegraf, варто розуміти, як саме працює процес збору та відправлення метрик. Агент Telegraf виконує періодичне опитування джерел метрик (через вхідні плагіни), обробляє ці метрики (за потреби), і надсилає їх далі (через вихідні плагіни) у бази даних, брокери або інші системи. Основні етапи:
- Збір. З вхідних джерел (наприклад, CPU, пам’ять, диск, MQTT, Modbus тощо) кожні
interval
секунд. Тобто це робота з вхідними плагінами. - Буферизація. Метрики тимчасово зберігаються в оперативній памʼяті. Якщо відправлення неможливе (наприклад, мережа недоступна) - зберігаються до
metric_buffer_limit
. - Скидання (flush). Зібрані метрики надсилаються на вихід (InfluxDB, MQTT, файл тощо) кожні
flush_interval
секунд пакетами поmetric_batch_size
записів. Тобто це робота з вихідними плагінами.
Загалом, секція [agent]
означує темп, ритм і навантаження агента, а також базову стратегію його роботи. Правильне налаштування цих параметрів важливе для стабільної та ефективної роботи всієї системи збору метрик. На цей процес впливають різноманітні параметри, зокрема:
Параметр | Що регулює | Приклад |
---|---|---|
interval |
Як часто збирати метрики | 10s → кожні 10 секунд |
flush_interval |
Як часто відправляти метрики | 10s → метрики надсилаються кожні 10 секунд |
metric_batch_size |
Скільки метрик надсилається за один раз | 1000 → пакет містить до 1000 метрик |
metric_buffer_limit |
Скільки метрик зберігати у памʼяті при помилках надсилання | 10000 → 10 тисяч |
collection_jitter |
Випадкове зміщення часу збору для розподілення навантаження | 0s → без зміщення |
flush_jitter |
Випадкове зміщення часу скидання | 0s → без зміщення |
Якщо метрики надходять занадто часто або створюють велике навантаження можна збільшити interval
. Якщо система не встигає надсилати дані тоді можна збільшити flush_interval
або metric_buffer_limit
. Якщо багато пристроїв збирають дані одночасно, можна додати collection_jitter
, щоб розподілити навантаження у часі.
Секція [agent]
містить такі параметри конфігурації:
interval
: Типовий інтервал збору даних для всіх вхідних плагінів.round_interval
: Округлює час збору до кратногоinterval
. Наприклад, якщоinterval = 10s
, агент буде збирати дані о :00, :10, :20 тощо.metric_batch_size
: Кількість метрик, що відправляються в одному пакеті (batch).metric_buffer_limit
: Розмір буфера метрик для кожного вихідного плагіна. Буфер очищається після успішного запису. Має бути кратнимmetric_batch_size
і не меншим за його подвоєне значення.collection_jitter
: Випадкове зміщення (jitter) часу збору. Кожен плагін «спить» випадковий проміжок часу в межах jitter перед збором. Це допомагає уникнути одночасного доступу до, наприклад,sysfs
, що може навантажувати систему.flush_interval
: Типовий інтервал відправлення даних усіма вихідними плагінами. Не повинен бути меншим заinterval
. Максимальний інтервал — цеflush_interval + flush_jitter
.flush_jitter
: Випадкове зміщення інтервалу відправки. Використовується для уникнення пікових навантажень при одночасному запуску кількох інстансів Telegraf. Наприклад, приflush_interval = 10s
іflush_jitter = 5s
відправка буде відбуватись кожні 10–15 секунд.precision
: Округлення зібраних метрик до вказаної точності (інтервал у форматі:1ns
,1us
,1ms
,1s
). Не використовується для сервісних вхідних плагінів (наприклад,logparser
,statsd
).debug
: Запуск Telegraf у режимі налагодження (debug).quiet
: Запуск Telegraf у тихому режимі — лише помилки.logtarget
: Куди виводити логи —"file"
,"stderr"
, або (для Windows)"eventlog"
. Якщо"file"
— використовується параметрlogfile
.logfile
: Ім’я файлу для логів, якщоlogtarget = "file"
. Якщо значення порожнє — логи пишуться в stderr.logfile_rotation_interval
: Обертання (ротація) лог-файлу після вказаного часу. Якщо0
— ротація за часом не виконується.logfile_rotation_max_size
: Ротація логів, коли розмір перевищує вказане значення. Якщо0
— ротація за розміром не виконується.logfile_rotation_max_archives
: Максимальна кількість збережених архівів логів. Старіші файли видаляються. Якщо-1
— архіви не видаляються.log_with_timezone
: Тимчасова зона для запису в логах. Наприклад:"America/Chicago"
. Щоб використовувати локальний час, вкажи"local"
.hostname
: Перевизначення імені хоста. Якщо порожнє — використовуєтьсяos.Hostname()
.omit_hostname
: Якщоtrue
, тегhost
не додається до метрик.skip_processors_after_aggregators
: Якщоtrue
, процесори не запускаються повторно після агрегаторів. Типове значення —false
.
Конфігурація вхідного плагіна
Вхідні плагіни Telegraf використовуються для збору метрик із системи, сервісів або сторонніх API. Усі метрики збираються через ті джерела, які увімкнуті і налаштовані у конфігураційному файлі Telegraf. Окрім форматів даних, специфічних для окремих плагінів, Telegraf підтримує набір загальних форматів, які доступні при налаштуванні багатьох вхідних плагінів.
Наступні параметри конфігурації доступні для всіх вхідних плагінів:
alias
: Ім’я конкретного екземпляра плагіна.interval
: Як часто збирати цю метрику. Зазвичай усі плагіни використовують глобальний інтервал, але якщо потрібно, щоб певний плагін виконувався рідше або частіше, це можна вказати тут. Збільшення значення може допомогти зменшити навантаження.precision
: Перевизначає параметрprecision
агента. Зібрані метрики округлюються до заданої точності у вигляді інтервалу. Якщо вказано для сервісного плагіна (наприклад,statsd
), кілька подій із однаковим часом можуть бути об’єднані при записі у базу даних.collection_jitter
: Перевизначає глобальне значенняcollection_jitter
агента. Використовується для випадкового зміщення часу збору, щоб уникнути одночасного навантаження на систему.name_override
: Перевизначає базову назву вимірювання (за замовчуванням — назва плагіна).name_prefix
: Додає префікс до назви вимірювання.name_suffix
: Додає суфікс до назви вимірювання.tags
: Набір тегів, які застосовуються до метрик цього плагіна.
Конфігурація вихідного плагіна
alias
: Ім’я конкретного екземпляра плагіна.flush_interval
: Максимальний інтервал між відправками даних. Дозволяє перевизначити глобальний параметрflush_interval
агента для окремого плагіна.flush_jitter
: Час випадкового зміщення інтервалу відправки. Перевизначаєflush_jitter
агента для конкретного плагіна.metric_batch_size
: Максимальна кількість метрик, які надсилаються одночасно. Перевизначає параметрmetric_batch_size
агента.metric_buffer_limit
: Максимальна кількість не надісланих метрик у буфері. Перевизначаєmetric_buffer_limit
агента.name_override
: Перевизначає базову назву вимірювання (за замовчуванням — назва вихідного плагіна).name_prefix
: Додає префікс до назви вимірювання.name_suffix
: Додає суфікс до назви вимірювання.
Конфігурація агрегатора
Наступні параметри конфігурації доступні для всіх агрегаторів:
alias
: Ім’я конкретного екземпляра плагіна.period
: Період, з якою агрегатор скидає (flush) та очищає зібрані дані. Усі метрики з часовими мітками поза межами цього періоду ігноруються агрегатором.delay
: Затримка перед тим, як агрегатор виконує відправку даних. Використовується для того, щоб агрегатори встигли зібрати метрики від вхідних плагінів, якщо збір і скидання мають однаковий інтервал.grace
: Тривалість, протягом якої плагін агрегує метрики, навіть якщо вони надходять із запізненням (поза межами періоду). Цей параметр корисний у випадках, коли очікується запізніле надходження метрик, і дає змогу включити їх у наступний період агрегації.drop_original
: Якщо встановленоtrue
, агрегатор видаляє початкову метрику та не надсилає її у вихідні плагіни.name_override
: Перевизначає базову назву вимірювання (за замовчуванням — назва вхідного плагіна).name_prefix
: Додає префікс до назви вимірювання.name_suffix
: Додає суфікс до назви вимірювання.tags
: Набір тегів, які застосовуються до метрик від конкретного вхідного плагіна.
Конфігурація процесора
Наступні параметри конфігурації доступні для всіх процесорів:
alias
: Ім’я конкретного екземпляра плагіна.order
: Порядок виконання процесорів. Якщо не вказано — порядок буде випадковим.
Параметри фільтрації метрик можна використовувати для обмеження обробки певних метрик процесором. Вилучені метрики передаються далі до наступного процесора.
Фільтрація метрик
Фільтри можна налаштовувати окремо для вхідних, вихідних, процесорів або агрегаторів. Фільтри:
namepass
: Масив шаблонів (glob patterns). Пропускаються лише метрики, назви яких відповідають хоча б одному з шаблонів.namedrop
: Обернений доnamepass
. Відкидає метрики, назви яких відповідають шаблонам у цьому списку. Застосовується післяnamepass
.fieldpass
: Масив шаблонів для назв полів. Пропускаються лише ті поля, ключі яких відповідають шаблонам.fielddrop
: Обернений доfieldpass
. Відкидає поля з ключами, що відповідають шаблонам.tagpass
: Таблиця, яка зіставляє ключі тегів з масивами шаблонів значень. Пропускаються лише ті метрики, що мають тег із відповідним ключем і значенням, що відповідає шаблону.tagdrop
: Обернений доtagpass
. Відкидає метрики, що мають тег із ключем і значенням, які відповідають шаблону. Застосовується післяtagpass
.taginclude
: Масив шаблонів. Пропускаються лише теги, ключі яких відповідають шаблонам. На відміну відtagpass
, цей фільтр видаляє всі теги, що не відповідають умовам, але не відкидає саму метрику. Ефективніше використовувати на вході.tagexclude
: Обернений доtaginclude
. Видаляє теги, ключі яких відповідають шаблонам.
Ці фільтри дозволяють точно керувати тим, які метрики, поля й теги обробляються або ігноруються на кожному етапі обробки даних.
4. Команди та прапорці telegraf
Якщо просто виконати команду:
telegraf
без жодних опцій, Telegraf спробує завантажити конфігураційний файл за замовчуванням. Поведінка за замовчуванням
-
Файл конфігурації: Telegraf за замовчуванням шукає файл за шляхом:
/etc/telegraf/telegraf.conf
Якщо файл існує та валідний, то Telegraf запускається, виконує збір метрик відповідно до конфігурації, і публікує їх у вказане джерело (наприклад, InfluxDB або MQTT).
-
Якщо файл не знайдено або містить помилки, то Telegraf завершить роботу з повідомленням про помилку (stderr).
Команда telegraf
запускає всі необхідні процеси для роботи агента Telegraf. Синтаксис використання
telegraf [команди]
telegraf [прапорці]
Команди
Команда | Опис |
---|---|
config |
Генерація та міграція конфігурацій Telegraf |
secrets |
Керування секретами у сховищах |
plugins |
Вивід списку доступних плагінів |
version |
Вивід поточної версії у stdout |
Глобальні прапорці
Прапорець | Опис |
---|---|
--config <файл> |
Завантажити вказаний конфігураційний файл |
--config-directory <каталог> |
Каталог із додатковими .conf файлами |
--test-wait |
Кількість секунд очікування на завершення сервісних вхідних плагінів у режимі --test або --once |
--usage <плагін> |
Вивід прикладу використання плагіна (наприклад: telegraf --usage mysql ) |
--pprof-addr <адреса> |
Адреса для прослуховування pprof (за замовчуванням вимкнено) |
--watch-config |
Перезапуск Telegraf при локальних змінах конфігурації (через notify або poll ) |
--pidfile <файл> |
Файл, у який записується PID |
--password <пароль> |
Пароль для розблокування сховища секретів |
--old-env-behavior |
Увімкнути попередню поведінку змінних середовища (до версії v1.27) |
--once |
Зібрати метрики один раз, записати та завершити роботу |
--debug |
Увімкнути режим налагодження (debug logging) |
--quiet |
Запустити у тихому режимі (лише помилки) |
--unprotected |
Не захищати секрети в оперативній пам’яті |
--test |
Зібрати метрики один раз і вивести у stdout |
--deprecation-list |
Вивести список усіх застарілих плагінів або параметрів |
--input-list |
Вивести список доступних вхідних плагінів |
--output-list |
Вивести список доступних вихідних плагінів |
--version |
(Застарілий) Вивід версії Telegraf |
--sample-config |
(Застарілий) Вивід повного зразка конфігурації |
--plugin-directory <каталог> |
(Застарілий) Каталог для рекурсивного пошуку .so -плагінів |
--section-filter <фільтр> |
Фільтрація секцій конфігурації для виводу (agent, global_tags, outputs, processors, aggregators, inputs). Роздільник — : |
--input-filter <фільтр> |
Вибір вхідних плагінів для увімкнення. Роздільник — : |
--output-filter <фільтр> |
Вибір вихідних плагінів для увімкнення. Роздільник — : |
--aggregator-filter <фільтр> |
Вибір агрегаторів для увімкнення. Роздільник — : |
--processor-filter <фільтр> |
Вибір процесорів для увімкнення. Роздільник — : |
--secretstore-filter <фільтр> |
Вибір плагінів сховища секретів для увімкнення. Роздільник — : |
Ці команди та прапорці дозволяють гнучко керувати роботою агента Telegraf — як для одноразового збору, так і для постійного моніторингу.
Нижче наведено кілька пркладів.
Створити повний конфігураційний файл:
telegraf config > telegraf.conf
Згенерувати конфігурацію лише з окремими плагінами:
telegraf config \
--input-filter cpu \
--output-filter influxdb
Запустити одну конфігурацію Telegraf і вивести метрики у stdout:
telegraf --config telegraf.conf --test
Запустити Telegraf з усіма плагінами, визначеними у конфігураційному файлі:
telegraf --config telegraf.conf
Запустити Telegraf, але увімкнути лише вибрані плагіни:
telegraf \
--config telegraf.conf \
--input-filter cpu:mem \
--output-filter influxdb
Запустити Telegraf з увімкненим pprof (для профілювання):
telegraf \
--config telegraf.conf \
--pprof-addr localhost:6060
5. Огляд вхідних плагінів
Нижче подано класифікацію вхідних плагінів (input plugins) Telegraf — за категоріями, відповідно до джерел даних, з яких збираються метрики:
1) Системні метрики (System Metrics). Ці плагіни збирають інформацію безпосередньо з операційної системи, апаратного забезпечення або ядра.
cpu
— завантаження процесораmem
— використання оперативної пам’ятіdisk
— статистика дискових розділівdiskio
— дискові операції вводу/виводуswap
— використання swap-пам’ятіnet
,netstat
— активність мережевих інтерфейсівprocesses
— кількість і стан процесівkernel
— загальні метрики ядра (контекстні перемикання тощо)system
— аптайм, користувачі, хостнейм, час
2) Мережеві плагіни. Моніторинг стану мережі, доступності вузлів та якості з’єднання.
ping
— час відгуку і втрата пакетів (ICMP)http_response
— час відгуку вебсервераnet_response
— доступність TCP/UDP портівdns_query
— перевірка доступності DNSsocket_listener
— прослуховування сокетів для надходження метрикipmi_sensor
— апаратні сенсори через IPMI
3) Промислові та протокольні плагіни. Для підключення до промислових або спеціалізованих протоколів.
modbus
— зчитування даних з Modbus-пристроївsnmp
— збір метрик через SNMPopcua
— підтримка OPC UAs7
— підключення до Siemens PLC через S7-протоколmqtt_consumer
— отримання метрик з MQTT-брокера
4) Системи моніторингу та логів. Отримання даних із систем логування, обліку або моніторингу.
logparser
— читання лог-файлівtail
— спостереження за новими записами у логахeventlog
— Windows Event Logwin_perf_counters
— продуктивність у Windows
5) Бази даних. Збір статистики з баз даних та моніторинг їхнього стану.
mysql
,postgresql
,mssql
,oracle
,sqlite
— підключення до відповідних СУБДinfluxdb
— метрики з іншого сервера InfluxDBredis
— інформація про Redismongodb
— моніторинг MongoDBelasticsearch
— статус кластера, індекси
6) Контейнери та віртуалізація. Збір метрик із систем контейнеризації, кластеризації та віртуалізації.
docker
— статистика контейнерів Dockerkubernetes
— через kubelet APIcgroup
— Linux cgroupscontainerd
,cri
,rkt
— альтернативи Docker
7) Обмін повідомленнями та брокери. Інтеграція з потоками даних або повідомлень.
mqtt_consumer
— споживання MQTT-повідомленьkafka_consumer
— Kafkanats_consumer
— NATSamqp_consumer
— RabbitMQ
8) Хмарні сервіси. Отримання метрик із хмарних або зовнішніх API.
cloudwatch
,stackdriver
,azure_monitor
— метрики з AWS, Google Cloud, Azurehttp
,http_listener
— запити до зовнішніх HTTP-API або прослуховування HTTP-запитів
9) Файли, скрипти, утиліти. Отримання даних з файлів, команд чи скриптів.
exec
— запуск зовнішнього скрипта, отримання stdout як метрикиexecd
— запуск довготривалого процесуfile
— читання даних із файлівcsv
,json
,xml
— парсинг даних у цих форматахstarlark
— написання кастомної логіки на Python-подібному DSL
10) Тестові та службові
internal
— збір внутрішніх метрик самого Telegrafdummy
,random
,sample
— тестові плагіни для налагодженняprocstat
— моніторинг окремих процесів
Якість мережі
Щоб збирати метрики якості мережі та моніторити зв’язок із пристроями, Telegraf має кілька плагінів, які можуть бути корисні залежно від типу перевірки:
-
inputs.ping
– найпростіший спосіб перевірки доступності. Пінгує один або кілька IP-адрес або доменів, щоб виміряти:- затримку (
average_response_ms
,percent_packet_loss
,maximum_response_ms
,minimum_response_ms
) - доступність (чи відповідає взагалі,
result_code
)
Працює у двох режимах:
method = "exec"
– використовує системну утилітуping
(за замовчуванням).method = "native"
– надсилає ICMP напряму (без зовнішніх програм), потрібенCAP_NET_RAW
або root.
Приклад конфігурації:
[[inputs.ping]] urls = ["192.168.1.1", "google.com"] count = 5 method = "native" ping_interval = 1.0 timeout = 2.0 data_format = "influx"
- затримку (
-
inputs.net_response
– для перевірки TCP або UDP портів. Дозволяє перевірити, чи відкритий порт на віддаленому пристрої і скільки часу займає підключення. Добре підходить для моніторингу пристроїв з Modbus, веб-серверів, MQTT-брокерів тощо.Приклад конфігурації:
[[inputs.net_response]] protocol = "tcp" address = "192.168.1.50:502" timeout = 1.0
-
inputs.net
– збирає базові метрики про мережеві інтерфейси локальної машини: обсяг трафіку, кількість помилок, дропів тощо. -
inputs.dns_query
– перевірка якості роботи DNS. Дозволяє відстежувати доступність DNS-серверів і час відповіді на DNS-запити.
Завдання | Плагін |
---|---|
Перевірити, чи “живий” пристрій | inputs.ping |
Перевірити порт/сервіс (наприклад, 502) | inputs.net_response |
Знати трафік і помилки на інтерфейсах | inputs.net |
Аналіз якості DNS | inputs.dns_query |
Вбудований ICMP без зовнішнього ping |
inputs.ping з method = "native" |
6. Огляд вихідних плагінів
Нижче наведена класифікація вихідних плагінів (output plugins) у Telegraf за основними напрямами використання. Це дозволяє краще зорієнтуватися у виборі плагіна залежно від того, куди саме мають передаватися зібрані метрики.
1) Бази даних часових рядів (Time Series Databases). Це найпоширеніше призначення вихідних плагінів — передача метрик до спеціалізованих СУБД для аналізу часових рядів.
influxdb
,influxdb_v2
— передача в InfluxDB (версії 1.x або 2.x)prometheus_client
— відкриття HTTP-серверу для збирання метрик Prometheusgraphite
— для надсилання у Graphiteopentsdb
— підтримка OpenTSDB через Telnet APIkairosdb
— для бази KairosDBtimescaledb
— передача до TimescaleDB (через SQL)
2) Бази даних загального призначення. Передача метрик у класичні реляційні або NoSQL СУБД для збереження, звітності або подальшої обробки.
postgresql
— запис у PostgreSQLsql
— запис у будь-яку SQL-базу через конфігурований драйверmongodb
— запис у MongoDBclickhouse
— підтримка ClickHousesqlite
— запис у SQLite-файлoracle
— для баз Oracle (через OCI)dynamodb
— передача в Amazon DynamoDB
3) Повідомлення та брокери повідомлень (Message Brokers / Queues). Для інтеграції з системами обміну повідомленнями в реальному часі або підключення до інших систем через брокери.
mqtt
— передача у MQTT-брокерamqp
— через Advanced Message Queuing Protocol (RabbitMQ)kafka
— публікація в Kafka (Apache Kafka)nats
— для надсилання через NATSnsq
— інтеграція з NSQredis
— підтримка публікації через Redis pub/subpubsub
— Google Cloud Pub/Subazure_monitor
— інтеграція з Azure
4) Файлові системи та логи. Для локального збереження метрик у файлах або журналізації.
file
— запис у файл у заданому форматі (наприклад, JSON, line protocol)csv
— у CSV-файлjson_file
— збереження метрик у JSON-файлcloudwatch_logs
— відправлення до AWS CloudWatch Logselasticsearch
— запис у Elasticsearchlogzio
— інтеграція з Logz.io
5) Системи моніторингу та візуалізації. Надсилання метрик у зовнішні системи для моніторингу або побудови графіків.
datadog
— передача метрик у Datadogwavefront
— для VMware Wavefrontnewrelic
— надсилання у New Reliclibrato
— підтримка Libratosignalfx
— інтеграція з SignalFx (Splunk)stackdriver
— для Google Cloud Monitoringsplunkmetric
— передача до Splunk
6) Хмарні сервіси та API. Вихідні плагіни для взаємодії з хмарними або вебсервісами.
http
— надсилання метрик через HTTP POST у кастомне APIazure_monitor
,cloudwatch
,google_cloud_monitoring
— для хмарних моніторингових сервісівsapm
,otlp
— для підтримки OpenTelemetry/Trace
7) Інше. Інші нестандартні методи або спеціалізовані протоколи передачі.
socket_writer
— надсилання через TCP/UDP сокетwavefront
,riemann
— підтримка відповідних сервісівsqlstore
,procstat
(небезпосередньо не вихідні, але можуть комбінуватися)
Вибір плагіна залежить від системи, яка прийматиме метрики:
- Якщо використовується InfluxDB —
influxdb
абоinfluxdb_v2
- Для MQTT —
mqtt
- Для Prometheus —
prometheus_client
- Для збереження у файл —
file
абоcsv
- Для інтеграції з хмарою — обрати відповідний плагін (
cloudwatch
,azure_monitor
,stackdriver
)
7. Процесори
8. Агрегатори
9. Формати
https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
- InfluxDB Line Protocol
- Binary
- Carbon2
- CloudEvents
- CSV
- Graphite
- JSON
- MessagePack
- Prometheus
- Prometheus Remote Write
- ServiceNow Metrics
- SplunkMetric
- Template
- Wavefront
Теоретичне заняття розробив Прізвище або нік розробника Імя.