TIG-стек: Telegraf + InfluxDB + Grafana для мониторинга — АйТи Фреш

TIG-стек: Telegraf + InfluxDB + Grafana для мониторинга

Архитектура TIG-стека

TIG-стек — это связка из трёх инструментов, которую мы используем для мониторинга серверной инфраструктуры. Три компонента, каждый делает своё дело:

  • Telegraf — агент, который живёт на каждом сервере и непрерывно собирает метрики: CPU, RAM, диски, сеть, состояние сервисов. Всё это летит в InfluxDB. Более 300 плагинов ввода/вывода — покрывает практически любой сценарий.
  • InfluxDB — time-series база данных, заточенная именно под метрики с временными метками. В версии 2.x появился встроенный UI, язык запросов Flux и система алертов прямо из коробки.
  • Grafana — всё, что вы видите на экране. Подключается к InfluxDB, рисует интерактивные дашборды, умеет слать алерты и разграничивать доступ для разных команд.

Схема простая: Telegraf на каждом сервере → InfluxDB как центральное хранилище → Grafana для визуализации. Компоненты общаются по HTTP/HTTPS. InfluxDB и Grafana мы обычно ставим на один выделенный сервер мониторинга — так проще обслуживать.

Установка InfluxDB 2.x

InfluxDB 2.x — это не просто обновление, а фактически другой продукт. Появился встроенный UI, вместо паролей — API-токены, вместо InfluxQL — язык Flux. Если начинаете с нуля, берите сразу 2.x.

# Ubuntu/Debian
wget https://dl.influxdata.com/influxdb/releases/influxdb2_2.7.5-1_amd64.deb
sudo dpkg -i influxdb2_2.7.5-1_amd64.deb

# CentOS/RHEL
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5-1.x86_64.rpm
sudo yum localinstall influxdb2-2.7.5-1.x86_64.rpm

# Запуск и автозапуск
sudo systemctl enable influxdb
sudo systemctl start influxdb

# Начальная настройка через CLI
influx setup \
  --org mycompany \
  --bucket monitoring \
  --username admin \
  --password 'Str0ngP@ssw0rd!' \
  --retention 30d \
  --force

# Создание API-токена для Telegraf
influx auth create \
  --org mycompany \
  --description "Telegraf write token" \
  --write-bucket monitoring \
  --read-bucket monitoring

Настройка retention policies

Retention policy — штука, про которую забывают до первого «диск закончился». Управляйте сроками хранения данных заранее, чтобы не разгребать потом переполненные разделы:

# Создание bucket'а с разным retention
influx bucket create \
  --name monitoring-short \
  --org mycompany \
  --retention 7d

influx bucket create \
  --name monitoring-long \
  --org mycompany \
  --retention 365d

# Downsampling: агрегация старых данных через Task
influx task create --org mycompany --file downsample.flux

# downsample.flux:
option task = {name: "downsample-5m", every: 1h}

from(bucket: "monitoring")
  |> range(start: -2h, stop: -1h)
  |> filter(fn: (r) => r._measurement == "cpu")
  |> aggregateWindow(every: 5m, fn: mean)
  |> to(bucket: "monitoring-long", org: "mycompany")

Установка и настройка Telegraf

Telegraf ставится на каждый сервер, который хотите мониторить. Работает как агент в фоне, сам собирает метрики и отправляет их в InfluxDB.

# Ubuntu/Debian
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.30.1-1_amd64.deb
sudo dpkg -i telegraf_1.30.1-1_amd64.deb

# CentOS/RHEL
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.30.1-1.x86_64.rpm
sudo yum localinstall telegraf-1.30.1-1.x86_64.rpm

Конфигурация основных плагинов

Основной файл конфигурации — /etc/telegraf/telegraf.conf. Именно здесь описываете, что собирать и куда отправлять:

# /etc/telegraf/telegraf.conf

# Глобальные настройки
[global_tags]
  datacenter = "msk-1"
  role = "webserver"

[agent]
  interval = "10s"
  round_interval = true
  flush_interval = "10s"
  hostname = ""
  omit_hostname = false

# Output: InfluxDB 2.x
[[outputs.influxdb_v2]]
  urls = ["http://monitoring.corp.local:8086"]
  token = "YOUR_API_TOKEN_HERE"
  organization = "mycompany"
  bucket = "monitoring"

# Input: CPU
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

# Input: Memory
[[inputs.mem]]

# Input: Disk
[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

# Input: Disk I/O
[[inputs.diskio]]

# Input: Network
[[inputs.net]]
  interfaces = ["eth0", "ens*"]

# Input: System (uptime, load)
[[inputs.system]]

# Input: Processes
[[inputs.processes]]

Мониторинг сервисов

Telegraf умеет мониторить популярные сервисы через специализированные плагины. На практике чаще всего подключаем следующие:

# /etc/telegraf/telegraf.d/services.conf

# Nginx
[[inputs.nginx]]
  urls = ["http://localhost/nginx_status"]

# PostgreSQL
[[inputs.postgresql]]
  address = "host=localhost user=telegraf password=secret dbname=postgres sslmode=disable"
  databases = ["accounting_1c", "hr_1c"]

# Docker
[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"
  container_names = []
  timeout = "5s"
  perdevice = true
  total = true

# Redis
[[inputs.redis]]
  servers = ["tcp://localhost:6379"]

# HTTP Response (проверка доступности сайтов)
[[inputs.http_response]]
  urls = ["https://itfresh.ru", "https://corp.local"]
  response_timeout = "5s"
  method = "GET"
  follow_redirects = true
  [inputs.http_response.tags]
    type = "website"

# Exec: произвольные скрипты
[[inputs.exec]]
  commands = ["/opt/scripts/check_1c_sessions.sh"]
  timeout = "10s"
  data_format = "influx"

Запуск и первичная проверка — убеждаемся, что агент стартовал и метрики пошли:

# Тест конфигурации
telegraf --config /etc/telegraf/telegraf.conf --test

# Запуск
sudo systemctl enable telegraf
sudo systemctl start telegraf

# Проверка логов
journalctl -u telegraf -f

Установка и настройка Grafana

Grafana — это то, с чем работают люди каждый день. Веб-интерфейс для дашбордов, алертов и разграничения доступа. Если InfluxDB — мозг, то Grafana — глаза.

# Ubuntu/Debian
sudo apt install -y apt-transport-https software-properties-common
wget -q -O - https://apt.grafana.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | \
  sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install grafana

# Запуск
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

# Grafana доступна на http://server:3000
# Логин по умолчанию: admin / admin

Подключение InfluxDB как источника данных

Data Source подключается через Grafana UI или provisioning-файл. Покажу оба варианта — выбирайте под свой процесс:

# /etc/grafana/provisioning/datasources/influxdb.yml
apiVersion: 1
datasources:
  - name: InfluxDB
    type: influxdb
    access: proxy
    url: http://localhost:8086
    jsonData:
      version: Flux
      organization: mycompany
      defaultBucket: monitoring
    secureJsonData:
      token: YOUR_API_TOKEN_HERE

Flux-запрос для дашборда по CPU — с него обычно и начинают:

from(bucket: "monitoring")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r._measurement == "cpu")
  |> filter(fn: (r) => r._field == "usage_idle")
  |> filter(fn: (r) => r.cpu == "cpu-total")
  |> map(fn: (r) => ({r with _value: 100.0 - r._value}))
  |> aggregateWindow(every: v.windowPeriod, fn: mean)
  |> yield(name: "CPU Usage %")

Provisioning дашбордов

Если нужно автоматически разворачивать дашборды — без ручной работы в UI — используйте provisioning. Особенно удобно, когда серверов много:

# /etc/grafana/provisioning/dashboards/default.yml
apiVersion: 1
providers:
  - name: 'default'
    orgId: 1
    folder: 'Infrastructure'
    type: file
    disableDeletion: false
    editable: true
    options:
      path: /var/lib/grafana/dashboards
      foldersFromFilesStructure: true

Не тратьте время на создание дашбордов с нуля. На grafana.com/grafana/dashboards лежат готовые варианты. Для TIG-стека нас устраивают два: ID 928 (Telegraf System) и ID 8159 (Telegraf Host Metrics). Импорт через Grafana UI: Dashboards → Import → вводите ID — и всё готово.

Настройка алертов

Grafana Alerting — это то, что будит вас в три ночи раньше, чем это сделают пользователи. Настраиваете пороговые значения метрик, и при их превышении летит уведомление.

Каналы уведомлений

Telegram как канал для алертов — наш выбор для большинства клиентов. Настройка выглядит так:

# /etc/grafana/provisioning/alerting/notifications.yml
apiVersion: 1
contactPoints:
  - orgId: 1
    name: telegram-ops
    receivers:
      - uid: telegram1
        type: telegram
        settings:
          bottoken: "123456:ABC-DEF1234"
          chatid: "-1001234567890"
          parse_mode: HTML

Правила алертов

Алерты создаются через Grafana UI или provisioning. Вот набор, который мы считаем минимально достаточным для любой инфраструктуры:

  • CPU > 90% более 5 минут — сервер перегружен, пора разбираться что происходит
  • RAM > 95% — критическая нехватка памяти, счёт идёт на минуты
  • Диск > 85% — место заканчивается, нужно чистить или расширять
  • Сервис недоступен — HTTP response timeout, пользователи уже получают ошибки
  • Uptime < 10 минут — сервер только что перезагрузился, плановая или нет?

Flux-запрос для алерта на свободное место на диске — один из самых важных в боевой эксплуатации:

from(bucket: "monitoring")
  |> range(start: -5m)
  |> filter(fn: (r) => r._measurement == "disk")
  |> filter(fn: (r) => r._field == "used_percent")
  |> filter(fn: (r) => r.path == "/")
  |> last()
  |> filter(fn: (r) => r._value > 85.0)

Настройте двухуровневую эскалацию: Warning при 85% — в Telegram, Critical при 95% — туда же, плюс дублирование в SMS или звонок. Звонок в три ночи неприятен, но лучше, чем упавший прод.

Оптимизация и масштабирование

Когда под мониторингом десятки серверов, TIG-стек начинает требовать к себе внимания. Вот с чем мы сталкивались на практике и как это решали:

# Оптимизация InfluxDB: /etc/influxdb/config.toml

[storage]
  # Размер кэша для записи (по умолчанию 1GB)
  cache-max-memory-size = 2147483648
  # Размер WAL для записи
  wal-max-concurrent-writes = 128

[http]
  # Размер пакета для bulk write
  max-body-size = 52428800

# Мониторинг самого InfluxDB
influx ping
influx bucket list --org mycompany

# Размер данных
du -sh /var/lib/influxdb2/engine/data/

По ресурсам сервера мониторинга — цифры из реальных установок, а не теория:

Количество серверовCPURAMДиск
До 102 vCPU4 ГБ50 ГБ SSD
10-504 vCPU8 ГБ200 ГБ SSD
50-2008 vCPU16 ГБ500 ГБ NVMe

Часто задаваемые вопросы

Главное различие с Prometheus — в модели сбора. Telegraf сам push-ит метрики в InfluxDB, Prometheus pull-ит их с экспортеров. Если серверы за NAT или VPN — push-модель заметно проще в жизни. Схема данных тоже разная: InfluxDB хранит time-series с произвольной схемой, Prometheus — в своём формате. Для Kubernetes и облачных сред Prometheus привычнее, для классической серверной инфраструктуры TIG-стек разворачивается быстрее и с меньшим порогом вхождения.

Windows — не проблема. Telegraf имеет нативную сборку, ставится через MSI-пакет, конфигурируется через C:\Program Files\Telegraf\telegraf.conf теми же плагинами, что и на Linux. Плюс Windows-специфичные плагины: win_perf_counters для счётчиков производительности, win_services для состояния служб, win_eventlog для журнала событий. Работает как обычная служба Windows.

Если коротко — не так много, как кажется. При стандартном наборе (CPU, RAM, диск, сеть) с интервалом 10 секунд один сервер даёт около 50-100 МБ в сутки в InfluxDB после сжатия. Добавляете Docker, PostgreSQL, Nginx — объём вырастает до 200-500 МБ. Retention policy и downsampling держат рост под контролем.

InfluxDB 1.x жив и активно используется — особенно там, где уже развёрнут и незачем трогать. Главные отличия от 2.x: синтаксис запросов InfluxQL вместо Flux, аутентификация по логину и паролю, нет встроенного UI. Для новых установок мы рекомендуем 2.x — Flux мощнее, возможностей больше. Grafana работает с обеими версиями без плясок с бубном.

Минимум, который должен быть в любой инсталляции: HTTPS на всех трёх компонентах — без исключений. Токены InfluxDB режьте по ролям: агентам Telegraf — только запись, Grafana — только чтение, и никак иначе. Порты 8086 и 3000 снаружи торчать не должны — файрвол в помощь. В Grafana подключайте LDAP или OAuth, если в компании больше пяти человек: локальные пароли теряются и компрометируются регулярно. Аудит-лог в InfluxDB включите сразу — потом, когда что-то пойдёт не так, скажете себе спасибо. И ещё раз про токены агентов: Telegraf только пишет, читать ему нечего — права на чтение в токене агента это просто лишняя дыра в безопасности.

Нужна помощь с настройкой?

Если не хочется разбираться с этим самостоятельно — команда АйТи Фреш настроит стек под ваши задачи. Больше 15 лет занимаемся именно такими внедрениями, обслуживание от 15 000 ₽/мес.

📞 Связаться с нами
#TIG стек#Telegraf InfluxDB Grafana#мониторинг серверов#InfluxDB 2#Telegraf настройка#Grafana дашборды#мониторинг инфраструктуры#time series database
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды для руководителей IT и системных администраторов. Это не просто теория! Здесь вы найдёте всё: безопасность, 1С, миграции, резервные копии и проверенные лайфхаки из наших реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.