Гид по технологиям

Установка и настройка стека TIG (Telegraf, InfluxDB, Grafana) на Rocky Linux 8

• 9 min read • Мониторинг. • Обновлено 17 Nov 2025
TIG Stack на Rocky Linux 8 — установка и настройка
TIG Stack на Rocky Linux 8 — установка и настройка

Введение

Стек TIG — это сочетание трёх OSS-инструментов для сбора, хранения, визуализации и оповещений по метрикам: Telegraf, InfluxDB и Grafana. Он позволяет собирать метрики (CPU, память, диск, сетевые показатели и другие), хранить их в TSDB и строить удобные дашборды и правила оповещений.

Краткие определения терминов:

  • Telegraf — агент для сбора метрик и отправки их в целевые хранилища.
  • InfluxDB — СУБД временных рядов (Time Series Database) для хранения и запросов по метрикам.
  • Grafana — визуализационный слой и система оповещений, которая подключается к InfluxDB и рисует дашборды.

В этом материале сохранены все команды и фрагменты конфигураций из оригинального руководства; их нужно выполнять под пользователем с правами sudo или root.

Предпосылки

  1. Сервер с Rocky Linux 8.
  2. Ненулевой пользователь с правами sudo/root.
  3. SELinux отключён или настроен заранее (в этом руководстве предполагается отключение).
  4. Обновите систему перед началом:
$ sudo dnf update

Важно: проверяйте версии пакетов и совместимость репозиториев — инструкции в статье рассчитаны на InfluxDB 2.x и Grafana OSS актуальных веток.

Содержание руководства

  • Конфигурация брандмауэра (firewalld)
  • Установка и первоначальная настройка InfluxDB 2.x
  • Создание базы/бакета и токенов в InfluxDB
  • Установка и настройка агента Telegraf
  • Проверка записи метрик в InfluxDB
  • Установка Grafana и подключение InfluxDB как источника данных
  • Создание базовых дашбордов (CPU, RAM, диск)
  • Настройка оповещений и SMTP
  • Отладка, безопасность, альтернативы и чек-листы

Важно

Перед развёртыванием в проде: замените дефолтные пароли, используйте TLS, настройте ротацию токенов и резервное копирование данных.

Шаг 1 — Конфигурация брандмауэра

Rocky Linux по умолчанию использует firewalld. Проверьте состояние:

$ sudo firewall-cmd --state

Ожидаемый вывод:

running

Проверьте какие службы/порты уже разрешены навсегда (permanent):

$ sudo firewall-cmd --permanent --list-services

Пример вывода:

cockpit dhcpv6-client ssh

Разрешите порты для InfluxDB и Grafana:

$ sudo firewall-cmd --permanent --add-port=8086/tcp
$ sudo firewall-cmd --permanent --add-port=3000/tcp

Перезагрузите настройки firewalld:

$ sudo systemctl reload firewalld

Пояснение: порт 8086 — API InfluxDB; 3000 — Grafana. При внешнем доступе рассматривайте ограничение доступа по IP или настройку обратного прокси с TLS.

Шаг 2 — Установка InfluxDB

Создайте файл репозитория для InfluxDB:

$ sudo nano /etc/yum.repos.d/influxdb.repo

Вставьте содержимое:

[influxdb]
name = InfluxDB Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

Сохраните файл. Затем установите InfluxDB 2.x (пакет influxdb2):

$ sudo dnf install influxdb2

Запустите и включите сервис:

$ sudo systemctl enable influxdb
$ sudo systemctl start influxdb

Пояснение: InfluxDB 2.x использует концепции организаций, бакетов и токенов.

Шаг 3 — Первоначальная настройка InfluxDB: организация, бакет, токен

Для первичной настройки используйте CLI-инструмент influx:

