Grafana: дашборды мониторинга серверов — АйТи Фреш
· 15 мин чтения

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

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

Привет всем! Меня зовут Семёнов Евгений Сергеевич, я директор ITFresh. Знаете, для меня Grafana стала чем-то вроде боевого товарища. Она буквально везде: и в моём скромном домашнем homelab, и на огромных серверных фермах, где порой бывает под сотню хостов. За свои 15 лет в IT я железно усвоил одно: админ без хороших дашбордов – как слепой котёнок. Зато когда Grafana настроена правильно, любую проблему находишь за считанные минуты. Ещё до того, как пользователь успеет открыть тикет! В этой статье я покажу, как быстро, всего за полчаса, развернуть Grafana на Debian. Подключим Prometheus с InfluxDB, соберём наш первый дашборд и, конечно, настроим алерты прямо в Telegram.

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

Что такое 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? Это просто классика, проверенная годами связка! Prometheus работает так: он сам 'ходит' по разным экспортёрам. Что это за экспортёры? Например, 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? Очень просто. Открываем 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. Что можно настроить для начала? Например, пусть Grafana сообщит, если 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

Графана ведь сразу, прямо «из коробки», умеет круто разграничивать доступ. Это жутко удобно, поверьте! Обычно мы как делаем: 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. Но мы же про продакшн, верно? Для серьёзных систем мы её сразу переводим на PostgreSQL. И, разумеется, настраиваем ежедневный бэкап базы. А если хотите ещё большей надёжности, мы подключаем grafana-backup-tool – это экспортирует дашборды прямо в git. Просто и удобно.

# Бэкап конфигурации и дашбордов
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 подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.