Справочник API платформы
На этой странице:
- API для работы с данными телеметрии
- API для управления платформой
- Сводная таблица стандартов API
- Аутентификация запросов к OLAP API
Proto Observability Platform предоставляет набор API для загрузки и выгрузки данных телеметрии, а также для управления конфигурацией платформы. Все API доступны через единую точку входа платформы.
API для работы с данными телеметрии
Получение (выгрузка) данных
Метрики
Prometheus-совместимый HTTP API для запросов метрик на языке PromQL.
Базовый путь: /promqlapi/
| Эндпоинт | Метод | Описание |
|---|---|---|
/promqlapi/api/v1/query | GET/POST | Мгновенный запрос (instant query) |
/promqlapi/api/v1/query_range | GET/POST | Запрос за диапазон времени (range query) |
/promqlapi/api/v1/series | GET | Метаданные серий |
/promqlapi/api/v1/labels | GET | Список имён меток |
/promqlapi/api/v1/label/{name}/values | GET | Значения конкретной метки |
/promqlapi/federate | GET | Федерация метрик |
Протокол: PromQL over HTTP (Prometheus-совместимый API).
Логи
API для запросов логов на языке LogsQL.
Базовый путь: /logsqlapi/
| Эндпоинт | Метод | Описание |
|---|---|---|
/logsqlapi/select/logsql/query | GET | Запросы логов с синтаксисом LogsQL |
/logsqlapi/select/logsql/hits | GET | Гистограмма совпадений по времени |
/logsqlapi/select/logsql/field_names | GET | Доступные имена полей |
/logsqlapi/select/logsql/field_values | GET | Значения указанного поля |
Протокол: LogsQL over HTTP.
Трейсы
| Префикс | Описание |
|---|---|
/traces | Список трейсов, сервисы, операции, инстансы, теги |
Экспорт отдельного трейса в открытых форматах
Любой отдельный распределённый трейс можно выгрузить в открытом, вендоронезависимом формате — для независимого анализа, отладки, долговременного архива проблемных трейсов или передачи в другую команду. Данные платформы не заперты в проприетарном формате и в любой момент могут быть выгружены в переносимом виде. Выгрузка доступна двумя путями: по API (описан ниже) и из интерфейса платформы — см. Выгрузка из интерфейса. Поддерживаются три формата:
| Эндпоинт | Метод | Формат | Куда загружать |
|---|---|---|---|
/protoobp-api/traces/{traceId}/otlp | GET | OTLP/JSON (OpenTelemetry) | Любой инструмент экосистемы OpenTelemetry, принимающий OTLP |
/protoobp-api/traces/{traceId}/zipkin | GET | Zipkin v2 JSON | Zipkin (POST /api/v2/spans), Jaeger с Zipkin-совместимым приёмником и др. |
/protoobp-api/traces/{traceId}/jaeger | GET | Jaeger JSON (нативный) | Jaeger UI («Upload JSON» / «Load JSON»), Jaeger-совместимые инструменты |
Все три эндпоинта авторизуются тем же токеном, что и остальные API платформы, и подчиняются тем же правам доступа к сервисам (RBAC), что и просмотр трейса в интерфейсе.
Параметры запроса (общие для всех форматов):
| Параметр | Расположение | Обязательный | Описание |
|---|---|---|---|
traceId | путь | да | Идентификатор трейса |
service | query | нет | Ограничить выборку спанами указанного сервиса |
start_time | query | нет | Начало окна поиска спанов (Unix-время в наносекундах) |
end_time | query | нет | Конец окна поиска спанов (Unix-время в наносекундах) |
Коды ответа (общие для всех форматов):
200— трейс успешно выгружен;400— идентификатор трейса не передан или имеет некорректный формат;403— у пользователя нет доступа ни к одному сервису, участвующему в трейсе;404— трейс не найден (не существует или вышел за пределы срока хранения).
Пример запроса (замените otlp на zipkin или jaeger для соответствующего формата):
curl -H "Authorization: Bearer $TOKEN" \
"https://<адрес-платформы>/protoobp-api/traces/<traceId>/otlp" -o trace-otlp.json
Выгрузка из интерфейса
Те же форматы доступны без обращения к API. Откройте трейс (раздел Трейсы или переход из дашборда сервиса, транзакции либо алерта) и на вкладке Дерево нажмите кнопку Экспорт в панели инструментов водопада. В меню четыре пункта:
| Пункт меню | Что выгружается | Имя файла |
|---|---|---|
| Внутренний JSON | Спаны трейса в формате платформы — для передачи в поддержку и разбора внутри ProtoOBP | trace-<traceId>.json |
| OTLP/JSON | Открытый формат OpenTelemetry | trace-<traceId>-otlp.json |
| Zipkin v2 JSON | Открытый формат Zipkin | trace-<traceId>-zipkin.json |
| Jaeger JSON | Нативный формат Jaeger | trace-<traceId>-jaeger.json |
Файл сохраняется браузером как обычная загрузка. Окно поиска спанов совпадает с временным диапазоном, выбранным в панели времени, — тем же, в котором открыт водопад трейса. Права доступа те же, что и при просмотре трейса: если у учётной записи нет доступа к сервисам трейса, интерфейс сообщит о нехватке прав, а если трейс уже вышел за пределы срока хранения — что трейс не найден.
Формат OTLP/JSON
Ответ соответствует конвенциям OTLP/JSON: идентификаторы трейса и спанов — шестнадцатеричные строки, метки времени в наносекундах — строки, перечислимые поля (kind, status.code) — числа. Спаны сгруппированы по сервису: на каждый сервис — один блок resourceSpans с атрибутом ресурса service.name. Тело ответа — ExportTraceServiceRequest в кодировке OTLP/JSON, поэтому его можно без преобразований загрузить в любой инструмент, поддерживающий приём OTLP-данных.
{
"resourceSpans": [
{
"resource": {
"attributes": [
{ "key": "service.name", "value": { "stringValue": "payment" } }
]
},
"scopeSpans": [
{
"scope": { "name": "protoobp" },
"spans": [
{
"traceId": "abcdef0123456789abcdef0123456789",
"spanId": "0000000000000002",
"parentSpanId": "0000000000000001",
"name": "POST /pay",
"kind": 3,
"startTimeUnixNano": "1737800000000000000",
"endTimeUnixNano": "1737800000200000000",
"attributes": [
{ "key": "http.method", "value": { "stringValue": "POST" } }
],
"status": { "code": 2, "message": "gateway timeout" }
}
]
}
]
}
]
}
Атрибуты спана формируются из его тегов и числовых метрик; корневой спан не содержит поля parentSpanId, а поле status присутствует только у спанов с ошибкой (code: 2).
Формат Zipkin v2 JSON
Ответ — это голый JSON-массив объектов-спанов по спецификации Zipkin v2. Идентификаторы трейса и спанов — шестнадцатеричные строки в нижнем регистре (traceId — 32 символа, id и parentId — 16). Метки времени timestamp и duration — в микросекундах. Вид спана kind (SERVER/CLIENT/PRODUCER/CONSUMER) заполняется, если известен; сервис-источник указывается в localEndpoint.serviceName, удалённый сервис (для исходящих вызовов) — в remoteEndpoint.serviceName.
[
{
"traceId": "abcdef0123456789abcdef0123456789",
"id": "0000000000000002",
"parentId": "0000000000000001",
"name": "POST /pay",
"kind": "CLIENT",
"timestamp": 1737800000000000,
"duration": 200000,
"localEndpoint": { "serviceName": "payment" },
"remoteEndpoint": { "serviceName": "payment-gateway" },
"tags": {
"http.method": "POST",
"http.status_code": "504",
"error": "true"
}
}
]
Теги спана формируются из его строковых тегов и числовых метрик; корневой спан не содержит поля parentId, а тег error со значением true присутствует только у спанов с ошибкой. Выгруженный массив можно без преобразований загрузить прямо в приёмник Zipkin:
curl -X POST -H "Content-Type: application/json" \
--data @trace-zipkin.json \
"http://<адрес-zipkin>:9411/api/v2/spans"
Формат Jaeger JSON
Ответ — объект-обёртка в нативной модели Jaeger, том же представлении, которое отдаёт jaeger-query по GET /api/traces/{id} (поле data). Полученный файл можно открыть прямо в Jaeger UI: на странице поиска трейсов нажмите «Upload JSON» / «Load JSON» и выберите файл — трейс отобразится со всей иерархией спанов.
{
"data": [
{
"traceID": "00000000000000000000000000000001",
"spans": [
{
"traceID": "00000000000000000000000000000001",
"spanID": "0000000000000002",
"operationName": "POST /pay",
"references": [
{ "refType": "CHILD_OF", "traceID": "00000000000000000000000000000001", "spanID": "0000000000000001" }
],
"startTime": 5000500,
"duration": 200000,
"tags": [
{ "key": "span.kind", "type": "string", "value": "client" },
{ "key": "error", "type": "bool", "value": true }
],
"logs": [],
"processID": "p2",
"warnings": null
}
],
"processes": {
"p1": { "serviceName": "cart", "tags": [] },
"p2": { "serviceName": "payment", "tags": [] }
},
"warnings": null
}
],
"total": 0,
"limit": 0,
"offset": 0,
"errors": null
}
Ключевые особенности представления:
- Идентификаторы — шестнадцатеричные строки в нижнем регистре:
traceID— 32 символа,spanIDиspanIDв ссылках — 16. - Метки времени
startTimeиduration— в микросекундах. - Родственные связи выражаются через массив
references(типCHILD_OF); корневой спан имеет пустой массивreferences. - Теги типизированы (
{key, type, value}): строковые теги спана —string, числовые метрики —float64, признак ошибки —error: true(bool, присутствует только у спанов с ошибкой). Вид спанаspan.kindпопадает в теги из метаданных спана. - Каждый спан ссылается на процесс (
processID); таблицаprocessesсопоставляет идентификатор процесса сервису-источнику (serviceName).
Метрики сервисов, алерты и аналитика
Аналитические запросы по трейсам, ошибкам, алертам, бизнес-транзакциям и другим доменам выполняются через OLAP API семантического слоя данных.
Базовый путь: /cubejs-api/
| Эндпоинт | Метод | Описание |
|---|---|---|
/cubejs-api/v1/load | GET/POST | Выполнение OLAP-запросов (меры, измерения, фильтры, время) |
/cubejs-api/v1/meta | GET | Метаданные схемы (доступные модели, меры, измерения) |
/cubejs-api/v1/sql | GET/POST | Предпросмотр SQL-запроса |
Модели данных: 60+ моделей, покрывающих домены – сервисы, спаны, вызовы, ошибки, RUM, браузер, сессии, бизнес-транзакции, бизнес-процессы, алерты, действия, события, ресурсы, здоровье, воронки, метрики мониторинга БД и другие.
Протокол: OLAP REST API с JSON-языком запросов.
Загрузка внешних данных в платформу
Метрики
| Эндпоинт | Метод | Описание |
|---|---|---|
/promqlapi/api/v1/write | POST | Remote write (протокол Prometheus remote write) |
Протокол: Prometheus remote write.
Логи
| Эндпоинт | Метод | Описание |
|---|---|---|
/insert/opentelemetry/v1/logs | POST | Приём логов по протоколу OTLP/HTTP (рекомендуется) |
/insert/elasticsearch/_bulk | POST | Приём логов в формате Elasticsearch Bulk API |
/insert/jsonline | POST | Приём логов в формате JSON stream (ndjson) |
/insert/loki/api/v1/push | POST | Приём логов в формате Loki JSON API |
/insert/datadog/api/v2/logs | POST | Приём логов в формате DataDog API |
Параметры обработки полей можно передавать через строку запроса или HTTP-заголовки:
| Параметр | HTTP-заголовок | Описание |
|---|---|---|
_msg_field | VL-Msg-Field | Поле с текстом сообщения (по умолчанию _msg) |
_time_field | VL-Time-Field | Поле с временной меткой (по умолчанию _time) |
_stream_fields | VL-Stream-Fields | Поля, определяющие лог-поток (через запятую) |
ignore_fields | VL-Ignore-Fields | Поля для исключения (через запятую, поддерживает prefix*) |
extra_fields | VL-Extra-Fields | Дополнительные поля в формате name=value (через запятую) |
Подробнее о настройке агентов и коллекторов: Получение данных логов.
Трейсы
Загрузка трейсов выполняется через инструментацию приложений с помощью трейсеров или OpenTelemetry Collector. Подробнее: Инструментация.
Алерты
Платформа принимает алерты от внешних систем мониторинга в двух форматах:
| Эндпоинт | Метод | Формат | Описание |
|---|---|---|---|
/api/v2/alertprocess | POST | Alertmanager webhook | Приём алертов в формате Alertmanager webhook (обёртка с полями receiver, groupKey, alerts[], groupLabels) |
/api/v2/alerts | POST | Массив алертов | Приём алертов в виде плоского массива объектов, например, от VictoriaMetrics vmalert (поля: startsAt, endsAt, generatorURL, labels, annotations) |
API для управления платформой
Платформа предоставляет REST API для управления конфигурацией. Протокол: REST/JSON.
Правила алертинга
REST API с документацией OpenAPI/Swagger.
| Эндпоинт | Метод | Описание |
|---|---|---|
/rulesapi/rules | GET/POST/PUT/DELETE | CRUD правил алертинга + клонирование |
/rulesapi/groups | GET | Список групп правил |
/rulesapi/deploy | POST | Экспорт и применение конфигурации (YAML) |
/rulesapi/rulepolicy/receivers | GET/POST/PUT/DELETE | CRUD получателей уведомлений |
/rulesapi/rulepolicy/routes | GET/POST/PUT/DELETE | CRUD маршрутов + управление приоритетами |
/rulesapi/rulepolicy/deploy | POST | Применение политики алертинга |
/rulesapi/swagger/* | GET | OpenAPI/Swagger документация |
Бизнес-транзакции
| Группа API | Префикс | Описание |
|---|---|---|
| Ключевые бизнес-транзакции | /transactions | CRUD + массовое удаление |
| Правила обнаружения BT | /bt-detection-rules | CRUD + тестирование паттернов + применение ко всем |
| RUM бизнес-транзакции | /rum-key-business-transactions | CRUD |
| RUM правила обнаружения | /rum-bt-detection-rules | CRUD + тестирование паттернов |
Бизнес-процессы
| Префикс | Описание |
|---|---|
/business-processes | CRUD + вложенные шаги + порядок |
Сегменты и пороги
| Префикс | Описание |
|---|---|
/protoobp-api/segments | CRUD сегментов + массовое удаление |
/protoobp-api/apdex-thresholds | CRUD порогов Apdex по сервису |
/protoobp-api/data-extraction-rules | CRUD правил извлечения данных |
Ресурсная модель
| Префикс | Описание |
|---|---|
/protoobp-api/resource-types | CRUD типов ресурсов |
/protoobp-api/resources | CRUD ресурсов + сводки + соседи + граф зависимостей |
/protoobp-api/resource-relationships | CRUD связей ресурсов |
/protoobp-api/relationship-types | CRUD типов связей |
/protoobp-api/ci-classes | CRUD CI-классов |
/protoobp-api/ci-subclasses | CRUD CI-подклассов |
RBAC-администрирование
| Префикс | Описание |
|---|---|
/protoobp-api/rbac/* | Роли, разрешения, привязки, аудит |
Сводная таблица стандартов API
| Стандарт | Где используется |
|---|---|
| PromQL over HTTP | Запросы и запись метрик |
| LogsQL over HTTP | Запросы логов |
| OLAP REST API | Аналитические запросы (трейсы, алерты, бизнес-транзакции и др.) |
| REST/JSON | Управление конфигурацией платформы |
| REST/HTTP (мультиформатный) | Приём логов (OTLP, Elasticsearch, JSON, Loki, DataDog) |
| OpenAPI/Swagger | Документация API правил алертинга |
| Alertmanager webhook | Приём алертов от внешних систем |
Аутентификация запросов к OLAP API
Начиная с версии v200 платформа включает RBAC по умолчанию. Все запросы к /cubejs-api/* обязаны нести валидный Bearer токен, выданный сервисом proto-auth. Запросы без токена возвращают 401 TOKEN_MISSING.
Внешний клиент предъявляет access token proto-auth (RS256) в заголовке Authorization: Bearer <jwt>.
Подключение внешнего клиента
Для каждой внешней интеграции (скрипта, BI-инструмента, дашборда) заводится отдельный пользователь платформы с правами на нужные сервисы.
Шаг 1. Подготовка пользователя. В платформе создаётся отдельный пользователь под интеграцию. В веб-интерфейсе платформы (Настройки → Роли и доступ) этому аккаунту назначаются роли с правом просмотр на сервисы, к которым нужен доступ. Аккаунту с правом {admin, *, *} доступны все сервисы.
Шаг 2. Получение access token у proto-auth:
ACCESS_TOKEN=$(curl -s -X POST \
"https://<платформа>/realms/protoobp/protocol/openid-connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password" \
-d "client_id=ui" \
-d "username=$INTEGRATION_USER" \
-d "password=$INTEGRATION_PASSWORD" \
| jq -r '.access_token')
Параметры запроса:
- Realm —
protoobp(фиксированное имя realm вproto-auth). client_id=ui— клиент realm-аprotoobpс включённымDirect Access Grants. Дополнительный клиент под интеграцию заводить не требуется.- Endpoint — стандартный OpenID Connect
tokenendpoint вproto-auth.
Шаг 3. Вызов CubeJS API через платформу:
curl -s -X POST "https://<платформа>/cubejs-api/v1/load" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": {
"measures": ["Calls.count"],
"dimensions": ["Calls.service"],
"timeDimensions": [{"dimension": "Calls.date", "dateRange": "today"}]
}
}'
Сервисы, на которые у пользователя нет прав, в результате не появляются.
Типовые ошибки и замечания
- Время жизни access token. Токены
proto-authкороткоживущие (по умолчанию около 5 минут). Долгоживущие интеграции должны обновлять токен черезrefresh_tokenлибо повторно вызывать/tokenперед каждым запросом. - Отдельный аккаунт на интеграцию. Каждой интеграции рекомендуется заводить собственного пользователя платформы с минимально необходимым набором ролей — это упрощает аудит и отзыв прав.
- Миграция с pre-v200. Скрипты, работавшие с CubeJS API на версии v199 без аутентификации, на v200 будут получать
401 TOKEN_MISSING. Решение — завести отдельного пользователя платформы, назначить роли и перейти на схему авторизации с Bearer-токеном, описанную выше.