Запросы к Данным
IceGate предоставляет API, совместимые с Loki и Tempo, для запросов к данным наблюдаемости, а также
Arrow Flight SQL для универсального SQL. API, совместимый с Prometheus,
запланирован, но пока не реализован - до тех пор запрашивайте метрики через Flight SQL. Источником
истины о том, какие эндпоинты обслуживаются сегодня, являются страницы справочника API.
LogQL для Логов
LogQL - язык запросов для логов, совместимый с Grafana Loki.
Селектор Потока Логов
Выбор логов по меткам:
# Выбор по имени сервиса
{service_name="api-service"}
# Несколько меток
{service_name="api-service", severity_text="ERROR"}
# Сопоставление по регулярному выражению
{service_name=~"api-.*"}
# Отрицательное сопоставление
{service_name!="internal-service"}
Фильтры Строк
Фильтрация строк логов по содержимому:
# Содержит
{service_name="api-service"} |= "error"
# Не содержит
{service_name="api-service"} != "debug"
# Сопоставление по regex
{service_name="api-service"} |~ "status=[45][0-9][0-9]"
# Не совпадает с regex
{service_name="api-service"} !~ "health"
Фильтры Меток
Фильтрация по значениям меток:
# Числовое сравнение
{service_name="api-service"} | severity_number > 8
# Сравнение длительности
{service_name="api-service"} | duration > 1s
# Сравнение байтов
{service_name="api-service"} | bytes > 1KB
Метрические Запросы
Агрегация логов в метрики:
# Подсчёт логов за время
count_over_time({service_name="api-service"}[5m])
# Частота логов в секунду
rate({service_name="api-service"}[1m])
# Пропускная способность в байтах
bytes_rate({service_name="api-service"}[5m])
# Проверка отсутствия логов
absent_over_time({service_name="api-service"}[1h])
Векторные Агрегации
Агрегация по измерениям меток:
# Сумма по сервису
sum by (service_name) (count_over_time({job="app"}[5m]))
# Средняя частота
avg(rate({service_name=~".*"}[1m]))
# Топ сервисов по объёму логов
sum by (service_name) (bytes_rate({job="app"}[5m]))
Запросы в Реальном Времени (WAL)
По умолчанию сервис запросов читает только зафиксированные данные Iceberg. Чтобы также запрашивать данные, которые ещё не были перенесены в Iceberg (данные WAL возрастом в секунды), включите WAL-запросы в конфигурации сервиса запросов:
engine:
wal_query_enabled: true
wal_metadata_size_hint: 65536 # Bytes for WAL footer reads
При включении запросы читают из обоих источников:
- Таблицы Iceberg - Исторические, компактированные данные
- Сегменты WAL - Данные в реальном времени, ещё не перенесённые
Примечание: Эндпоинты метаданных /labels, /label/{name}/values и /series всегда читают только из Iceberg, независимо от этой настройки.
Статус Реализации
| Возможность | Статус |
|---|---|
| Выбор логов | ✅ Реализовано |
Сопоставление меток (=, !=, =~, !~) |
✅ Реализовано |
Фильтры строк (|=, !=, |~, !~) |
✅ Реализовано |
| count_over_time | ✅ Реализовано |
| rate | ✅ Реализовано |
| bytes_over_time | ✅ Реализовано |
| bytes_rate | ✅ Реализовано |
| absent_over_time | ✅ Реализовано |
| Векторные агрегации (sum, avg, min, max, count) | ✅ Реализовано |
| Pipeline парсеры (json, logfmt) | ❌ Пока нет |
| Unwrap агрегации | ❌ Пока нет |
Примеры Запросов
Недавние Ошибки
{service_name="api-service", severity_text="ERROR"}
Частота Ошибок по Сервису
sum by (service_name) (
rate({severity_text="ERROR"}[5m])
)
Тренды Объёма Логов
sum(count_over_time({job="app"}[1h]))
Использование API
Query Range
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="api-service"}' \
--data-urlencode 'start=1704067200' \
--data-urlencode 'end=1704153600' \
--data-urlencode 'limit=1000' \
-H "X-Scope-OrgID: my-tenant"
Доступные Метки
curl http://localhost:3100/loki/api/v1/labels \
-H "X-Scope-OrgID: my-tenant"
Значения Меток
curl http://localhost:3100/loki/api/v1/label/service_name/values \
-H "X-Scope-OrgID: my-tenant"
Следующие Шаги
- Изучите Справочник Loki API
- Настройте Мультитенантность
- Узнайте о Модели Данных