$ influx setup
> Welcome to InfluxDB 2.0!
? Please type your primary username navjot
? Please type your password *************
? Please type your password again *************
? Please type your primary organization name howtoforge
? Please type your primary bucket name tigstack
? Please type your retention period in hours, or 0 for infinite 360
? Setup with these parameters?
  Username:          navjot
  Organization:      howtoforge
  Bucket:            tigstack
  Retention Period:  360h0m0s
 Yes
> Config default has been stored in /home/username/.influxdbv2/configs.
User    Organization    Bucket
navjot  howtoforge      tigstack

Альтернатива: можно выполнить ту же настройку через веб-интерфейс по адресу http://:8086/.

Страница входа InfluxDB

Панель управления InfluxDB

Созданный по умолчанию токен имеет полный доступ. Для безопасности создайте новый токен с доступом только к нужной организации и бакету:

  • В левой панели выберите Data -> Tokens.
  • Нажмите Generate Token -> Read/Write Token.
  • Укажите имя токена, выберите бакет tigstack в Read и Write.
  • Сохраните значение токена — он понадобится позже.

Список токенов InfluxDB

Создание токена InfluxDB

Важно: токен отображается только один раз при создании — сохраните его безопасно.

Шаг 4 — Установка Telegraf

Telegraf доступен из того же репозитория InfluxData. Установите агент:

$ sudo dnf install telegraf

Запустите и включите сервис:

$ sudo systemctl enable telegraf
$ sudo systemctl start telegraf

Telegraf — плагинный агент. Типы плагинов:

  1. Input plugins — собирают метрики.
  2. Processor plugins — трансформируют и фильтруют метрики.
  3. Aggregator plugins — агрегируют метрики.
  4. Output plugins — отправляют метрики в назначенные хранилища (InfluxDB и др.).

Конф файл Telegraf: /etc/telegraf/telegraf.conf. Чтобы отправлять метрики в InfluxDB v2, включите секцию outputs.influxdb_v2 и вставьте токен:

$ sudo nano /etc/telegraf/telegraf.conf

Найдите и раскомментируйте блок [[outputs.influxdb_v2]] и пропишите:

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "$INFLUX_TOKEN"
  organization = "howtoforge"
  bucket = "tigstack"

Вместо $INFLUX_TOKEN подставьте ранее созданный токен.

В конфигурации входов (INPUT PLUGINS) по умолчанию включены несколько полезных плагинов. В исходном файле вы увидите примерно такой набор:

# Read metrics about cpu usage
[[inputs.cpu]]
  ## Whether to report per-cpu stats or not
  percpu = true
  ## Whether to report total system cpu stats or not
  totalcpu = true
  ## If true, collect raw CPU time metrics
  collect_cpu_time = false
  ## If true, compute and report the sum of all non-idle CPU states
  report_active = false

# Read metrics about disk usage by mount point
[[inputs.disk]]
  ## By default stats will be gathered for all mount points.
  ## Set mount_points will restrict the stats to only the specified mount points.
  # mount_points = ["/"]

  ## Ignore mount points by filesystem type.
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

[[inputs.diskio]]
....
....

# Get kernel statistics from /proc/stat
[[inputs.kernel]]
  # no configuration


# Read metrics about memory usage
[[inputs.mem]]
  # no configuration
  
# Get the number of processes and group them by status
[[inputs.processes]]
  # no configuration


# Read metrics about swap memory usage
[[inputs.swap]]
  # no configuration


# Read metrics about system load & uptime
[[inputs.system]]
  ## Uncomment to remove deprecated metrics.

Telegraf может собирать метрики из множества источников: Docker, Kubernetes, Nginx, MySQL, PostgreSQL, Redis, RabbitMQ и др. Добавьте необходимые плагины по требованиям вашей инфраструктуры.

Сохраните файл и перезапустите Telegraf:

$ sudo systemctl restart telegraf

Шаг 5 — Проверка записи метрик в InfluxDB

Откройте InfluxDB UI -> Data -> Buckets -> tigstack. Вы должны увидеть поток метрик от Telegraf.

