Перейти к содержанию

Мониторинг#

В LIM есть несколько методов мониторинга:

При выборе между базами данных рекомендуется изучить документацию 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
}