Коротко. Grafana сама ничего не проверяет — она визуализирует метрики из источников вроде Prometheus, InfluxDB или Loki и отправляет алерты. Чтобы получить данные о доступности сайта, нужен экспортёр (например, blackbox_exporter) или внешний synthetic-мониторинг сайтов, который пишет метрики в TSDB. Grafana собирает из них дашборды доступности, времени ответа и SSL, а Alerting рассылает уведомления в Telegram, Slack или webhook.
Что Grafana делает, а что нет
Главное заблуждение новичков — что Grafana «мониторит сайт». Это слой визуализации и алертинга, а не агент проверки. Источник истины — база временных рядов (TSDB). Типовая связка выглядит так:
- Сборщик метрик — blackbox_exporter, telegraf или внешний synthetic-чекер;
- TSDB — Prometheus, VictoriaMetrics или InfluxDB хранят ряды;
- Grafana — рисует панели и считает условия алертов;
- Контактные точки — Telegram, Slack, email, PagerDuty, webhook.
Подключение источника данных
После установки Grafana добавьте data source через UI (Connections → Data sources) или через provisioning-файл. Декларативный подход предпочтительнее: конфиг лежит в git, разворачивается воспроизводимо.
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
jsonData:
timeInterval: "30s"
httpMethod: POST
Дашборд доступности
Минимальный дашборд для сайта содержит четыре панели: статус (up/down), время ответа (p50/p95), код HTTP-ответа и дни до истечения SSL. Дашборды тоже храните как код — JSON-модель экспортируется и кладётся в репозиторий.
{
"title": "Site Availability",
"panels": [
{
"type": "stat",
"title": "Up",
"targets": [
{ "expr": "probe_success{instance=\"https://example.com\"}" }
],
"fieldConfig": {
"defaults": {
"mappings": [
{ "type": "value", "options": { "1": { "text": "UP" }, "0": { "text": "DOWN" } } }
],
"thresholds": { "steps": [
{ "color": "red", "value": null },
{ "color": "green", "value": 1 }
] }
}
}
},
{
"type": "timeseries",
"title": "Response time p95",
"targets": [
{ "expr": "probe_http_duration_seconds{instance=\"https://example.com\"}" }
]
}
]
}
Настройка алертов
В Grafana 9+ алерты живут в едином Unified Alerting. Правило — это запрос с условием и порогом. Хороший алерт «сайт лежит»: probe_success == 0 в течение нескольких минут, чтобы не реагировать на одиночную сетевую икоту.
| Параметр алерта | Рекомендация | Зачем |
|---|---|---|
| For (длительность) | 2–5 мин | Гасит ложные срабатывания на флапе |
| Evaluation interval | 30–60 сек | Баланс скорости и нагрузки |
| No Data handling | Alerting | Пропавшие метрики = тоже инцидент |
| Severity label | critical / warning | Маршрутизация по важности |
Маршрутизация уведомлений
Notification policies разводят алерты по командам и каналам через label-матчинг. Критичные идут в PagerDuty и звонят дежурному, warning — в Slack-канал.
Правило хорошего алертинга: каждое уведомление должно требовать действия. Если на алерт никто не реагирует — его нужно либо чинить, либо удалять.
Где Grafana слабее внешнего мониторинга
Если blackbox_exporter живёт в том же кластере или дата-центре, что и сайт, то при падении этого ДЦ вы потеряете и сайт, и систему мониторинга одновременно. Внешний synthetic-мониторинг решает «слепое пятно»: проверка приходит снаружи, с независимой инфраструктуры.
enterno.io — внешний synthetic-мониторинг, который дополняет Grafana, а не заменяет её. Проверки HTTP / SSL / Ping / DNS идут из регионов RU / EU / US, на бесплатном тарифе доступно 10 мониторов с интервалом 5 минут (на платных — 1 минута и 30 секунд). Алерты уходят в Telegram, Slack, email, webhook, PagerDuty и Jira. Метрики можно тянуть через REST API v4 прямо в Grafana как дополнительный источник истины «снаружи».
Лучшая практика: держите внутренний blackbox внутри кластера для детальной диагностики и внешний synthetic-чекер снаружи для честного аптайма. Алерты обоих сводите в одну Grafana.
FAQ
Может ли Grafana проверять сайт без Prometheus?
Да, но всё равно нужен сборщик метрик: InfluxDB + Telegraf, Graphite или внешний synthetic-источник через API документацию. Сама Grafana HTTP-проб не делает.
Как хранить дашборды и алерты в git?
Через provisioning: YAML-файлы для data sources и notification policies, JSON-модели для дашбордов. Это «мониторинг как код» — воспроизводимо и ревьюится в PR.
Чем заменить blackbox_exporter для внешней проверки?
Внешним synthetic-мониторингом вроде enterno.io, который проверяет сайт из нескольких регионов и отдаёт метрики через API. Это закрывает слепое пятно «падение своего ДЦ».
Как избежать алерт-флуда?
Ставьте параметр For на 2–5 минут, группируйте алерты по label и используйте mute timings для запланированных работ.
Готовы добавить внешний слой? Создайте бесплатный монитор на enterno.io/monitors и подключите его метрики к Grafana через API. Полезное по теме: мониторинг как код, лучшие практики алертинга и мониторинг аптайма API.