Обзор данных InfluxDB

Нажмите на имя бакета, затем выбирайте значения в фильтре _measurement и нажмите Submit — график сверху отобразит данные.

Графики в InfluxDB

Если данных нет:

  • Убедитесь, что Telegraf запущен и подключён к localhost:8086.
  • Проверьте логи Telegraf: sudo journalctl -u telegraf -n 200 –no-pager
  • Проверьте права токена и правильность organisation/bucket в outputs.influxdb_v2.

Шаг 6 — Установка Grafana

Создайте репозиторий Grafana:

$ sudo nano /etc/yum.repos.d/grafana.repo

Вставьте:

[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

Установите Grafana и запустите сервис:

$ sudo dnf install grafana
$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server

Шаг 7 — Подключение источника данных в Grafana

Откройте Grafana по адресу: http://:3000.

Страница входа Grafana

Войдите под admin/admin и смените пароль.

Смена пароля Grafana

На главной странице нажмите Add your first data source -> InfluxDB.

Главная Grafana

Выберите Flux как язык запросов (Flux проще для InfluxDB 2.x и полнофункционален для v2):

Выбор языка запросов Grafana

Заполните поля:

  • URL: http://localhost:8086
  • Access: Server
  • Basic Auth: User: navjot, Password: (оставьте пустым, если используете токен)

Детали HTTP для InfluxDB в Grafana

Далее укажите детали InfluxDB:

  • Organization: howtoforge
  • Token: <ваш-токен>
  • Default Bucket: tigstack

Детали InfluxDB в Grafana

Нажмите Save and test — вы должны получить подтверждение успешного подключения.

Успешное сохранение источника данных

Шаг 8 — Создание дашбордов в Grafana

Создайте новый Dashboard: + -> Dashboards -> Add an empty panel.

Кнопка создания дашборда

В панели запроса вставьте Flux-запрос для CPU (пример из оригинала):

from(bucket: "NAMEOFYOUBUCKET")
  |> 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")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 }))
  |> toFloat()
  |> yield(name: "mean")

Замените NAMEOFYOUBUCKET на tigstack и NAMEOFYOURHOST на имя из /etc/hostname.

Нажмите Apply, дайте панели имя.

Создание панели Grafana

Аналогично создайте панели для памяти и диска, используя следующие запросы:

RAM:

from(bucket: "NAMEOFYOUBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

HDD:

from(bucket: "NAMEOFYOURBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "disk")
  |> filter(fn: (r) => r["_field"] == "used")
  |> filter(fn: (r) => r["path"] == "/")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value / 1000000.0 }))
  |> toFloat()  
  |> yield(name: "mean")

Совет: в Grafana удобнее сначала получить пример запроса в InfluxDB Explore, затем скопировать в панель Grafana.

Explore в InfluxDB

Кнопка Script Editor в InfluxDB

Шаг 9 — Настройка оповещений и уведомлений

Настройка шлюзов оповещений: Grafana поддерживает Email, Slack, Telegram, Microsoft Teams, и др. В этом руководстве — Email через SMTP.

Откройте конфиг Grafana:

$ sudo nano /etc/grafana/grafana.ini

Найдите секцию [smtp] и раскомментируйте / заполните параметры:

[smtp]
enabled = true
host = email-smtp.us-west-2.amazonaws.com:587
user = YOURUSERNAME
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = YOURUSERPASSWORD
;cert_file =
;key_file =
;skip_verify = false
from_address = [email protected]
from_name = HowtoForge Grafana
;ehlo_identity = dashboard.example.com
;startTLS_policy = NoStartTLS

Сохраните и перезапустите Grafana:

$ sudo systemctl restart grafana-server

В интерфейсе Grafana: Alerting -> Notification channels -> Add Channel. Выберите Email и протестируйте.

Добавление канала оповещений Grafana

Настройка уведомлений по Email

