Функции статистики LogsQL

Обновлено 23.02.2026
Справочник функций статистики для пайпов stats, running_stats и total_stats в LogsQL.

LogsQL поддерживает три категории функций статистики, каждая из которых используется в соответствующем пайпе:


Функции пайпа running_stats

LogsQL поддерживает следующие функции для пайпа running_stats:

  • count – возвращает количество записей логов.
  • max – возвращает максимальное значение по указанным полям.
  • min – возвращает минимальное значение по указанным полям.
  • sum – возвращает сумму числовых значений по указанным полям.

count running_stats

count() – функция пайпа running_stats, вычисляющая накопительное количество выбранных записей логов.

Например, следующий запрос добавляет поле running_logs к выбранным записям за последние 5 минут:

_time:5m | running_stats count() running_logs

Можно подсчитать количество записей с непустыми значениями определённого поля, используя синтаксис count(fieldName). Например, следующий запрос возвращает накопительное количество записей с непустым полем username за последние 5 минут:

_time:5m | running_stats count(username) running_logs_with_username

Если внутри count() перечислено несколько полей, подсчитывается количество записей, в которых хотя бы одно из указанных полей непустое. Например, следующий запрос возвращает количество записей с непустым полем username или password за последние 5 минут:

_time:5m | running_stats count(username, password) running_logs_with_username_or_password

Можно подсчитать количество записей, имеющих хотя бы одно непустое поле с общим префиксом, с помощью синтаксиса count(prefix*). Например, следующий запрос возвращает количество записей с хотя бы одним непустым полем с префиксом foo за последние 5 минут:

_time:5m | running_stats count(foo*)

См. также:

max running_stats

max(field1, ..., fieldN) – функция пайпа running_stats, возвращающая накопительный максимум по всем указанным полям логов.

Например, следующий запрос возвращает накопительный максимум поля duration за последние 5 минут:

_time:5m | running_stats max(duration) running_max_duration

Можно вычислить накопительный максимум по всем полям с общим префиксом с помощью синтаксиса max(prefix*).

См. также:

min running_stats

min(field1, ..., fieldN) – функция пайпа running_stats, возвращающая накопительный минимум по всем указанным полям логов.

Отсутствующие поля обрабатываются как пустые строки. Поэтому min(field) может стать пустой строкой, если поле field отсутствует хотя бы в одной обработанной записи лога.

Например, следующий запрос возвращает накопительный минимум поля duration за последние 5 минут:

_time:5m | running_stats min(duration) running_min_duration

Можно найти накопительный минимум по всем полям с общим префиксом с помощью синтаксиса min(prefix*).

См. также:

sum running_stats

sum(field1, ..., fieldN) – функция пайпа running_stats, вычисляющая накопительную сумму числовых значений по всем указанным полям логов. Нечисловые значения пропускаются. Если среди обработанных записей не было числовых значений в полях field1, …, fieldN, возвращается NaN.

Например, следующий запрос возвращает накопительную сумму числовых значений поля duration за последние 5 минут:

_time:5m | running_stats sum(duration) running_sum_duration

Можно найти накопительную сумму по всем полям с общим префиксом с помощью синтаксиса sum(prefix*).

См. также:


Функции пайпа total_stats

LogsQL поддерживает следующие функции для пайпа total_stats:

  • count – возвращает общее количество записей логов.
  • max – возвращает общий максимум по указанным полям.
  • min – возвращает общий минимум по указанным полям.
  • sum – возвращает общую сумму числовых значений по указанным полям.

count total_stats

count() – функция пайпа total_stats, вычисляющая общее количество выбранных записей логов.

Например, следующий запрос добавляет поле total_logs ко всем выбранным записям за последние 5 минут:

_time:5m | total_stats count() total_logs

Можно подсчитать количество записей с непустыми значениями определённого поля, используя синтаксис count(fieldName). Например, следующий запрос возвращает общее количество записей с непустым полем username за последние 5 минут:

_time:5m | total_stats count(username) total_logs_with_username

Если внутри count() перечислено несколько полей, подсчитывается количество записей, в которых хотя бы одно из указанных полей непустое. Например, следующий запрос возвращает количество записей с непустым полем username или password за последние 5 минут:

_time:5m | total_stats count(username, password) total_logs_with_username_or_password

Можно подсчитать количество записей, имеющих хотя бы одно непустое поле с общим префиксом, с помощью синтаксиса count(prefix*). Например, следующий запрос возвращает количество записей с хотя бы одним непустым полем с префиксом foo за последние 5 минут:

_time:5m | total_stats count(foo*)

См. также:

max total_stats

max(field1, ..., fieldN) – функция пайпа total_stats, возвращающая общий максимум по всем указанным полям логов.

Например, следующий запрос возвращает общий максимум поля duration за последние 5 минут:

_time:5m | total_stats max(duration) total_max_duration

Можно вычислить общий максимум по всем полям с общим префиксом с помощью синтаксиса max(prefix*).

См. также:

min total_stats

min(field1, ..., fieldN) – функция пайпа total_stats, возвращающая общий минимум по всем указанным полям логов.

Отсутствующие поля обрабатываются как пустые строки. Поэтому min(field) может стать пустой строкой, если поле field отсутствует хотя бы в одной выбранной записи лога.

Например, следующий запрос возвращает общий минимум поля duration за последние 5 минут:

_time:5m | total_stats min(duration) total_min_duration

Можно найти общий минимум по всем полям с общим префиксом с помощью синтаксиса min(prefix*).

См. также:

sum total_stats

sum(field1, ..., fieldN) – функция пайпа total_stats, вычисляющая общую сумму числовых значений по всем указанным полям логов. Нечисловые значения пропускаются. Если среди выбранных записей не было числовых значений в полях field1, …, fieldN, возвращается NaN.

Например, следующий запрос возвращает общую сумму числовых значений поля duration за последние 5 минут:

_time:5m | total_stats sum(duration) total_sum_duration

Можно найти общую сумму по всем полям с общим префиксом с помощью синтаксиса sum(prefix*).

См. также:


Функции пайпа stats

LogsQL поддерживает следующие функции для пайпа stats:

  • avg – возвращает среднее значение по указанным числовым полям.
  • count – возвращает количество записей логов.
  • count_empty – возвращает количество записей с пустыми полями.
  • count_uniq – возвращает количество уникальных непустых значений по указанным полям.
  • count_uniq_hash – возвращает приближённое количество уникальных значений по хешам.
  • histogram – возвращает гистограмму распределения значений поля.
  • json_values – возвращает записи логов в виде JSON-массива.
  • max – возвращает максимальное значение по указанным полям.
  • median – возвращает медиану по указанным полям.
  • min – возвращает минимальное значение по указанным полям.
  • quantile – возвращает указанный квантиль по указанным полям.
  • rate – возвращает среднюю скорость записей в секунду.
  • rate_sum – возвращает среднюю скорость суммы в секунду.
  • row_any – возвращает произвольную запись лога из каждой группы.
  • row_max – возвращает запись лога с максимальным значением указанного поля.
  • row_min – возвращает запись лога с минимальным значением указанного поля.
  • sum – возвращает сумму числовых значений по указанным полям.
  • sum_len – возвращает сумму длин значений по указанным полям.
  • uniq_values – возвращает уникальные непустые значения по указанным полям.
  • values – возвращает все значения по указанным полям.

avg stats

avg(field1, ..., fieldN) – функция пайпа stats, вычисляющая среднее значение по всем указанным полям логов. Нечисловые значения игнорируются. Если все значения нечисловые, возвращается NaN.

Например, следующий запрос возвращает среднее значение поля duration за последние 5 минут:

_time:5m | stats avg(duration) avg_duration

Можно вычислить среднее по полям с общим префиксом с помощью синтаксиса avg(prefix*). Например, следующий запрос вычисляет среднее по всем полям с префиксом foo:

_time:5m | stats avg(foo*)

См. также:

count stats

count() – функция пайпа stats, вычисляющая количество выбранных записей логов.

Например, следующий запрос возвращает количество записей за последние 5 минут:

_time:5m | stats count() logs

Можно подсчитать количество записей с непустыми значениями определённого поля, используя синтаксис count(fieldName). Например, следующий запрос возвращает количество записей с непустым полем username за последние 5 минут:

_time:5m | stats count(username) logs_with_username

Если внутри count() перечислено несколько полей, подсчитывается количество записей, в которых хотя бы одно из указанных полей непустое. Например, следующий запрос возвращает количество записей с непустым полем username или password за последние 5 минут:

_time:5m | stats count(username, password) logs_with_username_or_password

Можно подсчитать количество записей, имеющих хотя бы одно непустое поле с общим префиксом, с помощью синтаксиса count(prefix*). Например, следующий запрос возвращает количество записей с хотя бы одним непустым полем с префиксом foo за последние 5 минут:

_time:5m | stats count(foo*)

См. также:

count_empty stats

count_empty(field1, ..., fieldN) – функция пайпа stats, вычисляющая количество записей с пустыми кортежами (field1, ..., fieldN). Отсутствующие поля считаются пустыми.

Например, следующий запрос подсчитывает количество записей с пустым полем username за последние 5 минут:

_time:5m | stats count_empty(username) logs_with_missing_username

Можно подсчитать количество записей с пустыми полями с общим префиксом с помощью синтаксиса count_empty(prefix*). Например, следующий запрос подсчитывает количество записей с пустыми полями с префиксом foo за последние 5 минут:

_time:5m | stats count_empty(foo*)

См. также:

count_uniq stats

count_uniq(field1, ..., fieldN) – функция пайпа stats, вычисляющая количество уникальных непустых кортежей (field1, ..., fieldN).

Например, следующий запрос возвращает количество уникальных непустых значений поля ip за последние 5 минут:

_time:5m | stats count_uniq(ip) ips

Следующий запрос возвращает количество уникальных пар (host, path) за последние 5 минут:

_time:5m | stats count_uniq(host, path) unique_host_path_pairs

Каждое уникальное значение хранится в памяти во время выполнения запроса. Большое количество уникальных значений может потребовать значительного объёма памяти. Иногда необходимо узнать, достигает ли количество уникальных значений заданного предела. В этом случае добавьте limit N сразу после count_uniq(...), чтобы ограничить возвращаемое количество уникальных значений числом N и снизить потребление памяти. Например, следующий запрос подсчитывает до 1_000_000 уникальных значений поля ip:

_time:5m | stats count_uniq(ip) limit 1_000_000 as ips_1_000_000

Если допустимо получить приближённое количество уникальных значений, можно использовать count_uniq_hash как более быструю альтернативу count_uniq.

См. также:

count_uniq_hash stats

count_uniq_hash(field1, ..., fieldN) – функция пайпа stats, вычисляющая количество уникальных непустых кортежей (field1, ..., fieldN) путём хеширования. Возвращаемое значение может быть занижено из-за возможных коллизий хешей. Эта функция обычно работает быстрее и использует меньше памяти, чем count_uniq, при подсчёте большого количества уникальных значений.

Например, следующий запрос возвращает приближённое количество уникальных непустых значений поля ip за последние 5 минут:

_time:5m | stats count_uniq_hash(ip) unique_ips_count

Следующий запрос возвращает приближённое количество уникальных пар (host, path) за последние 5 минут:

_time:5m | stats count_uniq_hash(host, path) unique_host_path_pairs

См. также:

histogram stats

histogram(field) – функция пайпа stats, возвращающая бакеты гистограммы для указанного поля.

Например, следующий запрос возвращает бакеты гистограммы для поля response_size с группировкой по полю host за последние 5 минут:

_time:5m | stats by (host) histogram(response_size)

Если поле содержит значение длительности (duration value), то histogram нормализует его к наносекундам. Например, 1.25ms нормализуется к 1_250_000.

Если поле содержит сокращённое числовое значение (short numeric value), то histogram нормализует его к числовому значению без суффикса. Например, 1KiB преобразуется к 1024.

Бакеты гистограммы возвращаются в виде JSON-массива следующего формата:

[{"vmrange":"...","hits":...},...,{"vmrange":"...","hits":...}]

Каждое значение vmrange содержит диапазон значений для соответствующего бакета гистограммы, а hits – количество значений, попавших в данный бакет.

Может быть полезно развернуть возвращённые бакеты гистограммы для дальнейшей обработки в запросе. Например, следующий запрос вычисляет гистограмму по полю response_size и затем разворачивает её в отдельные строки с полями vmrange и hits с помощью пайпов unroll и unpack_json:

_time:5m
  | stats histogram(response_size) as buckets
  | unroll (buckets)
  | unpack_json from buckets

См. также:

json_values stats

json_values(field1, ..., fieldN) – функция пайпа stats, упаковывающая указанные поля в JSON для каждой записи лога и возвращающая JSON-массив, который можно развернуть с помощью пайпа unroll.

Например, следующий запрос возвращает для каждого значения app JSON-массивы, содержащие поля _time и _msg, за последние 5 минут:

_time:5m | stats by (app) json_values(_time, _msg) as json_logs

Если список полей пуст, то все поля записи лога кодируются в JSON-массив:

_time:5m | stats json_values() as json_logs

Если список полей пуст, json_values выбирает все поля и упаковывает каждую запись лога в JSON-объект.

Можно выбрать поля с заданным префиксом с помощью синтаксиса json_values(prefix*).

Можно установить верхний предел количества JSON-закодированных записей с помощью суффикса limit N. Например, следующий запрос возвращает до 3 JSON-закодированных записей для каждого host:

_time:5m | stats by (host) json_values() limit 3 as json_logs

Можно отсортировать выбранные записи, добавив sort by (...) (или order by (...)). Например, следующий запрос возвращает для каждого host записи за последние 5 минут, отсортированные по убыванию поля _time:

_time:5m | stats by (host) json_values() sort by (_time desc) as json_logs

sort by (...) позволяет выбрать top N записей для каждой группы в сочетании с limit N. Например, следующий запрос выбирает до 3 самых последних записей для каждого host за последние 5 минут:

_time:5m | stats by (host) json_values() sort by (_time desc) limit 3 as json_logs

См. также:

max stats

max(field1, ..., fieldN) – функция пайпа stats, возвращающая максимальное значение по всем указанным полям логов.

Например, следующий запрос возвращает максимальное значение поля duration за последние 5 минут:

_time:5m | stats max(duration) max_duration

Функция max(some_field) обрабатывает отсутствующие значения как пустые строки в соответствии с моделью данных хранилища логов. Отсутствующие значения не влияют на результат max(some_field), если существует хотя бы одно непустое значение для some_field. В противном случае max(some_field) возвращает пустую строку. Используйте синтаксис max(some_field) if (some_field:*) as max_value_without_empty_string для фильтрации пустых строковых значений. Подробнее см. в документации по условной статистике.

Можно вычислить максимальное значение по всем полям с общим префиксом с помощью синтаксиса max(prefix*).

Функция row_max может использоваться для получения других полей записи с максимальным значением.

См. также:

median stats

median(field1, ..., fieldN) – функция пайпа stats, вычисляющая приближённую медиану по указанным полям логов.

Например, следующий запрос возвращает медиану поля duration за последние 5 минут:

_time:5m | stats median(duration) median_duration

Функция median(some_field) обрабатывает отсутствующие значения как пустые строки в соответствии с моделью данных хранилища логов, поэтому отсутствующие (или пустые) значения участвуют в вычислении медианы. Используйте синтаксис median(some_field) if (some_field:*) as median_value_without_empty_string для фильтрации пустых строковых значений. Подробнее см. в документации по условной статистике.

Можно вычислить медиану по всем полям с общим префиксом с помощью синтаксиса median(prefix*).

См. также:

min stats

min(field1, ..., fieldN) – функция пайпа stats, возвращающая минимальное значение по всем указанным полям логов.

Например, следующий запрос возвращает минимальное значение поля duration за последние 5 минут:

_time:5m | stats min(duration) min_duration

Функция min(some_field) обрабатывает отсутствующие значения как пустые строки в соответствии с моделью данных хранилища логов. Если поле some_field отсутствует (или пусто) хотя бы в одной обработанной записи лога, то min(some_field) возвращает пустую строку. Используйте синтаксис min(some_field) if (some_field:*) as min_value_without_empty_string для фильтрации пустых строковых значений. Подробнее см. в документации по условной статистике.

Можно найти минимум по всем полям с общим префиксом с помощью синтаксиса min(prefix*).

Функция row_min может использоваться для получения других полей записи с минимальным значением.

См. также:

quantile stats

quantile(phi, field1, ..., fieldN) – функция пайпа stats, вычисляющая приближённый phi-й перцентиль по значениям указанных полей логов. Параметр phi должен находиться в диапазоне 0 ... 1, где 0 означает 0-й перцентиль, а 1 – 100-й перцентиль.

Например, следующий запрос вычисляет 50-й, 90-й и 99-й перцентили для поля request_duration_seconds за последние 5 минут:

_time:5m | stats
  quantile(0.5, request_duration_seconds) p50,
  quantile(0.9, request_duration_seconds) p90,
  quantile(0.99, request_duration_seconds) p99

Функция quantile(phi, some_field) обрабатывает отсутствующие значения как пустые строки в соответствии с моделью данных хранилища логов, поэтому отсутствующие (или пустые) значения участвуют в вычислении квантиля. Используйте синтаксис quantile(phi, some_field) if (some_field:*) as quantile_value_without_empty_string для фильтрации пустых строковых значений. Подробнее см. в документации по условной статистике.

Можно вычислить квантиль по всем полям с общим префиксом с помощью синтаксиса quantile(phi, prefix*).

См. также:

rate stats

rate() – функция пайпа stats, возвращающая среднюю скорость подходящих записей логов в секунду за выбранный временной диапазон. Если запрос не содержит глобального временного фильтра, rate() возвращает общее количество подходящих записей (аналогично count()).

Например, следующий запрос возвращает среднюю скорость в секунду для записей, содержащих слово error, за последние 5 минут:

_time:5m error | stats rate()

См. также:

rate_sum stats

rate_sum(field1, ..., fieldN) – функция пайпа stats, возвращающая среднюю скорость суммы в секунду по указанным числовым полям. Если запрос не содержит глобального временного фильтра, rate_sum(...) возвращает общую сумму (аналогично sum(...)). Нечисловые значения пропускаются. Если все значения в полях field1, …, fieldN нечисловые, возвращается NaN.

Например, следующий запрос возвращает среднюю скорость суммы поля bytes_sent в секунду за последние 5 минут:

_time:5m | stats rate_sum(bytes_sent)

Можно вычислить среднюю скорость суммы в секунду по всем полям с определённым префиксом с помощью синтаксиса rate_sum(prefix*).

См. также:

row_any stats

row_any() – функция пайпа stats, возвращающая произвольную запись лога (выборочную запись) для каждой выбранной группы stats. Запись лога возвращается в виде JSON-словаря со всеми полями из исходной записи.

Например, следующий запрос возвращает выборочную запись для каждого потока _stream за последние 5 минут:

_time:5m | stats by (_stream) row_any() as sample_row

Поля из возвращённых значений можно декодировать с помощью пайпов unpack_json или extract.

Если нужны только определённые поля, их можно перечислить внутри row_any(...). Например, следующий запрос возвращает только поля _time и path из выборочной записи за последние 5 минут:

_time:5m | stats row_any(_time, path) as time_and_path_sample

Можно вернуть все поля, начинающиеся с определённого префикса, с помощью синтаксиса row_any(prefix*).

См. также:

row_max stats

row_max(field) – функция пайпа stats, возвращающая запись лога с максимальным значением указанного поля. Запись лога возвращается в виде JSON-словаря со всеми полями из исходной записи. Пустые значения указанного поля игнорируются. Если все значения поля пусты, возвращается {}.

Например, следующий запрос возвращает запись лога с максимальным значением поля duration за последние 5 минут:

_time:5m | stats row_max(duration) as log_with_max_duration

Поля из возвращённых значений можно декодировать с помощью пайпов unpack_json или extract.

Если из возвращённой записи нужны только определённые поля, их можно перечислить внутри row_max(...). Например, следующий запрос возвращает только поля _time, path и duration из записи с максимальным значением duration за последние 5 минут. Обратите внимание, что duration должен быть явно указан в row_max(...), если его необходимо вернуть:

_time:5m | stats row_max(duration, _time, path, duration) as time_and_path_with_max_duration

Можно вернуть все поля, начинающиеся с определённого префикса, с помощью синтаксиса row_max(field, prefix*).

См. также:

row_min stats

row_min(field) – функция пайпа stats, возвращающая запись лога с минимальным значением указанного поля. Запись лога возвращается в виде JSON-словаря со всеми полями из исходной записи. Пустые значения указанного поля игнорируются. Если все значения поля пусты, возвращается {}.

Например, следующий запрос возвращает запись лога с минимальным значением поля duration за последние 5 минут:

_time:5m | stats row_min(duration) as log_with_min_duration

Поля из возвращённых значений можно декодировать с помощью пайпов unpack_json или extract.

Если из возвращённой записи нужны только определённые поля, их можно перечислить внутри row_min(...). Например, следующий запрос возвращает только поля _time, path и duration из записи с минимальным значением duration за последние 5 минут. Обратите внимание, что duration должен быть явно указан в row_min(...), если его необходимо вернуть:

_time:5m | stats row_min(duration, _time, path, duration) as time_and_path_with_min_duration

Можно вернуть все поля, начинающиеся с определённого префикса, с помощью синтаксиса row_min(field, prefix*).

См. также:

sum stats

sum(field1, ..., fieldN) – функция пайпа stats, вычисляющая сумму числовых значений по всем указанным полям логов. Нечисловые значения пропускаются. Если все значения в полях field1, …, fieldN нечисловые, возвращается NaN.

Например, следующий запрос возвращает сумму числовых значений поля duration за последние 5 минут:

_time:5m | stats sum(duration) sum_duration

Можно найти сумму по всем полям с общим префиксом с помощью синтаксиса sum(prefix*).

См. также:

sum_len stats

sum_len(field1, ..., fieldN) – функция пайпа stats, вычисляющая сумму длин (в байтах) всех значений указанных полей логов.

Например, следующий запрос возвращает сумму длин в байтах полей _msg для всех записей за последние 5 минут:

_time:5m | stats sum_len(_msg) messages_len

Можно найти сумму длин по всем полям с общим префиксом с помощью синтаксиса sum_len(prefix*).

См. также:

uniq_values stats

uniq_values(field1, ..., fieldN) – функция пайпа stats, возвращающая уникальные непустые значения по указанным полям логов. Возвращаемые значения кодируются в отсортированный JSON-массив.

Например, следующий запрос возвращает уникальные непустые значения поля ip за последние 5 минут:

_time:5m | stats uniq_values(ip) unique_ips

Возвращённые уникальные IP-адреса можно развернуть в отдельные записи с помощью пайпа unroll.

Каждое уникальное значение хранится в памяти во время выполнения запроса. Большое количество уникальных значений может потребовать значительного объёма памяти. Иногда достаточно вернуть только подмножество уникальных значений. В этом случае добавьте limit N после uniq_values(...), чтобы ограничить количество возвращаемых уникальных значений числом N и снизить максимальное потребление памяти. Например, следующий запрос возвращает до 100 уникальных значений поля ip за последние 5 минут:

_time:5m | stats uniq_values(ip) limit 100 as unique_ips_100

Если лимит достигнут, возвращается подмножество уникальных значений. Это подмножество не гарантированно стабильно при повторных выполнениях запроса.

Можно найти уникальные значения по всем полям с общим префиксом с помощью синтаксиса uniq_values(prefix*).

См. также:

values stats

values(field1, ..., fieldN) – функция пайпа stats, возвращающая все значения (включая пустые) по указанным полям логов. Возвращаемые значения кодируются в JSON-массив.

Например, следующий запрос возвращает все значения поля ip за последние 5 минут:

_time:5m | stats values(ip) ips

Возвращённые IP-адреса можно развернуть в отдельные записи с помощью пайпа unroll.

Можно ограничить количество возвращаемых значений с помощью limit N. Если лимит достигнут, возвращается подмножество значений. Это подмножество не гарантированно стабильно при повторных выполнениях запроса.

Можно получить значения по всем полям с общим префиксом с помощью синтаксиса values(prefix*).

См. также:


Навигация