Мониторинг: источники и дашборды
Раздел «Мониторинг» показывает состояние ваших систем: графики, счётчики, таблицы и логи. Открывает и настраивает раздел носитель права «Управление мониторингом»; доступ к отдельным дашбордам выдаётся отдельно (см. ниже).
Устройство мониторинга
Данные собирает сервер: он подключается к вашим базам, системам метрик и логов, выполняет запрос и присылает готовый результат. Адреса и пароли источников остаются на сервере.
Автообновление включается кнопкой в шапке раздела: раз в 5, 15, 30 секунд или раз в минуту. По умолчанию выключено — данные обновляются, когда вы сами перезагрузите дашборд.
Источники данных
Источник — это система, откуда берутся данные. Поддерживаются:
| Источник | Что это |
|---|---|
| Prometheus | Метрики (язык запросов PromQL) |
| Elasticsearch | Поиск по логам |
| Watchgoose | Логи, метрики и трассировки одним источником |
| PostgreSQL | База данных (запрос на SQL) |
| MySQL | База данных (запрос на SQL) |
| StarRocks | Аналитическая база (SQL) |
| MongoDB | База данных |
Источники добавляет и удаляет пользователь с правом управлять мониторингом. При добавлении можно сразу проверить, что подключение работает.
Безопасность запросов к базам. К базам данных проходят только запросы на чтение — одиночные SELECT, WITH, EXPLAIN или SHOW; остальные система отклоняет.
Источник Watchgoose: три сигнала одним подключением
Watchgoose держит логи, метрики и трассировки вместе, поэтому подключается одним источником.
Подключение
- Мониторинг → Источники → Добавить источник.
- Тип — Watchgoose.
- Адрес — корень сервиса, например
https://wg.example.com. Путь/api/v1сервер добавляет сам. - Токен — ключ на чтение, роль
viewer: логи, происшествия и архив. Ключ приёма телеметрии служит записи, для источника заведите отдельный. - Сохраните источник. При следующей правке поле токена откроется пустым: наружу сервер его не отдаёт. Пустое поле сохраняет прежний ключ.
Первая панель
Дашборд → Добавить панель, источник данных — заведённый Watchgoose. Ниже строки запроса появляется ряд кнопок быстрой настройки — они сами вписывают правильный запрос и выбирают тип визуализации:
| Кнопка | Что получится | Тип визуализации |
|---|---|---|
| Плотность во времени | Столбчатая диаграмма записей журнала | Столбчатая (Bar) |
| Найти метрику | Поиск по имени метрики, затем график по выбранной | График (Line) |
| Трассировки | Список трассировок за окно | Таблица |
| Операции | p50, p95 и максимум по операциям | Таблица |
| Самые медленные вызовы | Список самых долгих вызовов | Таблица |
Записи журнала — самый частый случай — получаются и без кнопок: тип «Логи (Discover)», строка запроса пустая или с поисковым текстом.
Панель показывает предпросмотр прямо в карточке: если запрос или доступ настроены неверно, ответ виден сразу, до сохранения. Колонки таблицы выбираются кнопкой «Загрузить колонки» — список приходит от источника, поиском находится нужное среди множества полей, порядок колонок меняется перетаскиванием.
Строка запроса
Кнопки быстрой настройки закрывают частые случаи; строка запроса под ними — тот же текст, что кнопки туда и вписывают, и его можно править руками. Она работает в двух видах.
Каждая строка внутри поля — ОТДЕЛЬНЫЙ запрос со своим результатом: несколько строк рисуют несколько рядов на одном графике (сравнение метрик). По этой же причине строка поиска по логам и строка {"kind":…} на разных строках одного поля работают как два независимых запроса, а не как один составной.
Поиск по логам — пишется как есть, тем же языком, что и в самом Watchgoose:
level:ERROR AND service:payment-worker
"connection refused" AND NOT env:staging
amount_cents:[100000 TO *] AND ts > now-1h
message:/acquirer.*timeout/
"payment failed"~4
Остальные виды задаются объектом в фигурных скобках. Поле kind выбирает вид, остальные поля — его параметры:
| Вид | Что показывает | Обязательные поля |
|---|---|---|
logs |
Записи журнала (вид по умолчанию) | — |
histogram |
Плотность записей во времени | — |
metrics |
Ряды по выражению PromQL | expr |
traces |
Трассировки за окно | — |
operations |
Готовые p50, p95 и максимум по операциям | — |
slowest |
Самые медленные вызовы | — |
trace |
Одна трассировка целиком | id |
timeline |
Спаны и логи одной трассировки лентой | trace_id |
graph |
Граф вызовов трассировки | trace_id |
fields |
Список полей и примеры запросов | — |
Общие поля: window (окно времени, по умолчанию 1h), limit, offset, step и buckets. Примеры:
{"kind":"metrics","expr":"up","window":"6h","step":"5m"}
{"kind":"operations","window":"6h"}
{"kind":"timeline","trace_id":"628cb60f668d"}
Панель типа «Логи» показывает записи Watchgoose так же, как записи Elasticsearch: боковая панель полей, выбор колонок, фильтры и разворачивание строки. Вложенные поля attrs поднимаются наверх, поэтому component и service_version доступны колонками наравне с остальными.
Трассировка и лог связаны полем trace_id, а service, env и host общие для всех трёх сигналов: по ним переходят от записи журнала к разбору вызова.
Дашборды и панели
Дашборды раскладываются по папкам. На дашборд добавляются панели — их можно перетаскивать и менять в размере.
| Тип панели | Для чего |
|---|---|
| График | Изменение значения во времени |
| Счётчик | Одно число крупно (например, загрузка процессора) |
| Таблица | Данные строками и столбцами |
| Логи | Поток записей журнала |
| Столбцы | Столбчатая диаграмма |
| Веб-страница | Родной интерфейс источника целиком, во фрейме |
У каждой панели настраиваются источник, запрос, размер и положение на дашборде.
Панель «Веб-страница» открывает готовый интерфейс источника — Grafana, сам Watchgoose — без пересказа его данных своими графиками. В строке «Запрос / Фильтры» указывается адрес страницы; пустая строка открывает адрес источника, выбранного для панели. Некоторые сервисы запрещают показывать себя во фрейме — тогда страница остаётся пустой, а кнопка в её углу открывает тот же адрес в браузере.
Раздача доступа к дашбордам
Доступ к дашбордам выдаётся связке «роль + группа» — галочками на просмотр, редактирование и удаление. Так дашборд «Продажи» показывают одному отделу, а «Серверы» — другому.
Примеры запросов
Запрос зависит от типа источника.
Prometheus (PromQL) — загрузка процессора и 99-й перцентиль времени ответа:
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
Elasticsearch — ошибки конкретного сервиса:
level:ERROR AND service.name:"auth-service"
SQL — число заказов по статусам за последние 5 минут:
SELECT count(*) AS cnt, status FROM orders WHERE created_at > now() - interval '5 min' GROUP BY status
Смежные страницы: «Алерты и инциденты», «Скрипты алертов (Starlark)».
TRIBLY