Мониторинг#
В LIM есть несколько методов мониторинга:
- Отправка данных в InfluxDB (включен по умолчанию)
- Отправка данных в ClickHouse
- Экспорт метрик в формате Prometheus через ресурс
/metrics
(отключен по умолчанию)
При выборе между базами данных рекомендуется изучить документацию Influx и Clickhouse. ClickHouse демонстрирует лучшую производительность для задач агрегации данных, особенно при работе с большими объёмами информации и сложными аналитическими запросами. Однако на текущий момент вариантом по умолчанию остаётся InfluxDB
. В будущих версиях LIM ClickHouse
станет системой мониторинга по умолчанию.
Ниже приведено описание данных, которые LIM отправляет в InfluxDB и ClickHouse.
Метрики в формате Prometheus содержат тот же набор данных, что и в LUNA PLATFORM.
Настройка дашбордов для визуализации этих данных выполняется так же, как и в LUNA PLATFORM. Соответствующие инструкции смотрите в разделе "Мониторинг" руководства администратора LUNA PLATFORM.
Отправка данных в InfluxDB#
Отправляемые данные#
Для каждого сервиса типы события мониторинга отличаются. Ниже приведена таблица, отражающая все типы событий для каждого сервиса:
Сервис | Типы событий |
---|---|
Index Manager | все HTTP-запросы, все неудачные HTTP-запросы, построение индекса |
Indexer | все HTTP-запросы, все неудачные HTTP-запросы |
Indexed Matcher | все HTTP-запросы, все неудачные HTTP-запросы, перезагрузка индексов, запросы на сравнение (проходят через Redis) |
Каждое событие — это точка временного ряда. Точка представлена с использованием следующих данных:
- тип события (запросы или ошибки)
- отметка времени начала запроса
- теги
- поля
Тег — это индексированные данные в хранилище. Он представлен в виде словаря, где
- keys — имена тегов (string),
- values — значения с типами данных string, integer, float
Поле представляет собой неиндексированные данные в хранилище. Оно представлено в виде словаря, где
- keys — имена полей (string),
- values — значения с типами данных string, integer, float
Сохранение данных для серии запросов запускается при каждом HTTP-запросе. Каждая точка содержит данные о соответствующем запросе (время выполнения и т.д.).
- теги
Имя тега | Описание |
---|---|
service | сервис, "lim-indexer", "lim-manager" или "lim-matcher" |
route | объединение метода запроса и ресурса запроса (GET:/version) |
status_code | HTTP статус код ответа |
- поля
Имя поля | Описание |
---|---|
request_id | идентификатор запроса |
execution_time | время выполнения запроса |
Сохранение данных для серии ошибок запускается при сбое HTTP-запроса. Каждая точка содержит error_code ошибки.
- теги
Имя тега | Описание |
---|---|
service | сервис, "lim-indexer", "lim-manager" или "lim-matcher" |
route | объединение метода запроса и ресурса запроса (GET:/version) |
status_code | HTTP статус код ответа |
error_code | код ошибки LIM |
- поля
Имя поля | Описание |
---|---|
request_id | идентификатор запроса |
Сохранение данных для серии построения индекса запускается при ошибке во время построения индекса.
- теги
Имя тега | Описание |
---|---|
service | сервис, "lim-manager" или "lim-matcher" |
socket_address | адрес сервиса в формате <host>:<port> |
stage | "build_index" (построить индекс), "load_index" (загрузить индекс) или "drop_index" (удалить индекс) |
label | метка для сравнения индекса (идентификатор списка) |
error_code | код ошибки LIM (0 — запрос выполнен успешно) |
- поля
Имя поля | Описание |
---|---|
task_id | идентификатор задачи на индексирование |
pending | время, проведенное во внутренней очереди (сек) |
duration | время построения индекса (сек) |
generation | unix-время генерации индекса |
Сохранение данных для серии сравнения запускается при выполнении сравнения.
- теги
Имя тега | Описание |
---|---|
service | сервис, всегда "lim-matcher" |
socket_address | адрес сервиса в формате <host>:<port> |
label | метка для сравнения индекса (идентификатор списка) |
error_code | код ошибки LIM (0 — запрос выполнен успешно) |
- поля
Имя поля | Описание |
---|---|
request_id | идентификатор запроса |
index_id | идентификатор индекса |
execution_time | время выполнения запроса на сравнение (сек) |
Отправка данных в ClickHouse#
Отправляемые данные#
Для каждого сервиса типы события мониторинга отличаются. Ниже приведена таблица, отражающая все типы событий для каждого сервиса:
Сервис | Типы событий |
---|---|
Index Manager | все HTTP-запросы, все неудачные HTTP-запросы, построение индекса |
Indexer | все HTTP-запросы, все неудачные HTTP-запросы |
Indexed Matcher | все HTTP-запросы, все неудачные HTTP-запросы, перезагрузка индексов, запросы на сравнение (проходят через Redis) |
В отличие от InfluxDB, где данные делятся на теги и поля, ClickHouse использует единую табличную структуру с поддержкой JSON. Каждое событие представлено записью, где:
time
— временная метка создания записи;data
— данные с информацией о событии в JSON-формате, которая в противном случае была бы распределена по тегам и полям в InfluxDB.
Сохранение данных для серии запросов запускается при каждом запросе. Каждая запись содержит данные о соответствующем запросе (время выполнения и т.д.). Пример содержимого поля data
для сервиса Index Manager:
{
"service": "lim-manager",
"route": "GET:/tasks",
"status_code": 201,
"request_id": "1536751345,6a5c2191-3e9b-f5a4-fc45-3abf43625c5f",
"execution_time": 1.234
}
Сохранение данных для серии ошибок запускается при сбое запроса. Каждая запись содержит error_code ошибки.
{
"service": "lim-manager",
"route": "POST:/tasks",
"status_code": 400,
"error_code": 13037,
"request_id": "1536751345,6a5c2191-3e9b-f5a4-fc45-3abf43625c5f"
}
Сохранение данных для серии построения индекса запускается при ошибке во время построения индекса.
{
"service": "lim-manager",
"stage": "build_index",
"label": "4d1ae1f4-fbbd-49c8-be47-f6aec34449f3",
"index_id": "e16e57de-3e15-4052-be9f-8e33f7629893",
"error_code": 0,
"generation": 1536751345,
"pending": 1,
"duration": 23456
}
Сохранение данных для серии сравнения запускается при выполнении сравнения.
{
"service": "lim-matcher",
"socket_address": "luna:5200",
"label": "4d1ae1f4-fbbd-49c8-be47-f6aec34449f3",
"index_id": "e16e57de-3e15-4052-be9f-8e33f7629893",
"error_code": 0,
"request_id": "1536751345,6a5c2191-3e9b-f5a4-fc45-3abf43625c5f",
"execution_time": 0.123
}