Агрегации
Тема дорожной карты · Loki
Операторы агрегации в LogQL выполняют функции, аналогичные агрегациям в PromQL, позволяя объединять или уменьшать результаты метрических запросов по нескольким потокам Grafana Loki. После вычисления диапазонного вектора с помощью функций, таких как rate(), count_over_time() или bytes_rate(), можно использовать операторы sum by (label), avg by (label), max, min, topk(n, ...), и bottomk(n, ...), чтобы группировать или фильтровать результирующие мгновенные векторы. Например, запрос sum by (namespace) (rate({cluster="prod"} [5m])) суммирует скорость записи логов по всем потокам в кластере prod, сгруппированным по пространству имён Kubernetes. Ключевое слово without позволяет исключать определённые метки из измерения группировки, обеспечивая детальный контроль над тем, как метки результатов агрегации в Loki. Понимание операторов агрегации необходимо для создания дашбордов Grafana, которые суммируют объём логов, уровни ошибок и перцентили задержек по большому парку сервисов с использованием Grafana Loki.
Как это работает
Агрегации в LogQL позволяют считать метрики из логов. Рассмотрим примеры: rate({app="nginx"} |= "5"[5m]) вычисляет скорость появления 5xx-ошибок в логах, а count_over_time(...) возвращает абсолютные значения. Функция bytes_rate(...) вычисляет количество байт в секунду, а quantile_over_time(0.95, ...) определяет 95-й перцентиль числового поля после его извлечения. Оператор sum by (status_code)(rate(...)) позволяет суммировать значения по определённым меткам. Эти операторы агрегации позволяют строить дашборды и тревоги без отдельных пайплайнов метрик, хотя это может быть дороже, чем использование Prometheus для получения тех же метрик.
Когда применять
Метрические запросы в LogQL полезны для временного анализа данных, уже собранных в логах. Для постоянной мониторинга метрик рекомендуется инструментировать Prometheus напрямую, так как это будет дешевле в плане времени запроса. Паттерны, такие как использование rate() и sum by (...) для анализа HTTP статус-кодов из логов доступа, являются классическими примерами применения этих операторов. Записывающие правила (recording rules) сохраняют вычисленные метрики для последующего использования в дашбордах.
Типичные ошибки
При использовании агрегаций важно избегать некоторых ловушек. Например, использование quantile_over_time() по неделям логов может быть медленным и дорогостоящим. Дублирование метрик Prometheus через LogQL может быть менее эффективным, так как Prometheus обычно дешевле для подобных целей. Также стоит избегать пересчета данных на каждом обновлении дашборда, не кешируя или не записывая запросы. Наконец, важно учитывать high-cardinality извлечённых меток при выполнении агрегаций, чтобы избежать проблем с производительностью.