· 15 мин чтения

Grafana: дашборды мониторинга серверов и сервисов в корпоративной сети

Семёнов Евгений Сергеевич, директор АйТи Фреш. Grafana стоит у меня на каждом проекте — от домашнего homelab до серверных ферм клиентов с сотней хостов. За 15 лет работы я понял одно: без нормальных дашбордов администратор работает вслепую, а с правильно настроенной Grafana проблема ловится за минуты до жалоб пользователей. В этой статье расскажу, как развернуть Grafana на Debian за полчаса, подключить Prometheus и InfluxDB, собрать первый дашборд и настроить алерты в Telegram.

Что умеет Grafana и почему она так популярна

Grafana — визуализация временных рядов. Сама она ничего не собирает: задача фронта — красиво показать данные из внешнего хранилища. Поддерживаются Prometheus, InfluxDB, Graphite, Elasticsearch, PostgreSQL, MySQL, Loki, Tempo, Zabbix через плагин, и десятки других источников.

Почему я выбираю Grafana для каждого нового проекта:

У нас на практике 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ДашбордНазначение
1860Node Exporter FullLinux-серверы: CPU, RAM, диски, сеть
14510Windows ExporterWindows-серверы, службы, диски
9628PostgreSQL DatabaseСоединения, транзакции, блокировки
7362MySQL OverviewЗапросы, репликация, InnoDB
1471Windows Server Active DirectoryРепликация AD, LDAP-операции
11074Node 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-бот для технической команды и отдельный чат по клиенту.

  1. В Telegram пишем @BotFather → /newbot → придумываем имя → получаем токен.
  2. Создаём группу, добавляем бота, пишем туда любое сообщение. Узнаём chat_id через getUpdates: curl "https://api.telegram.org/bot<TOKEN>/getUpdates".
  3. В Grafana: Alerting → Contact points → New → Telegram. Вставляем токен и chat_id. Жмём Test — в чат приходит тестовое сообщение.
  4. Alerting → Notification policies → Default policy → редактируем, ставим Contact point=telegram-corp.
  5. 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-бот присылал алерты старшему админу.

Стоимость проекта 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 задаёте условия и связываете с контактом. Сообщения приходят в чат сразу.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

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

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.