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 — значительное обновление по сравнению с 1.x: встроенный UI, API-токены вместо паролей, язык Flux вместо InfluxQL.

# 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

Управление сроками хранения данных для экономии дискового пространства:

# Создание 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 устанавливается на каждый мониторируемый сервер как агент сбора метрик.

# 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 предоставляет веб-интерфейс для создания дашбордов и управления алертами.

# 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 дашбордов

Для автоматического развёртывания дашбордов используйте 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)

Настройте escalation policy: Warning при 85%, Critical при 95%. Для Critical — дублирование уведомления в 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

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

Основное различие — модель сбора данных. Telegraf push-ит метрики в InfluxDB, а Prometheus pull-ит (скрейпит) метрики с экспортеров. Push-модель проще для мониторинга серверов за NAT или VPN. InfluxDB хранит данные в формате time-series с произвольной схемой, Prometheus — в собственном формате. Для облачных и контейнерных сред Prometheus предпочтительнее, для классической серверной инфраструктуры TIG-стек проще в развёртывании.

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

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

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

Основные меры: используйте HTTPS для всех компонентов (TLS-сертификаты), ограничьте API-токены InfluxDB минимальными правами (отдельный токен для записи агентов, отдельный для чтения Grafana), закройте порты 8086 и 3000 файрволом от внешнего доступа, настройте LDAP/OAuth аутентификацию в Grafana, включите аудит-лог в InfluxDB. Telegraf отправляет данные только на запись — токен агента не должен иметь прав на чтение.

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

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

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

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

загрузка...