Зеркалирование через API

Блок зеркалирования трафика сервиса задаётся только через REST API: отдельной формы в интерфейсе у него нет. Набор операций тот же, что и у остальных настроек конфигурации балансировки.

Запросы отправляйте на адрес сервера бэкенда, токен передавайте в заголовке Authorization:

PUT /api/v1/clusters/{clusterId}/services/{serviceId}
Authorization: Bearer <токен>
Content-Type: application/json
ℹ️

Справочник методов системы 5А с описанием всех полей открывается по адресу https://<Адрес сервера бэкенда>:8443/api/v1/docs. Методы конфигураций балансировки собраны в нём в группе SLB Cluster Services.

Методы

МетодПутьНазначение
GET/api/v1/clusters/{clusterId}/servicesсписок конфигураций балансировки кластера
POST/api/v1/clusters/{clusterId}/servicesсоздать конфигурацию балансировки
GET/api/v1/clusters/{clusterId}/services/{serviceId}прочитать конфигурацию балансировки с блоком traffic_mirror
PUT/api/v1/clusters/{clusterId}/services/{serviceId}включить или изменить блок traffic_mirror
DELETE/api/v1/clusters/{clusterId}/services/{serviceId}удалить конфигурацию балансировки

Идентификатор clusterId — имя кластера балансировки, serviceId — UUID из ответа о создании.

Поля блока

Блок хранится в поле traffic_mirror объекта конфигурации балансировки. Поле одинаково в запросах POST и PUT и в ответе GET. Отсутствие поля означает, что зеркалирование не настроено. Смысл полей разобран в статье Зеркалирование трафика сервиса.

  • enabled — включена ли отправка копий.
  • destinations — массив приёмников, до 32 элементов:
    • name — название приёмника, до 255 символов;
    • url — обязательное поле, HTTP(S)-адрес приёмника, от 1 до 2048 символов, соответствует шаблону ^https?://.+. Допускаются только схема, хост и порт.
  • scope — фильтр трафика:
    • methods — массив HTTP-методов, например ["POST", "PUT"];
    • hosts — массив доменов, например ["upload.example.com"];
    • content_types — массив типов содержимого, например ["application/json"];
    • include_paths — массив путей, попадающих в выборку;
    • exclude_paths — массив путей, исключаемых из выборки;
    • body_limit_kb — предел тела одной копии в КиБ, от 1. Пустое значение означает, что действует локальный предел агента.

Пример

Фрагмент traffic_mirror для тела запроса — включение зеркалирования с отбором по методу, типу содержимого и путям:

{
  "traffic_mirror": {
    "enabled": true,
    "destinations": [
      {
        "name": "siem-http",
        "url": "http://10.0.0.5:8080"
      }
    ],
    "scope": {
      "methods": ["POST", "PUT"],
      "hosts": [],
      "content_types": ["multipart/form-data"],
      "include_paths": ["/upload", "/api/documents"],
      "exclude_paths": [],
      "body_limit_kb": 20480
    }
  }
}

Метод PUT принимает конфигурацию балансировки целиком. Чтобы не потерять остальные настройки, загрузите конфигурацию методом GET, внесите изменения в traffic_mirror и отправьте объект обратно.

Ограничения проверки

Ограничения применяются к traffic_mirror независимо от того, создан объект методом POST или изменён методом PUT. Все они проверяются при включённом enabled: true; нарушение любого из них отклоняет сохранение:

УсловиеСообщение
type_l4 не TCP либо L7-протокол отличен от HTTP, HTTPS, gRPCЗеркалирование трафика можно включить только для HTTP/HTTPS/gRPC
в destinations больше 32 элементовКоличество приёмников зеркалирования не должно превышать 32
в scope.methods метод вне списка GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, CONNECT, TRACEНедопустимый HTTP-метод в фильтре зеркалирования
destinations[].url с путём (кроме /), строкой запроса, якорем, учётными данными или без хостаАдрес приёмника должен содержать только http(s)-схему, хост и порт

Остальные нарушения относятся к схеме метода и возвращают 422: схема адреса, отличная от http и https, длина url и name, значение body_limit_kb вне диапазона.

При enabled: true список destinations может быть пустым: система примет такую конфигурацию, но копии отправлять будет некуда. Заполняйте список при включении.

Ошибки

Тело ошибки содержит три поля:

ПолеЗначение
codeHTTP-статус ответа
reasonвид ошибки, по которому клиент принимает решение: invalid, not_found, conflict, internal
messageописание ошибки
СтатусКогда
400значения полей не проходят смысловую проверку: нарушены условия зеркалирования
404кластер или конфигурация балансировки не найдены
422значение поля нарушает ограничение схемы: длина строки, диапазон числа, шаблон адреса
500внутренняя ошибка сервера

Ошибка 422 означает нарушение ограничения из схемы метода, а 400 — нарушение смыслового условия: например, 422 вернётся для body_limit_kb вне диапазона, а 400 — для enabled: true у конфигурации с L4-протоколом UDP.