Seq API
Seq API предоставляет:
- доступ к логам, хранящимся в seq-db
- расчет агрегаций и гистограмм на основе логов
- доступ к ограничениям seq-ui и состоянию хранилищ seq-db
HTTP API
Базовый URL-адрес: /seqapi/v1
Вы также можете использовать swagger-файл для подробного просмотра HTTP API.
GET /fields
Возвращает список индексированных полей, указанных в mapping-файле seq-db, а также системные и закрепл енные поля из конфига.
Авторизация: НЕТ
Запрос
curl -X GET \
"http://localhost:5555/seqapi/v1/fields" \
-H "accept: application/json"
Ответ
{
"fields": [
{
"name": "message",
"type": "text"
},
{
"name": "level",
"type": "keyword"
}
],
"system_fields": [
{
"name": "message",
"type": "keyword"
}
],
"pinned_fields": [
{
"name": "level",
"type": "keyword"
}
]
}
POST /search
Возвращает список событий, удовлетворяющих поисковому запросу.
Позволяет получить агрегации и гистограмму в рамках одного запроса.
Авторизация: ДА
Тело запроса (application/json):
query(string, optional): Поисковый запрос.from(string, required): Временная метка начала поиска вdate-timeформате.to(string, required): Временная метка окончания поиска вdate-timeформате.histogram(object, optional): Запрос гистограммы.interval(string, required): Интервал гистограммы вdurationформате.
aggregations([]object, optional): Список запросов на агрегацию (см. /aggregation для подробностей).limit(int, required): Ограничение поиска.offset(int, optional): Смещение поиска.withTotal(bool, optional): Если задано, то возвращает общее количество найденных событий.order(enum, optional): Порядок поиска. Одно из"desc"|"asc"(по умолчанию"desc").offset_id(string, optional): Курсор пагинации. Ответ запроса содержит события, следующие за указанным идентификатором. Альтернативаoffset: в одном запросе можно задать только одно из этих полей.downsample(uint32, optional): коэффициент случайного семплирования результата. Чем больше значение, тем меньше доля возвращаемых событий.
Запрос
curl -X POST \
"http://localhost:5555/seqapi/v1/search" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '
{
"query": "message:error or level:3",
"from": "2025-09-10T07:00:00Z",
"to": "2025-09-10T08:00:00Z",
"limit": 3,
"offset": 0,
"withTotal": true
}'
Ответ
{
"events": [
{
"id": "a78ea33299010000-4101e1b86db21cc9",
"data": {
"level": "6",
"message": "no error",
"timestamp": "2025-09-10 07:54:03.862"
},
"time": "2025-09-10T07:54:03.862Z"
},
{
"id": "a78ea33299010000-410190f323c58b98",
"data": {
"level": "3",
"message": "Unexpected packet Data received from client",
"timestamp": "2025-09-10 07:50:02.123"
},
"time": "2025-09-10T07:50:02.123Z"
},
{
"id": "a78ea33299010000-4101ee1666b9be8f",
"data": {
"level": "3",
"message": "Too many parts",
"timestamp": "2025-09-10 07:42:12.456"
},
"time": "2025-09-10T07:42:12.456Z"
}
],
"total": "52",
"error": {
"code": "ERROR_CODE_NO"
}
}
GET /events/{id}
Возвращает конкретное событие по его идентификатору.
Авторизация: ДА
Параметры:
id(string, required): Уникальный идентификатор события.
Запрос
curl -X GET \
"http://localhost:5555/seqapi/v1/events/a78ea33299010000-410190f323c58b98" \
-H "accept: application/json"
Ответ
{
"event": {
"id": "a78ea33299010000-410190f323c58b98",
"data": {
"level": "3",
"message": "Unexpected packet Data received from client",
"timestamp": "2025-09-10 07:50:02.123"
},
"time": "2025-09-10T07:50:02.123Z"
}
}
POST /export
Скачивает события в файл в указанном формате.
Авторизация: ДА
Тело запроса (application/json):
format(enum, optional): Формат экспорта. Одно из"jsonl"|"csv"(по умолчанию"jsonl").query(string, optional): Поисковый запрос.from(string, required): Временная метка начала поиска вdate-timeформате.to(string, required): Временная метка окончания поиска вdate-timeформате.limit(int, required): Ограничение поиска.offset(int, optional): Смещение поиска.fields([]string, optional): Список полей для экспорта (только дляformat:csv, в этом случае список должен быть непустым).downsample(uint32, optional): коэффициент случайного семплирования результата. Чем больше значение, тем меньше доля возвращаемых событий.
Запрос
JSONL:
curl -X POST \
"http://localhost:5555/seqapi/v1/export" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '
{
"format": "jsonl",
"query": "message:error or level:3",
"from": "2025-09-10T07:00:00Z",
"to": "2025-09-10T08:00:00Z",
"limit": 3,
"offset": 0
}'
CSV:
curl -X POST \
"http://localhost:5555/seqapi/v1/export" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '
{
"format": "csv",
"fields": ["level", "message"],
"query": "message:error or level:3",
"from": "2025-09-10T07:00:00Z",
"to": "2025-09-10T08:00:00Z",
"limit": 3,
"offset": 0
}'
Ответ
Данные возвращаются фрагментами (чанками). Конец ответа можно определить по заголовку Content-Length: 0.
JSONL:
{"id": "a78ea33299010000-4101e1b86db21cc9","data": {"level": "6","message": "no error","timestamp": "2025-09-10 07:54:03.862"},"time": "2025-09-10T07:54:03.862Z"}
{"id": "a78ea33299010000-410190f323c58b98","data": {"level": "3","message": "Unexpected packet Data received from client","timestamp": "2025-09-10 07:50:02.123"},"time": "2025-09-10T07:50:02.123Z"}
{"id": "a78ea33299010000-4101ee1666b9be8f","data": {"level": "3","message": "Too many parts","timestamp": "2025-09-10 07:42:12.456"},"time": "2025-09-10T07:42:12.456Z"}
CSV:
level,message
6,no error
3,Unexpected packet Data received from client
3,Too many parts
POST /aggregation
Рассчитывает агрегации на основе событий, удовлетворяющих поисковому запросу.
Агрегации также могут быть получены с помощью /search.
Авторизация: ДА
Тело запроса (application/json):
query(string, optional): Поисковый запрос.from(string, required): Временная метка начала поиска вdate-timeформате.to(string, required): Временная метка окончания поиска вdate-timeформате.aggregations([]object, required): Список запросов на агрегацию.agg_func(enum, optional): Агрегатная функция. Одно из"count"|"sum"|"min"|"max"|"avg"|"quantile"|"unique"(по умолчанию"count").field(string, required): Поле для расчета агрегации.group_by(string, optional): Поле для группировки результатов агрегирования.quantiles([]int, optional): Список квантилей (только дляagg_func:quantile, в этом случае список должен быть непустым).
downsample(uint32, optional): коэффициент случайного семплирования результата. Чем больше значение, тем меньше доля возвращаемых событий.
Запрос
curl -X POST \
"http://localhost:5555/seqapi/v1/aggregation" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '
{
"query": "_exists_:level",
"from": "2025-09-10T07:00:00Z",
"to": "2025-09-10T08:00:00Z",
"aggregations": [
{
"agg_func": "count",
"field": "level"
}
]
}'