Плагин 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.size | int | Размер очереди событий, отправляемых на зеркалирование |
destinations | array | Массив конфигураций точек назначения |
Каждая точка назначения (destination) содержит:
| Параметр | Тип | Описание |
|---|
name | string | Название точки назначения |
format | object | Настройки форматирования события (см. ниже) |
mirrorer | object | Настройка типа зеркалирования (см. ниже) |
Форматы событий
Формат задаётся в блоке 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_timeout | 30s | Таймаут установления соединения |
write_timeout | 30s | Таймаут записи события |
framing | delimiter | Тип деления на кадры: 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
| Параметр | Описание |
|---|
url | URL запроса |
method | HTTP-метод (POST, PUT и др.) |
headers | Заголовки запроса |
query | Query-параметры 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.token | OAuth-токен (приоритет выше tokenSecret) |
sasl.oauth.tokenSecret | Название секрета с токеном |
sasl.oauth.clientId | ID клиента для token endpoint (приоритет выше clientIDSecret) |
sasl.oauth.clientIDSecret | Название секрета с ID клиента |
sasl.oauth.clientSecret | Секрет клиента (приоритет выше clientSecretSecret) |
sasl.oauth.clientSecretSecret | Название секрета с секретом клиента |
sasl.oauth.tokenEndpoint | URL для OAuth token endpoint |
sasl.oauth.scope | Scope выпускаемого токена |
Примеры
Отправка на 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