Далее создайте правило оповещения на уровне панели: Dashboard -> Manage -> выберите дашборд -> Edit панели -> Alert Panel -> Create Alert.

Создание оповещения Grafana

Правило состоит из:

  • Названия правила
  • Evaluate every — интервал оценки
  • For — время, через которое сработает оповещение при нарушении
  • Conditions — логика на основе запросов и агрегатных функций

Пример формулы:

avg() OF query(A, 15m, now) IS BELOW 14

Параметры No Data & Error Handling задают поведение при отсутствии данных или ошибках запроса.

Добавьте канал уведомлений и проверьте Test rule -> Apply.

Отладка и типичные проблемы

  • Telegraf не отправляет данные: проверьте /var/log/telegraf/* и journalctl, проверьте доступность http://localhost:8086.
  • Grafana не показывает данные: проверьте корректность токена, organisation и bucket; в Grafana откройте Explore и выполните тестовый запрос.
  • Неверный Timezone/диапазон: в панели Grafana проверьте временной диапазон и параметры aggregateWindow в Flux.
  • Большие задержки при агрегации: уменьшите retention или используйте aggregateWindow с createEmpty=false.

Безопасность и эксплуатация (Hardening)

  • Трафик InfluxDB и Grafana стоит защищать TLS (HTTPS). Для Grafana включите server.ssl в /etc/grafana/grafana.ini или настройте обратный прокси (nginx/Apache) с TLS.
  • Не храните токены в общедоступных конфигурациях. Используйте менеджеры секретов (Vault) или файл с жёсткими правами (600).
  • Ротация токенов: планируйте регулярную ротацию и проверку прав доступа.
  • Ограничьте доступ к портам через брандмауэр и/или VPN.
  • Резервные копии: резервируйте конфигурации Grafana, дамп метаданных InfluxDB и, при необходимости, данные бакетов (или экспорт через influx backup).
  • Права в Grafana: настройте пользователей и роли (Viewer/Editor/Admin) по принципу наименьших привилегий.

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

  • Установите разумный retention (срок хранения) для бакетов в InfluxDB, чтобы не переполнять диск.
  • Разделяйте бакеты по типу данных и по SLA (например, высокочастотные метрики — короткий retention).
  • При больших объёмах данных используйте кластерный вариант InfluxDB (Enterprise) или горизонтальное шардирование данных.

Альтернативы и когда стоит выбрать другую архитектуру

Когда стек TIG может не подойти:

  • Вам нужны высоко-семантические метрики и мульти-тенантность на больших объёмах — рассмотрите Prometheus + Thanos или Cortex.
  • Если уже в экосистеме Kubernetes и вы хотите pull-модель — Prometheus удобнее.
  • Для логов лучше использовать ELK (Elasticsearch, Logstash, Kibana).

Альтернативные подходы:

  • Prometheus (scrape) + Grafana — для monitoring-инфраструктуры и быстрого алертинга.
  • VictoriaMetrics как быстрое хранилище TSDB с Grafana.
  • TICK (Telegraf, InfluxDB 1.x, Chronograf, Kapacitor) — старый стек InfluxData для тех, кто использует InfluxQL и Kapacitor.

Модель принятия решений (кратко)

  • Нужна push-модель (агенты на хостах) -> Telegraf + InfluxDB подходит.
  • Нужна pull-модель (scrape) -> Prometheus.
  • Хочется готовых визуализаций и простого алертинга -> Grafana.
flowchart TD
  A[Нужен мониторинг] --> B{Push или Pull}
  B -->|Push| C[Telegraf -> InfluxDB]
  B -->|Pull| D[Prometheus]
  C --> E[Grafana]
  D --> E
  E --> F{Требуется долгосрочное хранение?}
  F -->|Да| G[Добавить long-term storage или кластеризацию]
  F -->|Нет| H[Стандартное хранение с retention]

Чек-лист для развёртывания (роль-ориентированный)

Администратор системы:

  • Обновил систему: sudo dnf update
  • Отключил/настроил SELinux
  • Открыл порты 8086 и 3000 с ограничениями доступа
  • Настроил TLS/обратный прокси при внешнем доступе

SRE/Отвечающий за мониторинг:

  • Установил InfluxDB и настроил организацию и бакет
  • Создал ограниченный токен для Telegraf
  • Установил Telegraf и включил необходимые input-плагины
  • Проверил поступление метрик в InfluxDB
  • Подключил Grafana, создал дашборды и оповещения

Разработчик/DevOps:

  • Добавил мониторинг для приложений (Exporter/Telegraf plugin)
  • Протестировал алерты и каналы уведомлений
  • Настроил тесты/acceptance для метрик (см. ниже)

Критерии приёмки

  • Telegraf корректно отправляет метрики на InfluxDB и видно последние 5–15 минут данных.
  • Grafana подключена к InfluxDB и отображает корректные графики CPU/Memory/Disk.
  • Оповещения приходят на тестовый email при эмуляции нарушения условия.
  • Токены и пароли не доступны публично и имеют минимальные привилегии.

Шаблоны и сниппеты

Пример минимальной секции outputs.influxdb_v2 для /etc/telegraf/telegraf.conf:

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "YOUR_INFLUX_TOKEN"
  organization = "your_org"
  bucket = "your_bucket"

Пример systemd комманд для проверки статусов:

$ sudo systemctl status influxdb
$ sudo systemctl status telegraf
$ sudo systemctl status grafana-server

Тест-кейсы и приёмочные сценарии

  1. Проверка записи метрик:
    • Условие: Telegraf запущен.
    • Ожидаемый результат: новые точки появляются в бакете tigstack в течение 1–2 минут.
  2. Проверка дашборда Grafana:
    • Условие: источник данных сохранён.
    • Ожидаемый результат: Flux-запросы выполняются, панели отображают графики.
  3. Проверка уведомлений:
    • Условие: создано правило алерта и канал Email.
    • Ожидаемый результат: при эмуляции нарушения приходит тестовое письмо.

Частые ошибки и как их исправить

  • Ошибка “permission denied” при записи в InfluxDB: проверьте токен, организацию и бакет в конфиге Telegraf.
  • Пустые графики в Grafana: откройте Explore в Grafana, выполните Flux-запрос вручную, проверьте диапазон дат.
  • SMTP не работает: проверьте доступность SMTP-сервера, корректность учётных данных и логи Grafana.

Частые вопросы

Как проверить, что Telegraf использует нужный токен?

Проверьте /etc/telegraf/telegraf.conf — секция outputs.influxdb_v2 должна содержать token. Также проверьте журналы Telegraf на наличие ошибок авторизации.

Можно ли использовать InfluxDB 1.8 вместо 2.x?

Да, но API и модель хранения отличаются (InfluxQL vs Flux, отсутствие концепции organisasi/бакетов в v1). Для новых установок рекомендуется InfluxDB 2.x.

Как сделать Grafana доступной по HTTPS?

Рекомендуется настроить обратный прокси (nginx) с TLS либо включить server.ssl в /etc/grafana/grafana.ini.

Как хранить метрики длительное время без потери производительности?

Разделяйте бакеты по retention и по частоте метрик; используйте downsampling и агрегированные бакеты для long-term хранения.


Заключение

Вы установили и настроили стек TIG (Telegraf, InfluxDB, Grafana) на одном сервере Rocky Linux 8: настроили сбор метрик, подключили Grafana, создали дашборды и настроили оповещения по Email. Далее рекомендуем внедрить TLS, автоматизировать развёртывание и внедрить процессы мониторинга и ротации токенов.

Если возникли вопросы — опишите шаг, на котором остановились, и приведите логи команд (journalctl для сервисов, вывод influx/telegraf). Удачи с мониторингом!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро