Перейти к основному содержимому
Версия: 4.6.X

Плагин mirroring

Плагин mirroring

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

Конфигурация

processors:
- module: mirroring
mirroring:
queue:
size: 10
destinations:
- name: my_dst
format:
type: raw
config: null
mirrorer:
type: tcp
config:
address: tcp://localhost:49000
dial_timeout: 10s
write_timeout: 5s
framing: delimiter
tls:
disable: true
ПараметрТипОписание
queue.sizeintРазмер очереди событий, отправляемых на зеркалирование
destinationsarrayМассив конфигураций точек назначения

Каждая точка назначения (destination) содержит:

ПараметрТипОписание
namestringНазвание точки назначения
formatobjectНастройки форматирования события (см. ниже)
mirrorerobjectНастройка типа зеркалирования (см. ниже)

Форматы событий

Формат задаётся в блоке format.type:

ТипОписание
rawОтправка события в сыром виде (значение поля Raw)
jsonОтправка события в виде JSON-объекта
nativeОтправка в нативном для KOMRAD формате
rfc5424Отправка в формате Syslog (RFC 5424)

Конфигурация формата RFC 5424

При использовании type: rfc5424 блок format.config позволяет настроить все поля заголовка и тела сообщения RFC 5424.

Каждое поле конфигурации может использовать один из трёх типов вывода значения:

Тип выводаОписание
constКонстантное значение
fieldЗначение из поля события
expressionЗначение, вычисленное CEL-выражением
format:
type: rfc5424
config:
priority:
type: const
const: 1
version: 1
timestamp: 2025-12-12T10:41:54+00:00
hostname: my_hostname
app-name: komrad
proc-id:
type: field
field: ECS.Process.PID
msg-id: msgid
message:
type: field
field: Raw
structured-data:
identifier:
- name:
type: const
const: MyField
value:
type: field
field: MyField
ПараметрОбязательныйОписание
priorityнетПоле PRI заголовка
versionнетПоле VERSION заголовка
timestampнетПоле TIMESTAMP (RFC 3339). Если не указано — текущее время
hostnameнетПоле HOSTNAME. Если не указано — имя хоста машины
app-nameнетПоле APP-NAME
proc-idнетПоле PROCID. Если не указано — PID текущего процесса
msg-idнетПоле MSGID
messageнетТело сообщения
structured-dataнетСтруктурированные данные — словарь «идентификатор структуры» → «массив пар name/value»

Типы зеркалирования

Тип задаётся в блоке mirrorer.type.

TCP

