Установка и настройка стека TIG (Telegraf, InfluxDB, Grafana) на Rocky Linux 8
Введение
Стек TIG — это сочетание трёх OSS-инструментов для сбора, хранения, визуализации и оповещений по метрикам: Telegraf, InfluxDB и Grafana. Он позволяет собирать метрики (CPU, память, диск, сетевые показатели и другие), хранить их в TSDB и строить удобные дашборды и правила оповещений.
Краткие определения терминов:
- Telegraf — агент для сбора метрик и отправки их в целевые хранилища.
- InfluxDB — СУБД временных рядов (Time Series Database) для хранения и запросов по метрикам.
- Grafana — визуализационный слой и система оповещений, которая подключается к InfluxDB и рисует дашборды.
В этом материале сохранены все команды и фрагменты конфигураций из оригинального руководства; их нужно выполнять под пользователем с правами sudo или root.
Предпосылки
- Сервер с Rocky Linux 8.
- Ненулевой пользователь с правами sudo/root.
- SELinux отключён или настроен заранее (в этом руководстве предполагается отключение).
- Обновите систему перед началом:
$ 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://.


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


Важно: токен отображается только один раз при создании — сохраните его безопасно.
Шаг 4 — Установка Telegraf
Telegraf доступен из того же репозитория InfluxData. Установите агент:
$ sudo dnf install telegraf
Запустите и включите сервис:
$ sudo systemctl enable telegraf
$ sudo systemctl start telegraf
Telegraf — плагинный агент. Типы плагинов:
- Input plugins — собирают метрики.
- Processor plugins — трансформируют и фильтруют метрики.
- Aggregator plugins — агрегируют метрики.
- 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.

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

Если данных нет:
- Убедитесь, что 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://.

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

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

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

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

Далее укажите детали InfluxDB:
- Organization: howtoforge
- Token: <ваш-токен>
- Default Bucket: tigstack

Нажмите 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, дайте панели имя.

Аналогично создайте панели для памяти и диска, используя следующие запросы:
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.


Шаг 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 и протестируйте.


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

Правило состоит из:
- Названия правила
- 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
Тест-кейсы и приёмочные сценарии
- Проверка записи метрик:
- Условие: Telegraf запущен.
- Ожидаемый результат: новые точки появляются в бакете tigstack в течение 1–2 минут.
- Проверка дашборда Grafana:
- Условие: источник данных сохранён.
- Ожидаемый результат: Flux-запросы выполняются, панели отображают графики.
- Проверка уведомлений:
- Условие: создано правило алерта и канал 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). Удачи с мониторингом!
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента