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 для любого нового проекта?
- Какие панели Графана умеет? Да самые разные, и все гибкие! Смотрите: это и привычные графики (graph), и индикаторы (gauge), и столбчатые диаграммы (bar chart). Плюс таблицы (table), тепловые карты (heatmap), временные линии состояний (state timeline) и история статусов (status history). На любой вкус.
- Переменные в дашбордах – это же просто магия! Представьте: вы создаете один-единственный шаблон, а он работает сразу на сотне хостов. Всё, что нужно, – выбрать нужный из выпадающего списка. Экономия времени колоссальная!
- Алертинг? Да, он уже встроен в Графану. И вы сами выбираете, куда придут уведомления: в Telegram, Slack, на почту (email) или через любой webhook. Как вам удобнее.
- Если нужно поддерживать порядок, то используйте provisioning. Дашборды и datasource? Всё это мы описываем в YAML-файлах и аккуратно храним в 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? Это просто классика, проверенная годами связка! 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 | Дашборд | Назначение |
|---|---|---|
| 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? Очень просто. Открываем 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. Что можно настроить для начала? Например, пусть 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-бот начал оперативно слать алерты прямо на телефон старшего админа. Проблема решена, и притом молниеносно.
- Всего на второй день работы мы уже нащупали первую серьёзную проблему. По пятницам склад №2 страдал: его 40G Mellanox был забит под завязку! Как это? Оказалось, виной тому бэкап 1С, который запускался прямо в рабочее время. Зачем мучить систему в пиковые часы? Мы сразу же перенесли это безобразие на 21:00. И дыхание у Mellanox'а сразу стало свободнее!
- Что дальше? На третий день мы столкнулись с классикой: MSSQL буквально пожирал 95% оперативной памяти! Представляете, как страдал сервер? Еженедельный перезапуск «лечил» проблему лишь временно. Почему так? Причина оказалась в утечке памяти, скрытой в кастомной хранимой процедуре. Мы быстро выяснили, что логика там была, мягко говоря, странной. Пришлось полностью переписать её. Всё, утечки больше нет!
- И какой же итог? К концу недели наш клиент, кажется, сам удивился результатам. Его слова стали лучшей наградой: «Впервые за два года, — говорит, — мы наконец-то понимаем, что происходит на серверах». Это ли не показатель? Именно ради такого «прозрения» мы и работаем.
Итоговая цена проекта? Всего 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 задаёте условия и связываете с контактом. Сообщения приходят в чат сразу.
