TRIBLY
Документация Tribly → Мониторинг: источники и дашборды

Мониторинг: источники и дашборды

Раздел «Мониторинг» показывает состояние ваших систем: графики, счётчики, таблицы и логи. Открывает и настраивает раздел носитель права «Управление мониторингом»; доступ к отдельным дашбордам выдаётся отдельно (см. ниже).


Устройство мониторинга

Данные собирает сервер: он подключается к вашим базам, системам метрик и логов, выполняет запрос и присылает готовый результат. Адреса и пароли источников остаются на сервере.

Автообновление включается кнопкой в шапке раздела: раз в 5, 15, 30 секунд или раз в минуту. По умолчанию выключено — данные обновляются, когда вы сами перезагрузите дашборд.


Источники данных

Источник — это система, откуда берутся данные. Поддерживаются:

Источник Что это
Prometheus Метрики (язык запросов PromQL)
Elasticsearch Поиск по логам
Watchgoose Логи, метрики и трассировки одним источником
PostgreSQL База данных (запрос на SQL)
MySQL База данных (запрос на SQL)
StarRocks Аналитическая база (SQL)
MongoDB База данных

Источники добавляет и удаляет пользователь с правом управлять мониторингом. При добавлении можно сразу проверить, что подключение работает.

Безопасность запросов к базам. К базам данных проходят только запросы на чтение — одиночные SELECT, WITH, EXPLAIN или SHOW; остальные система отклоняет.


Источник Watchgoose: три сигнала одним подключением

Watchgoose держит логи, метрики и трассировки вместе, поэтому подключается одним источником.

Подключение

  1. Мониторинг → Источники → Добавить источник.
  2. Тип — Watchgoose.
  3. Адрес — корень сервиса, например https://wg.example.com. Путь /api/v1 сервер добавляет сам.
  4. Токен — ключ на чтение, роль viewer: логи, происшествия и архив. Ключ приёма телеметрии служит записи, для источника заведите отдельный.
  5. Сохраните источник. При следующей правке поле токена откроется пустым: наружу сервер его не отдаёт. Пустое поле сохраняет прежний ключ.

Первая панель

Дашборд → Добавить панель, источник данных — заведённый 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)».