Validator-interceptor-audit-callback#
Библиотека реализует аудит событий валидации для Validator-interceptor.
Метамодель (список) событий аудита:
metamodelVersion: "1.0"
module: "Validator-interceptor"
events:
- name: ValidatorInterceptorStarted
description: Старт kafka-перехватчика валидации
mode: speed
success: true
params:
- name: RequestId
description: Уникальный идентификатор события
- name: ValidatorId
description: Уникальный идентификатор валидатора
- name: SchemasProvider
description: Имя класса поставщика схем валидации
- name: SchemasInfo
description: Имя/тип схемы для каждого топика
- name: Schemas
description: Схемы для каждого топика
- name: MessageValidated
description: Успешная валидация сообщения
mode: speed
success: true
params:
- name: RequestId
description: Уникальный идентификатор события
- name: ValidatorId
description: Уникальный идентификатор валидатора
- name: MessageCoordinates
description: Координаты сообщения
- name: MessageValidationFailed
description: Ошибка при валидации сообщения
mode: speed
success: false
params:
- name: RequestId
description: Уникальный идентификатор события
- name: ValidatorId
description: Уникальный идентификатор валидатора
- name: MessageCoordinates
description: Координаты сообщения
- name: ErrorMessage
description: Сообщение об ошибке
Конфигурация#
Аудит может работать в двух режимах, настраиваемых с помощью interceptor.validator.audit.service.type:
log– запись событий в лог;http– отправка событий в аудит-сервис (использует библиотекуru.sbt.ss.audit:audit-client).
Настройка interceptor.validator.audit.service.message.validation.events позволяет указать режим отправки событий аудита.
Поддерживаются следующие режимы:
disabled– не отправлять события о валидации сообщения: в таком случае в аудит отправляются только события старта валидатора (по умолчанию);errors– отправлять события только при ошибках валидации сообщений;all– отправлять события о каждом успешном/неуспешном прохождении валидации.
Пример конфигурации Kafka-клиента:
# Подключить аудит событий валидации
interceptor.validator.callback.classes = ru.sbt.ss.kafka.interceptors.audit.AuditCallback
# Настроить отправляемые событий аудита
interceptor.validator.audit.service.message.validation.events = all
# Настроить режим отправки событий
interceptor.validator.audit.service.type = log
# interceptor.validator.audit.service.type = http
# ОПЦИОНАЛЬНО Включить загрузку общей для всех валидаторов конфигурации аудит клиента
# Конфигурация передается с помощью метода AuditClientBuilder.setAsDefaultBuilder()
# Если общая конфигурация не задана - используется `audit.service.type = log`, если задана - `audit.service.type = http`
# audit.service.use.default.properties = true
# Для audit.service.type = http дополнительно настроить аудит-клиент (полный список настроек приведен ниже)
#
# Использовать общий для всех валидаторов аудит-клиент
# audit.service.use.default.client = true
#
# interceptor.validator.audit.service.url.base = http://localhost
#
# interceptor.validator.audit.service.module.id = TEST-VALIDATOR
# interceptor.validator.audit.service.send.metamodel = true
#
# interceptor.validator.audit.service.redelivery.buffers = memory
# interceptor.validator.audit.service.redelivery.enabled = true
# interceptor.validator.audit.service.redelivery.initial.delay.ms = 60000
# interceptor.validator.audit.service.redelivery.interval.ms = 60000
# interceptor.validator.audit.service.redelivery.memory.type = queue
#
# interceptor.validator.audit.service.ssl.enabled = false
Полный список настроек аудит клиента для audit.service.type = http:
## 1. Настройки url аудит-сервиса
# Базовый url аудит-сервиса
interceptor.validator.audit.service.url.base = http://localhost
# ОПЦИОНАЛЬНО uri аудита, на который будут отправляться события
# interceptor.validator.audit.service.url.event.path = /v1/event
# ОПЦИОНАЛЬНО uri на который будет отправляться метамодель
# interceptor.validator.audit.service.url.metamodel.path = /v1/metamodel
## 2. Настройки метамодели
# Путь до используемой метамодели
interceptor.validator.audit.service.metamodel.path = config/metamodel.yml
# ОПЦИОНАЛЬНО Переопределить модуль используемой метамодели
# interceptor.validator.audit.service.metamodel.module = module.id
# ОПЦИОНАЛЬНО Переопределить версию используемой метамодели
# interceptor.validator.audit.service.metamodel.version = 1.1
# ОПЦИОНАЛЬНО Отправка метамодели в аудит при создании аудит-клиента
# interceptor.validator.audit.service.send.metamodel = true
## 3. ОПЦИОНАЛЬНО Настройки SSL
# Использовать ssl
# interceptor.validator.audit.service.ssl.enabled` — флаг, отвечающий за использование ssl;
# Путь до хранилища приватного ключа
# interceptor.validator.audit.service.ssl.keystore = ssl/keystore.jks
# Пароль от хранилища приватного ключа;
# interceptor.validator.audit.service.ssl.keystore.password = pass
# Путь до хранилища доверенных сертификатов
# interceptor.validator.audit.service.ssl.truststore = ssl/truststore.jks
# Пароль от хранилища доверенных сертификатов
# interceptor.validator.audit.service.ssl.truststore.password = pass
# Версия протокола TLS
# interceptor.validator.audit.service.ssl.protocol = TLSv1.2
# Верификация имени хоста аудита
# interceptor.validator.audit.service.verify.hostname = false
## 4. ОПЦИОНАЛЬНО Настройки переотправки событий (redelivery)
# События отправляются в redelivery-буферы в следующих случаях:
# * Аудит-сервис не ответил на запрос
# * Аудит сервис вернул код ошибки в http ответе или теле ответа, который соответствует регулярному выражению
#
# Во всех остальных случаях события отправляются в dead-letter буферы
#
# Регулярное выражение, по которому определяется тип переотправки
# interceptor.validator.audit.service.redelivery.response.code.regex = (?:400.4|401|404|429|500|503.2)
# Добавлять заголовки при переотправке событий (Redelivery-Request-Id, Redelivery-Retries-Left, Redelivery-From-Buffer)
# interceptor.validator.audit.service.add.redelivery.headers = true
# Включить переотправку событий
# interceptor.validator.audit.service.redelivery.enabled = true
# Интервал попыток переотправки
# interceptor.validator.audit.service.redelivery.interval.ms = 60000
# Задержка перед первой попыткой переотправки
# interceptor.validator.audit.service.redelivery.initial.delay.ms = 60000
# Останавливать попытку переотправки при первой ошибке
# interceptor.validator.audit.service.redelivery.stop.on.error = true
# Максимальное количество повторных попыток доставки (-1 для бесконечных попыток)
# для параметра `redelivery.stop.on.error` должно быть установлено значение *false*
# interceptor.validator.audit.service.redelivery.retries = -1
# Список буферов для хранения запросов при переотправке
# Список типов буферов:
# * kafka - топик kafka;
# * queue — очередь в памяти;
# * file — записывает запросы в указанный файл;
# * logger — записывает запросы в указанный logger, может использоваться в качестве последнего запасного варианта при сбое всех буферов запросов. Запросы не могут быть повторно доставлены из этого буфера;
# * noop — игнорирует неудачные запросы.
#
# Неудачные запросы будут отправлены в первый по списку доступный буфер
# interceptor.validator.audit.service.redelivery.buffers = kafka-buffer, file-buffer, memory-buffer, logger-fallback
## Пример настройки kafka-buffer
# Тип буфера
# interceptor.validator.audit.service.redelivery.kafka-buffer.type = kafka
#
# Используемый топик
# interceptor.validator.audit.service.redelivery.kafka-buffer.topic = audit-redelivery
#
# Флаг, отвечающий за принудительную перебалансировку consumer группы при запуске перед первой попыткой переотправки
# redelivery.kafka-buffer.force.rebalance.on.start = true
#
# Общий тайм-аут, с помощью которого вычисляются тайм-ауты кафка-клиента:
# * max.block.ms = тайм-аут / 2;
# * delivery.timeout.ms = тайм-аут / 2 + linger.ms;
# * request.timeout.ms = тайм-аут / 4.
# interceptor.validator.audit.service.redelivery.kafka-buffer.timeout.ms = 10000
#
# Любые стандартные параметры кафка-клиента, например bootstrap.servers
# interceptor.validator.audit.service.redelivery.kafka-buffer.bootstrap.servers = localhost:9093
## Пример настройки file-buffer
# Тип буфера
# interceptor.validator.audit.service.redelivery.file-buffer.type = file
#
# Используемый файл
# interceptor.validator.audit.service.redelivery.file-buffer.file.name = buffers/redelivery.txt
#
# Права доступа к файлу при автоматичсеком создании
# interceptor.validator.audit.service.redelivery.file-buffer.file.permissions = rw-r--r--
#
# Максимальный размер буфера, может быть установлен в гига/мега/кило/байтах,
# например: 1024, 1024b, 100k, 10m, 1g, -1 для неограниченного размера
# interceptor.validator.audit.service.redelivery.file-buffer.max.size = 100m
## Пример настройки memory-buffer
# Тип буфера
# interceptor.validator.audit.service.redelivery.memory.type = queue
#
# Максимальный размер буфера, может быть установлен в гига/мега/кило/байтах,
# например: 1024, 1024b, 100k, 10m, 1g, -1 для неограниченного размера
# interceptor.validator.audit.service.redelivery.memory-buffer.max.size = 100m
#
# При переполнении буфера самые старые события будут удалены из памяти и залогированы
# Имя logger
# interceptor.validator.audit.service.redelivery.memory-buffer.clear.logger.name = ClearLogger
## Пример настройки logger-fallback
# Тип буфера
# interceptor.validator.audit.service.redelivery.logger-fallback.type = logger
#
# Имя logger
# interceptor.validator.audit.service.redelivery.logger-fallback.logger.name = LoggerRequestBuffer
## 5. ОПЦИОНАЛЬНО Настройки dead-letter
# Подразумевается что dead-letter буферы предназначены только для хранения событий, но не для переотправки
# Настройки dead letter аналогичны настройкам переотправки, меняется только префикс `redelivery.` на `dead.letter.`, например:
# Выключить переотправку событий для dead-letter буферов
# interceptor.validator.audit.service.dead.letter.enabled = false
## 6. ОПЦИОНАЛЬНО Настройки тайм-аутов отправки событий
# Тайм-аут отправки запроса аудита (включает отправку запроса в буферы повторной доставки)
# interceptor.validator.audit.service.request.timeout.ms = 10000
# Тайм-аут остановки для буферов повторной доставки
# interceptor.validator.audit.service.stop.timeout.ms = 10000
## 7. ОПЦИОНАЛЬНО Настройки используемых потоков
# Минимальное кол-во потоков аудит-клиента
# interceptor.validator.audit.service.thread.pool.min.size = 2
# Максимальное кол-во потоков аудит-клиента
# interceptor.validator.audit.service.thread.pool.min.size = 10
# Префикс имен потоков для основного пула аудит-клиента
# interceptor.validator.audit.service.thread.pool.name.prefix = audit-client
# Префикс имен потоков для дополнительного пула http-клиента
# interceptor.validator.audit.service.http.thread.pool.name.prefix = audit-http-client
# Время жизни неиспользуемых потоков аудит-клиента
# interceptor.validator.audit.service.thread.pool.keep.alive.ms = 60000
# Использовать старый thread-pool с неограниченным кол-вом потоков
# interceptor.validator.audit.service.use.legacy.thread.pool = false