Стриминг логов

Как работает стриминг логов, как его подключить, куда и в каком формате можем отправлять данные.

Функционал не представлен в UI и подключается по запросу. Доступен только для режима защиты Антибот.

Что за функционал

Стриминг логов — это передача логов системы защиты в вашу инфраструктуру в реальном времени.

Как работает. По каждому запросу к вашему веб-ресурсу система формирует лог из 20 параметров. Она сразу отправляет этот лог в выбранную точку приёма — например, в ваш Kafka-кластер или на rsyslog-приёмник.

Кому пригодится. Тем, кто хочет хранить логи за долгий период, загружать их в SIEM или другие системы мониторинга, объединять с логами из других источников, а также настраивать собственные дашборды и алерты.

Особенности

  • Поддерживается защищённая передача логов по TLS и mTLS.

  • Можно подключить только для режима защиты Антибот. Для режима Анти-DDoS такой возможности нет.

  • Это именно стриминг, а не архивная выгрузка. Отправка происходит в реальном времени, буферизация не поддерживается: если в момент отправки лог не был доставлен, позже он уже не придёт.

Куда и как можем отправлять логи

Доступна отправка в следующие точки приёма:

  • Kafka — в формате JSON.

  • rsyslog-приёмник — в формате syslog. Поддерживаемые протоколы: UDP, TCP, TCP + TLS, TCP + mTLS.

  • Нестандартная точка приёма — по запросу готовы обсудить кастомную схему, например отправку в S3-совместимое хранилище на вашей стороне.

Обычно стараемся отправлять логи по публичной сети. Если наши сети где-то граничат с вашими, по договорённости возможна отправка по стыку — то есть по внутреннему сетевому соединению, а не через интернет.

Формат логов

Можем отправлять логи в двух форматах: JSON и syslog. Примеры ниже.

JSON:
{
  "sid": 29201,
  "datetime": 1774275547619,
  "scheme": "https",
  "host": "example.com",
  "remote_addr": "203.0.113.42",
  "request": "POST /api/example-endpoint HTTP/2.0",
  "referrer": "https://example.com/",
  "user_agent": "ExampleApp|4.103.0|Android|16|Example Device",
  "cookie": "device_id=example-device-id; wafv=human; theme=dark",
  "forwarded_for": "198.51.100.24",
  "uniq_id": "8Jd0WBgEkqM3",
  "score": "human",
  "action": "pass",
  "reason": "mobile_app",
  "profile_name": "example_profile",
  "type": "script",
  "ja3": "d06ad0468c9ca5743014ff08b66bfc83",
  "geo": "RU",
  "asn": 64500,
  "subnet": "203.0.113.0/24"
}
syslog:
<134> 2026-03-23T13:55:33Z cdm2 servicepipe-test[1748630]: 29201,1774275547619,https,example.com,203.0.113.42,POST /api/example-endpoint HTTP/2.0,https://example.com/,ExampleApp|4.103.0|Android|16|Example Device,device_id=example-device-id; wafv=human; theme=dark,198.51.100.24,8Jd0WBgEkqM3,human,pass,mobile_app,example_profile,script,d06ad0468c9ca5743014ff08b66bfc83,RU,64500,203.0.113.0/24

Эти примеры содержат все возможные поля лога. При подключении вы сами выбираете, какие из них включать в отгрузку, а какие — нет.

Описание полей

Поле Что значит Пример в JSON Пример в syslog

sid

ID вашего ресурса, к которому был сделан запрос

"sid": 29201

29201

datetime

Точное время, когда система защиты получила запрос (Unix timestamp в миллисекундах)

"datetime":
1774275547619

1774275547619

scheme

Схема URL (по какому протоколу клиент обращался к ресурсу)

Открыть список возможных значений

Https

Http

"scheme":
"https"

https

host

Имя хоста, к которому был адресован запрос

"host":
"example.com"

example.com

remote_addr

IP-адрес источника запроса

"remote_addr":
"203.0.113.42"

203.0.113.42

request

Стартовая строка HTTP-запроса: метод, путь и версия HTTP

"request": "POST
/api/example-
endpoint HTTP/2.0"

POST /api/example-
endpoint HTTP/2.0

