Grafana: дашборды мониторинга серверов и сервисов в корпоративной сети
Семёнов Евгений Сергеевич, директор АйТи Фреш. Grafana стоит у меня на каждом проекте — от домашнего homelab до серверных ферм клиентов с сотней хостов. За 15 лет работы я понял одно: без нормальных дашбордов администратор работает вслепую, а с правильно настроенной Grafana проблема ловится за минуты до жалоб пользователей. В этой статье расскажу, как развернуть Grafana на Debian за полчаса, подключить Prometheus и InfluxDB, собрать первый дашборд и настроить алерты в Telegram.
Что умеет Grafana и почему она так популярна
Grafana — визуализация временных рядов. Сама она ничего не собирает: задача фронта — красиво показать данные из внешнего хранилища. Поддерживаются Prometheus, InfluxDB, Graphite, Elasticsearch, PostgreSQL, MySQL, Loki, Tempo, Zabbix через плагин, и десятки других источников.
Почему я выбираю Grafana для каждого нового проекта:
- Гибкие панели — graph, gauge, bar chart, table, heatmap, state timeline, status history.
- Переменные в дашбордах — один шаблон на сотню хостов, выбор из выпадающего списка.
- Встроенный алертинг с каналами в Telegram, Slack, email, webhook.
- Provisioning через YAML-файлы — дашборды и datasource кладутся в git.
- Grafana Cloud и готовые дашборды — тысячи шаблонов на официальном портале.
У нас на практике Grafana заменила три поколения старых кустарных решений на базе Nagios, Cacti и php-скриптов. Один унифицированный интерфейс для всей команды.
Установка Grafana OSS на Debian 12
Ставлю из официального репозитория APT — это гарантирует обновления и работу с systemd. На виртуалке 2 vCPU / 4 ГБ RAM / 30 ГБ диска хватает с запасом для офиса на 50 серверов.
sudo apt install -y apt-transport-https software-properties-common wget
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor \
| sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
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 -y grafana
sudo systemctl enable --now grafana-server
После запуска Grafana слушает на 3000 порту. Первый вход — admin/admin, сразу меняйте пароль. Я всегда прячу Grafana за Nginx с basic auth на /api/health и TLS-сертификатом от Let's Encrypt — это закрывает её от автоматических сканеров.
Подключаем Prometheus как источник данных
Prometheus — классическая связка для Grafana. Он опрашивает экспортёры (Node Exporter на Linux, Windows Exporter, Blackbox, MySQL, Postgres) по HTTP и хранит метрики локально. Конфиг prometheus.yml минимально выглядит так:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['srv01:9100','srv02:9100','srv03:9100']
- job_name: 'windows'
static_configs:
- targets: ['win-fs01:9182','win-dc01:9182']
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets: ['https://portal.corp.ru','https://1c.corp.ru']
В Grafana идём Connections → Data sources → Add data source → Prometheus, указываем URL http://prometheus:9090 и жмём Save & Test. При зелёной плашке Data source is working — можно строить панели.
Первый дашборд: импорт из официальной библиотеки
Я не трачу время на рисование с нуля того, что уже нарисовали тысячи инженеров. Захожу на grafana.com/grafana/dashboards, выбираю готовый шаблон, копирую ID и импортирую в свою Grafana.
| ID | Дашборд | Назначение |
|---|---|---|
| 1860 | Node Exporter Full | Linux-серверы: CPU, RAM, диски, сеть |
| 14510 | Windows Exporter | Windows-серверы, службы, диски |
| 9628 | PostgreSQL Database | Соединения, транзакции, блокировки |
| 7362 | MySQL Overview | Запросы, репликация, InnoDB |
| 1471 | Windows Server Active Directory | Репликация AD, LDAP-операции |
| 11074 | Node Exporter Dashboard | Краткий обзор всех Linux-нод |
Dashboards → Import → вставляете ID → Load → выбираете datasource Prometheus → Import. Через 10 секунд у вас дашборд с метриками со всех хостов. Дальше дело вкуса — дублируете, правите заголовки, удаляете лишние панели.
Переменные: один дашборд на все хосты
Хардкодить имена серверов в каждой панели — прошлый век. Я всегда делаю переменную $host с запросом label_values(node_uname_info, instance), и одним дашбордом смотрю любой сервер из выпадающего списка.
# Пример PromQL-запроса в панели
rate(node_cpu_seconds_total{instance="$host",mode!="idle"}[5m])
# Для диска
node_filesystem_avail_bytes{instance="$host",fstype!~"tmpfs|overlay"}
/ node_filesystem_size_bytes{instance="$host",fstype!~"tmpfs|overlay"}
Настройка: Dashboard settings → Variables → New → Type=Query, Data source=Prometheus, Query=label_values(node_uname_info, instance), Multi-value=on. Сохраняете — сверху дашборда появляется селектор.
Алерты в Telegram: настройка за 15 минут
Любой мониторинг без алертов бесполезен. В Grafana 10+ алертинг встроен и настраивается через UI. Я всегда завожу Telegram-бот для технической команды и отдельный чат по клиенту.
- В Telegram пишем @BotFather → /newbot → придумываем имя → получаем токен.
- Создаём группу, добавляем бота, пишем туда любое сообщение. Узнаём chat_id через getUpdates:
curl "https://api.telegram.org/bot<TOKEN>/getUpdates". - В Grafana: Alerting → Contact points → New → Telegram. Вставляем токен и chat_id. Жмём Test — в чат приходит тестовое сообщение.
- Alerting → Notification policies → Default policy → редактируем, ставим Contact point=telegram-corp.
- Alerting → Alert rules → New alert rule. Для начала — CPU выше 90% пять минут подряд.
# Пример запроса для алерта CPU
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Reduce: last, Threshold: IS ABOVE 90
# For: 5m, Labels: severity=warning
# Annotations: summary=CPU {{ $labels.instance }} = {{ $values.B }}%
У нас на практике такая связка ловит 80% проблем раньше, чем их замечает пользователь. Оставшиеся 20% — это сетевые проблемы и DDoS, для которых нужны отдельные инструменты.
Кейс: мониторинг производственной сети на 120 хостов
В марте 2026 к нам обратился клиент — логистическая компания в МО, 120 Linux и Windows серверов, два склада с терминалами сбора данных, SQL Server на Dell Xeon Platinum 8280. Проблема: каждую пятницу вечером склад №2 зависал, утром в понедельник админы разбирались, в чём дело. Никаких графиков нагрузки не было, логи смотрели руками.
За три дня мы развернули стек Prometheus + Grafana + Loki + Alertmanager на виртуалке в дата-центре МТС. Установили экспортёры на все сервера, подключили сетевое оборудование через snmp_exporter, собрали 12 дашбордов — инфраструктура, базы, бизнес-сервисы, склад, сеть. Telegram-бот присылал алерты старшему админу.
- На второй день нашли, что склад №2 по пятницам забивает 40G Mellanox из-за бэкапа 1С, идущего в рабочее время. Перенесли на 21:00.
- На третий день увидели, что MSSQL пожирает 95% RAM, и после перезапуска каждую неделю лечится — утечка в кастомной хранимке. Исправили логику.
- К концу недели клиент сказал: «Впервые за два года мы понимаем, что происходит на серверах».
Стоимость проекта 145 000 руб, срок 5 рабочих дней, включая обучение двух штатных админов работе с Grafana.
Organization, teams и ACL
Grafana из коробки поддерживает разграничение доступа. Я всегда делю так: Admin — полный доступ, Editor — правит дашборды, Viewer — только смотрит. Для больших команд поднимаю SSO через OIDC (Keycloak) или LDAP/AD.
# /etc/grafana/grafana.ini, фрагмент LDAP
[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml
# ldap.toml
[[servers]]
host = "dc01.corp.ru"
port = 389
bind_dn = "CN=grafana-svc,OU=Service,DC=corp,DC=ru"
bind_password = 'ПарольСлужебнойУчётки'
search_filter = "(sAMAccountName=%s)"
search_base_dns = ["DC=corp,DC=ru"]
[servers.attributes]
member_of = "memberOf"
email = "mail"
[[servers.group_mappings]]
group_dn = "CN=Grafana-Admins,OU=Groups,DC=corp,DC=ru"
org_role = "Admin"
После рестарта grafana-server сотрудники логинятся своими доменными учётками, роли раздаются по группам AD. Менять список администраторов — одно изменение в GPO.
Бэкап и обновление: что часто забывают
Grafana хранит дашборды в SQLite по умолчанию. Для production я перевожу на PostgreSQL и настраиваю ежедневный бэкап базы. Дополнительно — экспорт дашбордов в git через grafana-backup-tool.
# Бэкап конфигурации и дашбордов
pip install grafana-backup
grafana-backup save \
--grafana-url=http://localhost:3000 \
--grafana-api-key=$GRAFANA_ADMIN_KEY \
--backup-dir=/var/backups/grafana
# Обновление мажорной версии
sudo apt update && sudo apt install --only-upgrade grafana
sudo systemctl restart grafana-server
journalctl -u grafana-server -f
После обновления — проверяю все дашборды на совместимость, особенно если используются плагины. Плагины часто отстают от ядра, и после мажорного апдейта часть панелей показывает No data.
Разворачиваем Grafana и стек мониторинга под ключ
Я лично настраиваю мониторинг для офисов и производств: Grafana, Prometheus, Loki, экспортёры под Linux/Windows/сетевое оборудование, алерты в Telegram, дашборды под ваши бизнес-сервисы. От 3 рабочих дней.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы по Grafana
- Почему Grafana стала стандартом мониторинга?
- Grafana умеет подключаться почти к любой time-series базе, рисует красивые панели, поддерживает переменные и алерты из коробки, имеет богатое сообщество с готовыми дашбордами под любую технологию — Linux, Windows, PostgreSQL, Kubernetes.
- Grafana или Zabbix — что выбрать?
- Zabbix — это полный стек со своим сбором данных, шаблонами устройств и оповещениями. Grafana — визуализация поверх внешнего хранилища (Prometheus, InfluxDB, Loki). На практике их часто ставят вместе: Zabbix-агенты на хостах, Grafana как единый фронт для графиков.
- Сколько железа нужно Grafana?
- Для офиса на 50 серверов достаточно виртуалки с 2 vCPU, 4 ГБ RAM и 30 ГБ диска. Основная нагрузка приходится на Prometheus или InfluxDB, Grafana сама по себе лёгкая.
- Где брать готовые дашборды?
- На grafana.com/grafana/dashboards — тысячи бесплатных шаблонов. Для Node Exporter берите ID 1860, для Windows Exporter — 14510, для PostgreSQL — 9628.
- Как настроить алерты в Telegram?
- Создаёте бота через @BotFather, получаете токен и chat_id, в Grafana добавляете Contact Point типа Telegram, затем в Alert Rules задаёте условия и связываете с контактом. Сообщения приходят в чат сразу.