Справочник Loki API
IceGate предоставляет HTTP API, совместимый с Loki®, для запросов к логам - на порту 3100. Ниже
описаны реализованные эндпоинты: это подмножество API Loki, а не полная реализация, поэтому всё,
что здесь не перечислено, следует считать нереализованным. Атрибуцию см. в разделе
Товарные знаки.
Базовый URL
http://localhost:3100
Аутентификация
Все запросы требуют заголовок X-Scope-OrgID для идентификации тенанта:
X-Scope-OrgID: my-tenant
Эндпоинты
Instant Query
Запрос логов или метрик в определённый момент времени.
Эндпоинт: GET /loki/api/v1/query или POST /loki/api/v1/query
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
query |
string | Да | Запрос LogQL |
time |
int | Нет | Временная метка вычисления (Unix секунды или наносекунды). По умолчанию: текущее время |
limit |
int | Нет | Максимальное количество записей (по умолчанию: 100) |
direction |
string | Нет | forward или backward (по умолчанию: backward) |
Пример:
curl -G http://localhost:3100/loki/api/v1/query \
--data-urlencode 'query=count_over_time({service_name="api-service"}[5m])' \
-H "X-Scope-OrgID: my-tenant"
Query Range
Запрос логов или метрик за диапазон времени.
Эндпоинт: GET /loki/api/v1/query_range
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
query |
string | Да | Запрос LogQL |
start |
int | Да | Начальная временная метка (Unix секунды или наносекунды) |
end |
int | Да | Конечная временная метка (Unix секунды или наносекунды) |
limit |
int | Нет | Максимальное количество записей (по умолчанию: 100) |
step |
duration | Нет | Шаг разрешения запроса (например, "5m") |
direction |
string | Нет | forward или backward (по умолчанию: backward) |
Пример:
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"
Ответ (Запрос Логов):
{
"status": "success",
"data": {
"resultType": "streams",
"result": [
{
"stream": {
"service_name": "api-service",
"severity_text": "INFO"
},
"values": [
["1704067200000000000", "Request processed successfully"]
]
}
]
}
}
Ответ (Метрический Запрос):
{
"status": "success",
"data": {
"resultType": "matrix",
"result": [
{
"metric": {
"service_name": "api-service"
},
"values": [
[1704067200, "42"],
[1704067500, "38"]
]
}
]
}
}
Labels
Получение всех имён меток.
Эндпоинт: GET /loki/api/v1/labels
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
start |
int | Нет | Начальная временная метка |
end |
int | Нет | Конечная временная метка |
Пример:
curl http://localhost:3100/loki/api/v1/labels \
-H "X-Scope-OrgID: my-tenant"
Ответ:
{
"status": "success",
"data": [
"service_name",
"severity_text",
"trace_id"
]
}
Label Values
Получение значений для конкретной метки.
Эндпоинт: GET /loki/api/v1/label/{name}/values
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
start |
int | Нет | Начальная временная метка |
end |
int | Нет | Конечная временная метка |
Пример:
curl http://localhost:3100/loki/api/v1/label/service_name/values \
-H "X-Scope-OrgID: my-tenant"
Ответ:
{
"status": "success",
"data": [
"api-service",
"worker-service",
"gateway"
]
}
Series
Получение наборов меток, соответствующих селекторам.
Эндпоинт: GET /loki/api/v1/series
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
match[] |
string | Да | Селектор(ы) потока логов |
start |
int | Нет | Начальная временная метка |
end |
int | Нет | Конечная временная метка |
Пример:
curl -G http://localhost:3100/loki/api/v1/series \
--data-urlencode 'match[]={service_name=~"api-.*"}' \
-H "X-Scope-OrgID: my-tenant"
Ответ:
{
"status": "success",
"data": [
{"service_name": "api-service", "severity_text": "INFO"},
{"service_name": "api-gateway", "severity_text": "ERROR"}
]
}
Explain
Получение плана выполнения запроса (расширение IceGate).
Эндпоинт: GET /loki/api/v1/explain
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
query |
string | Да | Запрос LogQL |
Пример:
curl -G http://localhost:3100/loki/api/v1/explain \
--data-urlencode 'query=count_over_time({service_name="api-service"}[5m])' \
-H "X-Scope-OrgID: my-tenant"
Health Check
Эндпоинт: GET /ready
Ответ:
{"status": "ready"}
Ответы об Ошибках
Все ошибки возвращают JSON ответ:
{
"status": "error",
"errorType": "bad_data",
"error": "invalid query syntax"
}
| Тип Ошибки | HTTP Статус | Описание |
|---|---|---|
bad_data |
400 | Некорректный запрос или выражение |
not_implemented |
501 | Функция не реализована |
internal |
500 | Внутренняя ошибка сервера |
Следующие Шаги
- Изучите Запросы LogQL
- Изучите Prometheus API - запланирован, пока не реализован
- Смотрите Tempo API для трейсов