referrer

Значение HTTP-заголовка Referer

"referrer":
"https://example.com/"

https://example.com/

user_agent

Значение HTTP-заголовка User-Agent

"user_agent":
"ExampleApp|4.
103.0|Android|16
|Example Device"

ExampleApp|4.
103.0|Android|16
|Example Device

cookie

Значение HTTP-заголовка Cookie

"cookie":
"device_id=example-
device-id; wafv=human;
theme=dark"

device_id=example-
device-id; wafv=human;
theme=dark

forwarded_for

Значение заголовка X-Forwarded-For

"forwarded_for":
"198.51.100.24"

198.51.100.24

uniq_id

Уникальный ID запроса, присвоенный нашей системой

"uniq_id": "8Jd0WBgEkqM3"

8Jd0WBgEkqM3

score

Класс, присвоенный источнику запроса по результатам анализа

Открыть список возможных классов

Bot — бот

Likely bot — скорее всего, бот

Likely Human — скорее всего, человек

Human — человек

"score": "human"

human

action

Действие, которое система применила к запросу

Открыть список возможных действий

Pass — пропущен

Block — заблокирован

CAPTCHA — клиенту выдана CAPTCHA

JS-challenge — клиенту выдан JS-челлендж

Cookie-challenge — клиенту выдан cookie-челлендж

Redirect — клиенту выдан редирект

"action": "pass"

pass

reason

Причина, по которой система применила данный action

Открыть список возможных причин

mobile_app — это трафик, классифицированный как трафик легитимного мобильного приложения

local_white — запрос от IP, добавленного вами в белый список

user_blocked_by_score — общий анализ действий и характеристик пользователя выявил нелигитимность. Его запросы будут блокироваться, начиная с текущего.

local_whdr — запрос с разрешённым HTTP-заголовком (whitelisted header); запросы с ним пропускаются без проверок

protection_disabled — защита отключена. Относится как к случаям, когда защита отключена для конкретной локации (к которой был запрос), так и когда она отключена для всего ресурса.

white — запрос от официального проверенного (верифицированного) бота, то есть бота, который выполняет полезные задачи для интернета в целом — например, поискового краулера или системы uptime-мониторинга. Наша система защиты постоянно проверяет и обновляет список таких ботов. Запросы от них по умолчанию пропускаются без проверок.

conn_blocked_by_hosting — подсеть имеет плохую репутацию, из неё часто шлют запросы боты

local_whdrl — запрос с разрешённым HTTP-заголовком (whitelisted header) с ограниченным (limited) доверием. Такие запросы система пропускает без проверок, пока их число не превысит установленный лимит (например, 2000 запросов в минуту). Все запросы сверх лимита будут проверяться политикой фильтрации, установленной для вашего ресурса.

conn_blocked_by_no_cookie — запрос обязан был содержать cookie Servicepipe, но пришёл без неё

user_blocked — запрос от заблокированного пользователя (решение о его блокировке было принято раньше, во время одного из предыдущих запросов)

check_force — согласно текущей политике безопасности, такому запросу нужно выдать дополнительную проверку

captcha_pass — недавно пользователь успешно прошёл CAPTCHA, чем подтвердил свою легитимность

captcha_set_cookie_redirect — пользователь уже успешно прошёл CAPTCHA, и сейчас происходит выставление нашей cookie, с которой он какое-то время сможет проходить на ваш ресурс без проверок

behavior_pass — пользователь признан легитимным на основании поведенческого анализа

user_blocked_by_behavior — поведенческий анализ выявил аномальную активность. Запросы пользователя будут блокироваться, начиная с текущего.

custom_white_bot — мы обелили данный тип трафика по вашей просьбе

set_cookie_redirect — происходит выставление cookie в рамках cookie-челленджа

local_bgeo — запрос отправлен из страны, которую вы запретили при настройках геофильтрации

captcha_invalid — пользователь неправильно прошёл CAPTCHA

invalid_uid — обнаружено вмешательство в cookie, трафик подозрительный

white_corp — запрос из подсети, которую мы обелили по вашей просьбе

user_blocked_by_no_correct_cookie — пользователь отправил запрос без требуемой cookie, что указывает на нелигитимность. Запросы пользователя будут блокироваться, начиная с текущего.

ip_blocked_by_spec — превышен лимит запросов с одного IP

ip_blocked — с этого IP недавно уже приходили подозрительные запросы, поэтому он временно заблокирован. Чтобы узнать причину изначальной блокировки, откройте лог предыдущих запросов с этого IP.

invalid_method — клиент использовал метод HTTP-запроса, несовместимый с локацией, куда пришёл запрос

local_black — запрос с IP, добавленного вами в чёрный список

cookie_disabled — клиент не может выставить требуемую cookie.

user_blocked_by_spec — пользователь превысил один из лимитов запросов, установленных политикой защиты для вашего ресурса. Запросы пользователя будут блокироваться, начиная с текущего.

user_blocked_by_rate — пользователь превысил системный лимит запросов к динамическому контенту. Запросы пользователя будут блокироваться, начиная с текущего.

"reason": "mobile_app"

mobile_app

profile_name

Если к запросу было применено пользовательское правило, в значении будет его ID.

Если к запросу не было применено пользовательское правило, в значении будет название сработавшего профиля. Профилем называется набор настроек фильтрации. Это внутренняя служебная переменная: мы группируем настройки защиты вашего ресурса в отдельные профили и присваиваем им названия сами.

"profile_name":
"example_profile"

example_profile

type

Тип запрашиваемого контента (статический или динамический)

Открыть список возможных значений

script — запрос динамического контента; запрос был сделан в не-ajax-локацию

script_ajax — запрос динамического контента; запрос был сделан в ajax-локацию

static — запрос статического контента

"type": "script"

script

ja3

Хэш JA3-отпечатка

"ja3": "d06ad0468c9ca
5743014ff08b66
bfc83"

d06ad0468c9ca5
743014ff08b66b
fc83

geo

Страна источника запроса, определённая по IP

"geo": "RU"

RU

asn

Номер автономной системы, которой принадлежит IP-адрес источника

"asn": 64500

64500

subnet

Подсеть, которой принадлежит IP-адрес источника

"subnet": "203.0.113.0/24"

203.0.113.0/24

Подключить стриминг

1. Напишите в техподдержку или вашему менеджеру

Скажите, что хотите подключить стриминг логов.

2. Пришлите нам данные для подключения

Для записи в Kafka пришлите:

  • адреса и порты брокеров;

  • имя топика, куда нужно писать логи;

  • если подключение идёт через TLS — пришлите CA (Certificate Authority) сертификат в формате PEM, с которым мы будем подключаться к вам;

  • если подключение идёт через mTLS — пришлите CA (Certificate Authority) сертификат и пару сертификат+ключ в формате PEM, с которыми мы будем подключаться к вам;

  • если у вас включена авторизация — создайте для нас учётную запись и передайте пару логин-пароль.

Если доступ к Kafka ограничен файрволом, откройте его для наших адресов. Они опубликованы здесь: https://servicepipe.ru/ipv4.

Для записи по rsyslog пришлите:

  • адрес;

  • порт;

  • тег;

  • протокол: TCP, UDP, TCP + TLS или TCP + mTLS;

  • если используется TCP с TLS — пришлите CA (Certificate Authority) сертификат в формате PEM, с которым мы будем подключаться к вам;

  • если используется TCP с mTLS — пришлите CA (Certificate Authority) сертификат и пару сертификат+ключ в формате PEM, с которыми мы будем подключаться к вам.

Мы готовы обсудить и кастомные варианты — например, отгрузку логов в S3-совместимое хранилище. Если для вас это актуально, напишите персональному менеджеру.

3. Отправьте список полей, которые вам нужны

Укажите, какие поля хотите получать в логах. Полный список можно посмотреть в разделе Описание полей логов выше.

Если для вас важно сэкономить место в хранилище, советуем не включать поле cookie без необходимости: оно может непредсказуемо увеличивать объём логов.

4. Дождитесь готовности конфигурации

Нам нужно немного времени, чтобы настроить всё для стриминга логов. Настройка производится в рабочие часы. Как будет готово, мы сразу сообщим.

5. Подтвердите подключение услуги

После вашего подтверждения запустим отправку логов.