mirrorer:
type: tcp
config:
address: "tcp://localhost:49000"
dial_timeout: 10s
write_timeout: 5s
framing: delimiter
tls:
disable: true
ПараметрПо умолчаниюОписание
addressАдрес точки назначения (tcp://host:port)
dial_timeout30sТаймаут установления соединения
write_timeout30sТаймаут записи события
framingdelimiterТип деления на кадры: delimiter (добавляет \n после события) или rfc6587 (длина в байтах + пробел + событие)
tlsКонфигурация TLS

UDP

mirrorer:
type: udp
config:
address: "udp://localhost:49050"
dial_timeout: 10s
write_timeout: 5s
framing: delimiter

Параметры аналогичны TCP.

HTTP

mirrorer:
type: http
config:
url: http://localhost:48000/
method: POST
headers:
Content-Type: application/json
query:
param: value
array-param: ["1", "2"]
username: "username"
password: pass
password-secret: MY_HTTP_PASSWORD
bearer-token-file: /path/to/token
bearer-token-secret: MY_HTTP_TOKEN
tls:
disable: true
timeout: 3s
ПараметрОписание
urlURL запроса
methodHTTP-метод (POST, PUT и др.)
headersЗаголовки запроса
queryQuery-параметры URL
usernameИмя пользователя для Basic Auth
passwordПароль для Basic Auth. Приоритет выше, чем у password-secret
password-secretНазвание секрета KOMRAD с паролем Basic Auth
bearer-token-fileПуть к файлу с токеном (для Authorization: Bearer)
bearer-token-secretНазвание секрета с токеном. Приоритет выше, чем у bearer-token-file
tlsКонфигурация TLS
timeoutТаймаут запроса. Если не указано — без ограничения

NATS

mirrorer:
type: nats
config:
subject: events.events
conn:
servers: ["nats://localhost:3490"]
user: user
password: pass
password-secret: MY_NATS_PASS
tls:
disable: true
ПараметрОписание
subjectТема (топик), в которую отправляются события
conn.serversСписок серверов NATS
conn.userИмя пользователя для аутентификации
conn.passwordПароль. Приоритет выше, чем у password-secret
conn.password-secretНазвание секрета с паролем
conn.tlsКонфигурация TLS

Прочие настройки подключения аналогичны блоку bus в файлах конфигурации KOMRAD.

Kafka

mirrorer:
type: kafka
config:
brokers: ["localhost:9092"]
sasl:
enabled: true
mechanism: SCRAM-SHA-256
username: user
password: pass
passwordSecret: MY_KAFKA_PASSWORD
tls:
disable: true
producer:
topic: my_topic
ПараметрОписание
brokersСписок брокеров Kafka
tlsКонфигурация TLS
producer.topicТема (топик), в которую записываются события

Настройки SASL (аутентификации):

ПараметрОписание
sasl.enabledВключить SASL
sasl.mechanismМеханизм: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI, OAUTHBEARER
sasl.usernameИмя пользователя (для PLAIN, SCRAM-SHA-*)
sasl.passwordПароль (приоритет выше passwordSecret)
sasl.passwordSecretНазвание секрета с паролем

Для механизма GSSAPI (Kerberos):

ПараметрОписание
sasl.gssapi.authTypeТип аутентификации (USER_AUTH)
sasl.gssapi.keyTabPathПуть к файлу keytab
sasl.gssapi.kerberosConfigPathПуть к конфигурации Kerberos
sasl.gssapi.serviceNameНазвание сервиса
sasl.gssapi.usernameИмя пользователя
sasl.gssapi.passwordПароль (для USER_AUTH, приоритет выше passwordSecret)
sasl.gssapi.passwordSecretНазвание секрета с паролем
sasl.gssapi.realmНазвание realm

Для механизма OAUTHBEARER:

ПараметрОписание
sasl.oauth.tokenOAuth-токен (приоритет выше tokenSecret)
sasl.oauth.tokenSecretНазвание секрета с токеном
sasl.oauth.clientIdID клиента для token endpoint (приоритет выше clientIDSecret)
sasl.oauth.clientIDSecretНазвание секрета с ID клиента
sasl.oauth.clientSecretСекрет клиента (приоритет выше clientSecretSecret)
sasl.oauth.clientSecretSecretНазвание секрета с секретом клиента
sasl.oauth.tokenEndpointURL для OAuth token endpoint
sasl.oauth.scopeScope выпускаемого токена

Примеры

Отправка на HTTP-коллектор

mirroring:
destinations:
- name: http-collector
format:
type: json
mirrorer:
type: http
config:
url: https://localhost:48000/
method: POST
headers:
Content-Type: application/json
tls:
TrustedCA: /var/lib/echelon/komrad/certs/ca.pem
Cert: /var/lib/echelon/komrad/certs/client.pem
CertKey: /var/lib/echelon/komrad/certs/client-key.pem
disable: false
timeout: 10s

Отправка на Syslog-коллектор (TCP)

mirroring:
destinations:
- name: syslog-collector
format:
type: raw
mirrorer:
type: tcp
config:
tls:
disable: true
address: "tcp://localhost:49000"

Отправка на Syslog-коллектор по UDP в формате RFC 5424

mirroring:
destinations:
- name: syslog-collector
format:
type: rfc5424
config:
priority: 1
version: 1
app-name: komrad
message:
type: field
field: Raw
mirrorer:
type: udp
config:
address: "udp://localhost:49050"

Отправка в NATS (komrad-bus)

mirroring:
queue:
size: 5
destinations:
- name: komrad-bus
format:
type: native
mirrorer:
type: nats
config:
subject: stream.subject
conn:
servers:
- nats://localhost:3490
user: komrad
password: pass
tls:
disable: true

Отправка в Kafka (Redpanda)

mirroring:
destinations:
- name: redpanda
format:
type: raw
mirrorer:
type: kafka
config:
brokers: ["localhost:19092"]
tls:
disable: true
producer:
topic: events
sasl:
enabled: true
username: superuser
password: secretpassword
mechanism: SCRAM-SHA-256