Вычисление метрик по логам
Примечание
Функциональность метрик по логам находится на стадии Preview.
Метрика по логам — непрерывное вычисление статистики по данным из логов для создания метрик в Monium.
Примеры метрик, которые можно вычислять по логам:
- Количество логов с сообщением об ошибке в поле
message. - Количество уникальных пользователей, получивших ошибку, с группировкой по методу API.
- Максимальное время выполнения запроса.
Начало работы с метриками по логам
Адрес для записи логов через API: ingest.monium.yandex.cloud:443.
Чтобы создать метрику по логам:
- На главной странице Monium
слева выберите один из разделов: Обзор → Логи. Нажмите кнопку Метрики по логам. Поставка и хранение → Метрики по логам.
- Справа вверху нажмите Создать.
- (Опционально) Введите название метрики.
- Введите ID метрики — значение имени метрики. Обычно это
name, но может использоваться и другая метка, напримерsensorилиsignal. Это имя задается в настройках шарда. Подробнее в разделе Язык запросов в Monium. - В блоке Селектор логов введите запрос, выбирая метки из списка или в текстовом режиме. Запрос определяет, какие строки логов участвуют в вычислении метрики.
- В блоке Правило вычисления укажите:
- Функция агрегации —
count,sum,min,max,avg,uniqueилиuniqueNewfound. - Окно вычисления —
1 минутаили5 минут.
- Функция агрегации —
- Если нужно разбить метрику по значениям атрибута, в блоке Группировать по введите имя атрибута.
- В блоке Итоговая метрика проверьте автоматически сформированный запрос и при необходимости уточните значения меток
clusterиservice. - Нажмите Создать.
Чтобы создать метрику по уже построенному графику логов:
- На главной странице Monium
слева выберите Обзор → Логи. - Введите запрос и нажмите Выполнить запрос.
- На вкладке Статистика рядом с графиком нажмите Создать метрику.
- Укажите параметры метрики и при необходимости уточните запрос.
- Нажмите Создать.
Примеры метрик по логам
Ниже приведены варианты метрик, которые можно настроить по логам. Значения проектов, сервисов и кластеров указаны для примера — при создании метрик используйте данные из вашего окружения.
Количество событий
Вычисление частоты запросов к API:
- Селектор логов:
{project = "logging", service = "query", cluster = "production", message = "*started"} - Функция агрегации:
count - Атрибут для агрегации: —
- Группировать по: —
- Окно вычисления:
1 минута - Итоговая метрика:
{project=logging, cluster=production, service=logging_aggregates, name=query_got_reqs_1m}
Объем прочитанных логов в байтах
Сколько байт за пять минут прочитал сервис в ответ на запросы пользователей:
- Селектор логов:
{project='logging', service='query', cluster='production', meta.ch.profile.bytes='*'} - Функция агрегации:
sum - Атрибут для агрегации:
meta.ch.profile.bytes - Группировать по: —
- Окно вычисления:
5 минут - Итоговая метрика:
{project=logging, cluster=production, service=logging_aggregates, name=query_bytes_read_5m}
Количество уникальных пользователей в разбивке по методу API
Сколько уникальных пользователей обратилось к отдельным методам API за одну минуту:
- Селектор логов:
{project='logging', service='query', cluster='production', origin.login='*', func='AutocompleteKeys|AutocompleteValues|SearchLogs'} - Функция агрегации:
unique - Атрибут для агрегации:
origin.login - Группировать по:
func - Окно вычисления:
1 минута - Итоговая метрика:
{project=logging, cluster=production, service=logging_aggregates, name=query_unique_users_by_func_1m}
Принцип работы
Параметры метрик по логам
- Селектор логов — какие логи попадут в выборку.
- Функция агрегации — функция, с помощью которой вычисляется значение метрики:
count,min,max,avg,sum,unique,uniqueNewfound. - Атрибут для агрегации — для
min,max,avg,sum,unique,uniqueNewfound: имя атрибута, значение которого используется как аргумент функции. - Группировать по — по какому атрибуту создавать отдельные агрегаты для каждого значения.
- Окно вычисления — временной диапазон для вычисления функции агрегации. Поддерживаются диапазоны:
1 минутаи5 минут. - Итоговая метрика — с каким селектором записать метрику в Monium.
Селектор логов (запрос)
Селектор логов — это фильтр на языке запросов, который определяет, какие строки логов участвуют в вычислении метрик. Для создания метрик в селектор добавляют метки окружения (project, cluster и service) и метки из строки логов: уровень логирования, текст сообщения, значение meta.* и другие атрибуты.
Метки окружения:
-
project = <идентификатор_проекта>— выберите проект, заданный в параметреx-monium-projectв конфигурации передачи телеметрии приложения.Это может быть проект облака (
cloud__<идентификатор_облака>), каталога (folder__<идентификатор_каталога>) или другой проект. -
cluster = <имя_кластера>— выберите имя инсталляции, в которой запущено ваше приложение. Если кластер не задан, то по умолчаниюcluster = default. -
service = <имя_сервиса>— имя вашего приложения или сервиса. Может передаваться в переменной окруженияOTEL_SERVICE_NAME.Если нужных меток нет в подсказках, их можно ввести вручную. Но, скорее всего, в систему не поступали данные с такими метками. Решение возможных проблем описано в разделе Устранение неполадок при поставке данных.
Примечание
Значение project должно совпадать с проектом, в котором создается метрика. Метрика в проекте my_shop может обрабатывать только логи из project=my_shop.
Примеры селекторов:
{project='my_project', service='metabase', level >= 'ERROR', message='*LEAK*', logger='io.netty.util.ResourceLeakDetector'}
{project='my_project', service='journald', cluster='production', meta.systemd_unit='alerting.service', message=*'terminating on uncaught exception;'}
{project='ci', service='api', cluster='stable', message=*'vtail.api.query.Query/SearchLogsStreaming', message=*'DEADLINE_EXCEEDED'}
{project='my_agent', service='telemetry'}
Функция агрегации
После выборки логов по селектору из них вычисляется числовое значение:
|
Функция |
Нужен атрибут |
Описание |
Пример |
|
|
Нет |
Количество строк в выборке |
Количество логов с ошибкой в коде (например, когда |
|
|
Да |
Минимальное значение атрибута |
Минимальное значение |
|
|
Да |
Максимальное значение атрибута |
Максимальное значение |
|
|
Да |
Среднее значение атрибута |
Среднее значение |
|
|
Да |
Сумма значений атрибута |
Сумма |
|
|
Да |
Количество уникальных значений атрибута |
Количество уникальных значений |
|
|
Да |
Количество новых уникальных значений атрибута по сравнению с предыдущими 48 часами |
Количество новых сообщений об ошибках ( |
Для функций min, max, avg и sum значение атрибута автоматически приводится к числу с плавающей точкой2^53.
Группировка
Дополнительно можно указать атрибут для группировки. По его значениям будут создаваться отдельные метрики. Например, если для группировки указать атрибут api_method, у которого в логах встречаются значения Export, Update, Delete, будет создана не одна, а три метрики:
api_method=Export;api_method=Update;api_method=Delete.
Атрибут группировки автоматически добавляется в селектор метрики. Указывать его отдельно в итоговой метрике не обязательно.
Окно вычисления (агрегации)
Логи для вычисления выбираются за фиксированное временное окно: 1 минута или 5 минут.
Например, при подсчете количества строк за каждую минуту:
|
Временная метка (ts) |
Значение |
Описание |
|
2025-03-20 11:03:00 |
193 |
Строки логов за |
|
2025-03-20 11:04:00 |
371 |
Строки логов за |
|
2025-03-20 11:05:00 |
237 |
Строки логов за |
Итоговая метрика (селектор метрики)
В селекторе должны быть обязательные метки: project, cluster, service и ID метрики — метка, которая обозначает имя метрики в проекте или указанном шарде. Обычно это name, но может использоваться sensor, signal или другое произвольное имя метки. Подробнее в разделе Язык запросов в Monium. Например:
{project='shop', cluster='production', service='logging_aggregates', name='unique_users_5m'}
Если указан атрибут для группировки, он автоматически добавляется в метрику. Например, при селекторе метрики {project='logging', cluster='production', service='logging_aggregates', name='api_errors'} и атрибуте группировки api_method будут созданы метрики:
|
Временная метка (ts) |
Метки |
Значение |
|
2025-02-13 17:03:00 |
|
100 |
|
2025-02-13 17:03:00 |
|
4 |
|
2025-02-13 17:03:00 |
|
82 |
|
... |
... |
... |
Значения атрибута из группировки можно использовать в подстановках. Например, если в группировке используется api_method, в селекторе метрики можно указать:
{project='logging', cluster='production', service='logging_aggregates', endpoint=grpc.{{api_method}}, name='api_errors'}
В результате метка api_method не добавляется автоматически, а значение подставляется в метку endpoint:
|
Временная метка (ts) |
Метки |
Значение |
|
2025-02-13 17:03:00 |
|
100 |
|
2025-02-13 17:03:00 |
|
4 |
|
2025-02-13 17:03:00 |
|
82 |
|
... |
... |
... |
Сценарии группировок и подстановок
Автоматическая подстановка значений из группировки
При группировке по атрибуту origin.login и селектору метрики
{project=logging, service=logs_to_metrics, cluster=production, name=reqs_by_login}
в селектор метрики автоматически добавится метка:
{project=logging, service=logs_to_metrics, cluster=production, name=reqs_by_login, origin.login={{origin.login}}
Если в строке лога встретится origin.login=ivan_petrov, метрика будет записана по меткам:
{project=logging, service=logs_to_metrics, cluster=production, name=reqs_by_login, origin.login=ivan_petrov}
Автоматическая подстановка нескольких значений
При группировке по нескольким атрибутам (host, component) они автоматически добавляются в метрику:
{project=logging, service=logs_to_metrics, cluster=production, name=cnt, host='{{host}}', component='{{component}}'}
Ручная настройка подстановки
Помимо автоматической подстановки, подстановку можно задать вручную. Следующие селекторы метрик дают одинаковый результат:
- Селектор логов:
{project=logging, service=query, cluster=production, host=*} - Функция агрегации:
count - Группировать по:
host - Итоговая метрика 1:
{project=logging, service=logs_to_metrics, cluster=production, name=cnt} - Итоговая метрика 2:
{project=logging, service=logs_to_metrics, cluster=production, name=cnt, host='{{host}}'}
В таких подстановках можно изменять и ключ, и значение. Например:
{project=logging, service=logs_to_metrics, cluster=production, name=errors, host='query-{{host}}', context='query_{{host}}_{{component}}_production'}
Группировка по кластеру
Группировка по cluster поддерживается в нескольких вариантах:
Вариант 1 — кластер как значение метки cluster:
- Селектор логов:
{project=logging, service=query} - Функция агрегации:
count - Группировать по:
cluster - Итоговая метрика:
{project=logging, service=logs_to_metrics, cluster='{{cluster}}', name=cnt}
Вариант 2 — кластер как значение пользовательской метки user_cluster:
- Селектор логов:
{project=logging, service=query} - Функция агрегации:
count - Группировать по:
cluster - Итоговая метрика:
{project=logging, service=logs_to_metrics, cluster=production, name=cnt, user_cluster='{{cluster}}'}
Группировка по сервису
Группировка по service поддерживается только при явном перечислении значений:
- Селектор логов:
{project=logging, service=query|collector} - Функция агрегации:
count - Группировать по:
service - Итоговая метрика:
{project=logging, service='{{service}}', cluster=production, name=cnt}
Квоты и лимиты
На каждый проект выделены определенные ресурсы CPU и RAM для вычисления метрик по логам. Максимальное количество метрик в проекте — 1000.
Чтобы увеличить квоту, обратитесь в службу поддержки
Как снизить потребление ресурсов
-
Используйте точные значения в селекторах. Избегайте регулярных выражений и wildcard-выражений — они увеличивают нагрузку на CPU.
Не рекомендуется:
{..., api_endpoint="*Export*", ...}Рекомендуется:
{..., api_endpoint="/api/v1/Export", ...} -
Переносите «дорогие» сравнения в конец селектора. Если wildcard-выражений не избежать, ставьте их после точных условий.
Не рекомендуется:
{..., message = "*panic*", error_code="500", ...}Рекомендуется:
{..., error_code="500", message = "*panic*"}Так большая часть логов отсеется на этапе проверки атрибута
error_code. -
Чтобы снизить потребление RAM, установите окно агрегации —
5 минут.
Особенности вычисления
- Значение метрики по логам появляется с задержкой, которая зависит от размера окна агрегации. Максимальная задержка —
3 минутыпосле завершения окна. Например, для окна1mзначение за интервал17:07:00–17:08:00будет доступно не позднее17:11:00. - Значения, полученные по сырым логам и по метрикам на основе логов, могут временно отличаться. Например, поиск логов может вернуть
Xстрок по селектору, а метрикаcountпо тому же селектору — значениеY. - Функция
uniqueвозвращает приблизительное количество уникальных элементов. Подробнее — HyperLogLog . - Повторно отправленные строки логов учитываются повторно, дедупликация не выполняется.
- Числовые значения атрибутов приводятся к числам с плавающей точкой
. Максимальная поддерживаемая точность для целочисленных значений —2^53.
Исчерпание квоты
При превышении квоты на вычисление метрик по логам:
- логи продолжают записываться;
- значения метрик могут быть неполными;
- новые метрики могут создаваться, если для метрики по логам настроена группировка.
Запись в прошлое
Значение метрики может быть пересчитано для логов, записанных за 30 минут в прошлое.
Рассмотрим пример со следующими условиями:
- Настроена метрика по логам, считающая каждую минуту
countдля{project, cluster, service, message=*'failed'}. - Текущее время —
17:29:17.
При поступлении в Monium двух строк лога выполняются действия:
|
Временная метка (ts) |
Лог |
Что произойдет с метрикой |
|
16:59:00 |
|
Лог записан, значение за эту минуту не пересчитается |
|
17:00:00 |
|
Лог записан, значение за 17:00:00 будет пересчитано |
Особенности отображения метрик
Примечание
Рекомендуем отображать метрики по логам в виде столбцов. Это показывает, что каждая точка — это агрегированное значение за временной промежуток, а не значение в моменте.
- Все метрики записываются с типом DGAUGE.
- Каждая точка на графике показывает значение за окно агрегации, а не в секунду. Например, если метрика считает количество запросов к API за минуту, точка показывает количество запросов за минуту.
- Если в течение окна агрегации не поступали логи, попадающие в выборку, значение за это окно не отправляется — на графике будет пропуск.
- При прореживании метрик указывайте интервал, равный окну агрегации:
1 минутаили5 минут. - Метрики по логам с функциями
unique,uniqueNewfoundиavgнесовместимы с прореживанием — отключайте его при просмотре больших временных диапазонов. - Точки метрики за последние 30 минут могут быть пересчитаны и повторно отправлены в Monium. Если в шарде настроена агрегация по метрикам, это может привести к некорректному отображению значений.
Прореживание и совместимость с функциями агрегации
Примечание
При просмотре метрик укажите интервал прореживания, равный окну вычисления: 1 минута или 5 минут.
При просмотре метрик на большом временном отрезке в Monium включается прореживание — из нескольких точек вычисляется одна с помощью функции агрегации. Например, если метрика по логам считается раз в минуту, а график строится за сутки, каждая точка будет средним значением набора точек.
Рекомендации по настройке прореживания для разных функций:
|
Функция агрегации |
Рекомендация |
|
|
В настройках графика в разделе прореживания выберите функцию агрегации |
|
|
Выберите функцию агрегации |
|
|
Выберите функцию агрегации |
|
|
Выберите функцию агрегации |
|
|
Прореживание не поддерживается. Корректные значения доступны только для отдельных точек до выполнения прореживания |
Функции avg, unique и uniqueNewfound несовместимы с агрегацией в метриках Monium. Например, для unique:
- раз в минуту к API поочередно приходят два пользователя —
user1иuser2; - метрика по логам с функцией
uniqueраз в минуту записывает значение1; - при просмотре на масштабе суток ни одна функция прореживания не вернет верное значение:
sumпосчитает60;minиmaxпосчитают1;avgпосчитает1;- верный ответ —
2, потому что за час было два уникальных пользователя.