Мониторинг сервера без инструментов - это работа вслепую. Вы не знаете, что происходит с CPU под нагрузкой, когда закончится место на диске и какой интерфейс генерирует аномальный трафик. Стек TIG - Telegraf, InfluxDB и Grafana - решает эту задачу. Это легковесная альтернатива Prometheus, которая не требует развертывания Kubernetes или сложной экосистемы экспортеров. Один бинарник Telegraf собирает метрики, InfluxDB эффективно хранит временные ряды, а Grafana строит наглядные дашборды.
В этой статье вы пройдете полный путь: от установки InfluxDB 2.x до создания первого дашборда с графиками загрузки CPU, использования дисков и сетевого трафика. Все конфигурации проверены на практике. Вы получите работающий мониторинг за 30-40 минут.
Если вам нужна готовая система с алертингом и оповещениями в Telegram или Slack, обратите внимание на стек Prometheus + Grafana. Там мы разбираем полный цикл с Alertmanager. А здесь сосредоточимся на TIG - связке, которую ценят за простоту конфигурации и удобство работы с временными рядами.
Зачем нужен стек TIG и когда он лучше Prometheus
Prometheus - стандарт де-факто для облачных инфраструктур. Pull-модель сбора, Service Discovery, мощный язык PromQL. Но у этой гибкости есть цена. Prometheus требует настройки экспортеров для каждого типа метрик, отдельного Alertmanager для оповещений и долгосрочного хранилища при масштабировании. Для мониторинга десятка серверов или VPS это избыточно.
TIG-стек решает задачу иначе. Telegraf - единый агент сбора с сотнями встроенных плагинов. Он умеет собирать системные метрики, данные из баз, очередей сообщений и приложений без дополнительных экспортеров. InfluxDB - специализированная база для временных рядов с собственным языком запросов Flux, который дает больше возможностей для агрегации и трансформации данных, чем PromQL. Grafana подключается к InfluxDB напрямую и строит дашборды любой сложности.
Выбирайте TIG, если:
- У вас небольшой или средний парк серверов - до 50-100 узлов
- Нужна простая push-модель: агенты сами отправляют метрики в базу
- Требуется гибкая обработка данных на стороне хранилища - Flux позволяет делать агрегации и джойны без промежуточных инструментов
- Вы цените единую конфигурацию агента вместо зоопарка экспортеров
Prometheus оправдан в Kubernetes-кластерах, микросервисных архитектурах и средах с динамическим Service Discovery. Для детального сравнения подходов к мониторингу читайте наш разбор ключевых инженерных метрик - там мы показываем, какие показатели важны на старте и как их интерпретировать.
Архитектура мониторинга: как Telegraf, InfluxDB и Grafana работают вместе
Поток данных в стеке TIG линеен и прозрачен. Агент Telegraf запускается на каждом сервере, который нужно мониторить. Он опрашивает системные счетчики через плагины ввода - CPU, память, диски, сеть, процессы - и формирует метрики в формате Line Protocol. Каждая метрика содержит измерение (measurement), теги для фильтрации и поля со значениями.
Собранные данные отправляются в InfluxDB. Агент подключается к HTTP API базы, аутентифицируется по токену и пишет метрики в указанный бакет. Бакет - это логический контейнер для временных рядов с настраиваемым сроком хранения. InfluxDB 2.x использует движок TSM для эффективного сжатия и быстрых запросов по времени.
Grafana выступает слоем визуализации. Она подключается к InfluxDB как к источнику данных через Flux-запросы. Вы строите панели с графиками, таблицами и единичными показателями, комбинируете их в дашборды и настраиваете автообновление. Схема проста: Telegraf собирает, InfluxDB хранит, Grafana показывает.
Для кластерных сред с высокими требованиями к доступности архитектура усложняется. В нашем руководстве по observability в Kubernetes мы разбираем, как объединить метрики, логи и трейсы в едином стеке с корреляцией данных в Grafana.
Установка и настройка InfluxDB 2.x
Начнем с хранилища. InfluxDB 2.x доступна через официальные репозитории для Debian/Ubuntu и RHEL/CentOS. Мы рассмотрим установку на Ubuntu 22.04 - для других дистрибутивов шаги аналогичны, отличаются только пути к конфигурациям.
Добавьте ключ и репозиторий InfluxData:
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c
cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
Установите пакет и запустите службу:
sudo apt update
sudo apt install influxdb2
sudo systemctl enable --now influxdb
После запуска веб-интерфейс доступен на порту 8086. Откройте http://your-server-ip:8086 и выполните начальную настройку: задайте имя пользователя, пароль, название организации и первый бакет. Эти данные понадобятся для подключения Telegraf и Grafana.
Для серверов с ограниченными ресурсами рассмотрите облачные решения. Timeweb Cloud предоставляет готовые VDS с предустановленными шаблонами мониторинга, что экономит время на развертывание инфраструктуры.
Создание бакета для метрик сервера
Бакет - это контейнер для ваших метрик. При начальной настройке вы уже создали первый бакет. Для production-среды рекомендую создать отдельный бакет с явно заданной политикой хранения. Через веб-интерфейс перейдите в раздел Data → Buckets → Create Bucket. Укажите имя, например, server_metrics, и задайте retention period. Для системных метрик достаточно 30 дней, если вы не строите долгосрочную аналитику.
Создайте токен доступа с правами на запись в этот бакет. В разделе Data → Tokens → Generate Token выберите Custom API Token. Предоставьте права на чтение и запись для бакета server_metrics. Скопируйте токен - он отобразится только один раз. Этот токен Telegraf будет использовать для аутентификации.
Проверьте работоспособность через CLI. Выполните запрос к API InfluxDB:
curl -H "Authorization: Token YOUR_TOKEN" http://localhost:8086/health
Ответ с кодом 200 и статусом "ready" подтверждает, что база работает и принимает подключения.
Настройка Telegraf для сбора метрик CPU, дисков и сети
Telegraf - агент, который будет запущен на каждом целевом сервере. Установите его из того же репозитория InfluxData:
sudo apt install telegraf
Конфигурационный файл находится по пути /etc/telegraf/telegraf.conf. Стандартный файл содержит сотни закомментированных плагинов. Мы создадим минимальную рабочую конфигурацию. Сделайте резервную копию оригинала и откройте редактор:
sudo cp /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.bak
sudo nano /etc/telegraf/telegraf.conf
Замените содержимое на базовую структуру с агентом, плагинами ввода и выводом в InfluxDB:
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
hostname = ""
omit_hostname = false
[[outputs.influxdb_v2]]
urls = ["http://localhost:8086"]
token = "YOUR_INFLUXDB_TOKEN"
organization = "YOUR_ORG_NAME"
bucket = "server_metrics"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.net]]
interfaces = ["eth0", "ens*"]
[[inputs.mem]]
[[inputs.system]]
[[inputs.diskio]]
Разберем ключевые параметры. Секция agent задает интервал сбора - 10 секунд, размер пакета и буфера. output определяет, куда отправлять данные: URL вашего сервера InfluxDB, токен, организацию и бакет. Подставьте свои значения из начальной настройки.
Плагины ввода собирают конкретные метрики. Мы включили cpu, disk, net, mem, system и diskio - этого достаточно для полной картины состояния сервера. Дополнительно Telegraf поддерживает плагины для Nginx, PostgreSQL, Redis и сотен других сервисов. Полный список доступен в официальной документации InfluxData.
Конфигурация плагина CPU
Плагин cpu собирает метрики загрузки процессора из /proc/stat. Параметр percpu = true включает сбор по каждому ядру отдельно - это помогает заметить неравномерную нагрузку. totalcpu = true добавляет агрегированные значения по всем ядрам. Поля, которые попадут в InfluxDB: usage_idle, usage_system, usage_user, usage_iowait, usage_irq и другие.
Метрика usage_idle показывает процент времени, которое процессор провел в бездействии. Это ключевой показатель: если usage_idle стабильно ниже 10%, процессор перегружен. usage_iowait указывает на ожидание операций ввода-вывода - высокие значения говорят о проблемах с дисковой подсистемой.
Конфигурация плагина дисков
Плагин disk мониторит использование файловых систем. Параметр ignore_fs исключает виртуальные и временные ФС, которые не несут полезной информации для мониторинга. Плагин собирает поля: total (общий объем), free (свободно), used (занято), used_percent (процент заполнения), inodes_total, inodes_free, inodes_used.
used_percent - критический показатель. При достижении 80% на разделе с логами или базой данных система может стать нестабильной. Настройте алерт в Grafana на этот порог. inodes_free важен для серверов с большим количеством мелких файлов: можно исчерпать inodes при наличии свободного места.
Конфигурация плагина сети
Плагин net собирает статистику сетевых интерфейсов из /proc/net/dev. Параметр interfaces фильтрует конкретные интерфейсы - укажите свои. Подстановка ens* захватит все интерфейсы с префиксом ens. Основные поля: bytes_sent, bytes_recv, packets_sent, packets_recv, err_in, err_out, drop_in, drop_out.
bytes_sent и bytes_recv показывают объем переданного и принятого трафика с момента запуска системы. В Grafana эти значения агрегируют в скорость передачи данных - производную по времени. Ошибки и дропы пакетов указывают на проблемы с сетевым стеком или физическим подключением.
После редактирования конфигурации проверьте синтаксис и перезапустите агент:
sudo telegraf --config /etc/telegraf/telegraf.conf --test
sudo systemctl restart telegraf
sudo journalctl -u telegraf -f
Флаг --test выполняет однократный сбор метрик и выводит их в stdout - вы увидите, какие данные попадут в InfluxDB. Логи покажут успешное подключение к базе или ошибки, если они есть.
Подключение InfluxDB к Grafana и создание первого дашборда
Grafana завершает стек. Установите её из официального репозитория:
sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
sudo systemctl enable --now grafana-server
Веб-интерфейс Grafana доступен на порту 3000. Стандартные учетные данные: admin/admin. При первом входе система предложит сменить пароль.
Добавьте источник данных InfluxDB. Перейдите в Connections → Data Sources → Add data source. Выберите InfluxDB. В настройках укажите:
- Query Language: Flux
- URL: http://localhost:8086
- Organization: название вашей организации из InfluxDB
- Token: токен доступа
- Default Bucket: server_metrics
Нажмите Save & Test. Grafana проверит подключение и сообщит об успехе. Теперь можно строить дашборды.
Написание первого Flux-запроса для графика CPU
Flux - функциональный язык запросов InfluxDB. Он заменил InfluxQL в версии 2.x и дает больше возможностей для обработки данных. Создайте новую панель в дашборде и вставьте запрос:
from(bucket: "server_metrics")
|> range(start: -15m)
|> filter(fn: (r) => r["_measurement"] == "cpu")
|> filter(fn: (r) => r["_field"] == "usage_idle")
|> filter(fn: (r) => r["cpu"] == "cpu-total")
|> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
|> map(fn: (r) => ({ r with _value: 100.0 - r._value }))
Разберем по шагам. from выбирает бакет. range задает временной интервал - последние 15 минут. Три фильтра отбирают измерение cpu, поле usage_idle и агрегированное значение cpu-total. aggregateWindow усредняет метрики по минутам, чтобы график был читаемым. map преобразует idle в utilization: вычитает значение из 100. В результате вы получаете график загрузки CPU в процентах.
Для графика использования диска замените фильтры на измерение disk и поле used_percent. Для сетевого трафика используйте измерение net, поля bytes_sent и bytes_recv с агрегацией derivative для получения скорости в байтах в секунду.
Готовый дашборд можно импортировать из сообщества Grafana. Перейдите в Dashboards → Import, введите ID 928 (Telegraf System Dashboard) или 1443 (Node Exporter Full - адаптируйте под Telegraf). Система загрузит набор панелей и предложит выбрать источник данных. Через минуту вы получите полноценный дашборд с графиками CPU, памяти, дисков, сети и системных метрик.
Если ваша инфраструктура включает специализированные сервисы, посмотрите наше руководство по созданию единых дашбордов с интеграцией Prometheus, InfluxDB и Elasticsearch. Там мы разбираем продвинутые сценарии визуализации для комплексных систем.
Типичные ошибки и их решение
При настройке стека TIG встречаются повторяющиеся проблемы. Вот самые частые и способы их устранения.
Telegraf не подключается к InfluxDB - ошибка 401 Unauthorized. Причина: неверный токен или организация. Проверьте токен в конфигурации Telegraf. Убедитесь, что в InfluxDB токен имеет права на запись в целевой бакет. Выполните тестовый запрос curl с этим токеном к /api/v2/buckets - если возвращается 401, токен недействителен.
Grafana не видит данные - пустые графики. Причина: несовпадение временных зон или неправильный бакет по умолчанию. В настройках источника данных Grafana проверьте Default Bucket. В панели убедитесь, что диапазон времени (range) перекрывает период, за который есть данные. Используйте Data Explorer в Grafana для отладки - он покажет сырые данные из InfluxDB.
Метрики дисков отсутствуют для некоторых разделов. Причина: файловая система попала в ignore_fs. Проверьте конфигурацию плагина disk в Telegraf. Выполните df -T на сервере, чтобы узнать тип ФС, и уберите его из списка исключений, если раздел нужен для мониторинга.
Высокая нагрузка на InfluxDB при большом количестве агентов. Причина: слишком частый интервал сбора или избыточные плагины. Увеличьте interval в секции agent до 30 или 60 секунд. Отключите плагины, метрики которых не используются в дашбордах. Настройте политику хранения - данные старше 30 дней удаляются автоматически и снижают нагрузку на хранилище.
Grafana показывает ошибку «InfluxDB Error: unauthorized access». Причина: токен в Grafana не имеет прав на чтение. В InfluxDB создайте отдельный токен с правами чтения для Grafana. Не используйте один токен для Telegraf и Grafana - это нарушает принцип минимальных привилегий.
Заключение: что дальше?
Вы развернули работающий стек мониторинга. Telegraf собирает метрики CPU, памяти, дисков и сети каждые 10 секунд. InfluxDB хранит временные ряды с настроенной политикой хранения. Grafana показывает состояние сервера на наглядных дашбордах. Это база, которую можно расширять под свои задачи.
Следующие шаги для усиления мониторинга:
- Настройте алертинг в Grafana. Создайте правила для критических порогов: CPU > 90% в течение 5 минут, диск заполнен на 85%, сетевые ошибки > 0. Подключите каналы уведомлений - Telegram, Slack, Email.
- Добавьте плагины Telegraf для ваших сервисов: nginx, postgresql, redis, docker. Каждый плагин дает специфичные метрики, которые помогают находить узкие места на уровне приложений.
- Изучите продвинутые возможности Flux: джойны между измерениями, скользящие средние, прогнозирование на основе исторических данных.
- Настройте мониторинг кластерных решений. В статье по мониторингу маршрутизации мы разбираем метрики сетевой инфраструктуры и способы их визуализации.
Стек TIG - это фундамент. Начните с базового мониторинга, который вы настроили сегодня, и наращивайте покрытие по мере роста инфраструктуры. Система, которую вы построили, уже экономит вам время: вместо ручной проверки серверов вы видите состояние всей инфраструктуры на одном экране.