События мониторинга#

По умолчанию в Corax отключен удаленный доступ к JMX. Можно включить удаленный мониторинг с помощью JMX, установив переменную среды JMX_PORT для процессов, запущенных с использованием CLI или встроенными средствами Java, чтобы включить удаленный доступ к JMX. Также необходимо обезопасносить сервис при включении удаленного JMX в PROD сценариях, чтобы неавторизованные пользователи не могли отслеживать или контролировать Kafka брокеры или приложение, а также платформу, на которой они работают. Обратите внимание, что аутентификация для JMX по умолчанию в Kafka отключена, и конфигурации безопасности должны быть изменены для PROD развертываний, установив переменную среды KAFKA_JMX_OPTS для процессов, запущенных с помощью CLI, или установив соответствующие параметры вашей версии Java.

В данном разделе содержатся основные метрики для мониторинга Kafka и ZooKeeper.

Kafka Broker Metrics#

Группа

Описание группы

JMX метрика

Описание

Показатели нагрузки

Количество входящих сообщений в секунду(по всем топикам)

kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec

Количество входящих сообщений в секунду.
Данная метрика нужна для анализа пропускной способности сообщений по топикам

Количество запросов в секунду(Requests PerSec)

kafka.network:type=RequestMetrics,name=RequestsPerSec,request={FetchConsumer|Produce|FetchFollower}

Количество запросов в секунду.
Produce — количество запросов от Производителей на отправку данных
FetchConsumer — количество запросов от Потребителей на получение новых данных
FetchFollower — количество запросов от последователей на получение новых данных

Объем данных на запись и на чтение в секунду (BytestIn/OutPerSec)

kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec<br>kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec

Количество исходящих байт в секунду.
Количество входящих байт в секунду.
Данные метрики необходимы для анализа о быстродействия чтения/записи в рамках топика

Количество записей в лог в секунду/Время записи в лог (LogFlushRateAndTimeMs)

kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs

Количество записей в лог в секунду.
Метрика необходима для отслеживания быстродействия прохождения коммитов/записи

Количество produce-запросов в секунду (TotalProduceRequestsPerSec)

kafka.server:type=BrokerTopicMetrics,name=TotalProduceRequestsPerSec OneMinuteRate

Количество produce-запросов в секунду.
Данная метрика нужна для анализа пропускной способности на предмет produce-запросов

Размер очереди запросов

kafka.network:type=RequestChannel,name=RequestQueueSize

Размер очереди запросов.
Максимальный размер очереди запросов задается в настройках брокера server.properties — queued.max.requests.
Если очередь переполнится, то входящие и исходящие запросы перестанут обрабатываться

Количество лидеров, партиций

Количество лидеров и партиций

kafka.server:type=ReplicaManager,name=PartitionCount
kafka.server:type=ReplicaManager,name=LeaderCount

Количество партиций должно быть примерно одинаковое для всех брокеров.
Количество лидеров партиций должно быть одинаково для всех брокеров. В противном случае установите для auto.leader.rebalance.enable значение true для всех брокеров в кластере

Показатели репликации

Сокращение и расширение синхронизированных реплик в секунду

kafka.server:type=ReplicaManager,name=IsrExpandsPerSec
kafka.server:type=ReplicaManager,name=IsrShrinksPerSec

Метрика IsrExpandsPerSec показывает увеличение количества партиций, входящих в ISR, в секунду.
Число ISR-реплик определенной партиции по большей части остается неизменным за исключением случаев, когда кластер расширяется новыми брокерами, либо же удаляются партиции.

Метрика IsrShrinksPerSec показывает уменьшение количества партиций, входящих в ISR, в секунду.
Число ISR-реплик определенной партиции по большей части остается неизменным за исключением случаев, когда кластер расширяется новыми брокерами, либо же удаляются партиции.
Реплика может удаляться из ISR-пула по следующим причинам:
реплика сильно отстает по оффсетам от лидерской партиции (т.е. значительная разница в оффсетах реплики и лидера. Эта разница настраивается параметром replica.lag.max.messages)
реплика не соединялась с лидером некоторое время (регулируемое параметром replica.socket.timeout.ms)

Максимальное отставание в репликации

kafka.server:type=ReplicaFetcherManager,name=MaxLag,clientId=Replica

Максимальное отставание в реплицировании сообщений между лидером и follower.
Данная метрика нужна для мониторинга проблем связанных с репликацией данный по брокерам

Показатели отложенных запросов

Число истекших запросов в секунду

kafka.server:type=DelayedFetchMetrics,name=ExpiresPerSec,fetcherType={follower|consumer}

Запросы (consumer — запросы Потребителей на получение новых данных, follower — запросы других брокеров на получение данных для репликации) приходящие на брокер попадают в purgatory — по сути это очередь, в которой они ждут обработки.
Если запросы не были обработаны по истечению таймаута, то они удаляются из этой очереди.
Соответственно метрика показывает количество удаленных сообщений из purgatory в секунду

Объем хранилища отложенных запросов

kafka.server:type=DelayedOperationPurgatory,name=PurgatorySize,delayedOperation={Fetch|Produce}

Количество запросов, ожидающих обработки во временном хранилище.
Временное хранилище запросов служит для временного хранения produce и fetch-запросов.
У каждого типа запроса есть свой набор собственных параметров, определяющих будет ли этот запрос добавлен в хранилище:
- fetch: fetch-запросы добавляются в хранилище в случае, если не хватает данных для выполнения запроса (fetch.min.bytes для Потребителей) до тех пор, пока не будет достигнут fetch.wait.max.ms или же соберется достаточное количество данных для выполнения запроса
- produce: если request.required.acks=-1, то все produce-запросы помещаются в хранилище до тех пор, пока лидер партиция не получит подтверждение от всех followers партиций.
Слежение за временным хранилищем запросов полезно с точки зрения определения внутренних причин задержки.
Например, рост количества fetch-запросов Потребителя легко объясняется ростом числа запросов во временном хранилище

Показатели загруженности обработчиков

Cредний процент времени простоя обработчика запросов в пуле

kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent

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

Средний процент времени простоя сетевых процессоров

kafka.network:type=SocketServer,name=NetworkProcessorAvgIdlePercent

Средняя доля времени простоя сетевых процессоров.
Метрика необходима для мониторинга загрузки трафика по сети

Статистика состояний подключения клиентов к ZooKeeper

Статистика состояний подключения клиентов к ZooKeeper

kafka.server:type=SessionExpireListener,name=ZooKeeperAuthFailuresPerSec

Количество ошибок аутентификации в секунду

kafka.server:type=SessionExpireListener,name=ZooKeeperDisconnectsPerSec

Количество разъединений в секунду

kafka.server:type=SessionExpireListener,name=ZooKeeperExpiresPerSec

Количество истекших сессий в секунду

kafka.server:type=SessionExpireListener,name=ZooKeeperReadOnlyConnectsPerSec

Количество подключений только на чтение в секунду.
Eсли состояние сервера, к которому подключен клиент ZooKeeper, «LOOKING»(т.е. и не follower и не лидер), то в этом случае клиент может не может вносить изменения в данные, а только читать

kafka.server:type=SessionExpireListener,name=ZooKeeperSaslAuthenticationsPerSec

Количество успешных аутентификаций в секунду

kafka.server:type=SessionExpireListener,name=ZooKeeperSyncConnectsPerSec

Количество успешных подключений в секунду

Время обработки запросов Потребителей на получение новых данных

Общее время обработки запросов

kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchConsumer

Общее время, необходимое для обработки запроса.
Включает в себя сумму метрик:
Время ожидания запросов в очереди
Время обработки лидером
Время ожидания ответа follower
Время для отправки ответа

Время ожидания ответа follower

kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=FetchConsumer

Время ожидания ответа follower.
Если значение данной метрики велико, то на брокере не достаточно данных для отправки их на Потребитель (либо их нет).
В данном случае показатель метрики будет стремиться к значению настройки fetch.max.wait.ms(по умолчанию значение равно 500 мс)

Время нахождения запроса в очереди запросов на обработку брокером

kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=FetchConsumer

Время нахождения запроса на получение данных в очереди запросов на обработку брокером.
Долгое нахождение запроса на чтение в очереди может быть вызовано следующими причинами:
Недостаточное количество io threads. Посмотреть количество io threads можно в файле server.properties настройка num.io.threads (по умолчанию 8).
Неодстаточный размер Request Queue. Настройка брокера (server.properties) queued.max.requests. Значение настройки должно соответствовать количеству подключений к кластеру.
Не хвататает CPU

Время обработки запроса лидером партиции

kafka.network:type=RequestMetrics,name=LocalTimeMs,request=FetchConsumer

Время обработки запроса лидером партиции (подготовки ответа).
Долгое время обработки может быть вызвано медленными дисковыми операциями

Время нахождения ответа в очереди отправки

kafka.network:type=RequestMetrics,name=ResponseQueueTimeMs,request=FetchConsumer

Время нахождения ответа в очереди отправки.
Долгое время может быть вызвано малым количеством сетевых потоков(network threads — настройка num.network.threads)

Время отправки ответа клиенту

kafka.network:type=RequestMetrics,name=ResponseSendTimeMs,request=FetchConsumer

Время отправки ответа клиенту в секунду

Время обработки запросов Производителей на отправку данных

Общее время обработки запросов

kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce

Общее время, необходимое для обработки запроса.
Включает в себя сумму метрик:
Время ожидания запросов в очереди
Время обработки лидером
Время ожидания ответа follower
Время для отправки ответа

Время ожидания ответа follower

kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=Produce

Время ожидания ответа follower.
Если значение данной метрики велико, то на брокере не достаточно данных для отправки их на Потребитель (либо их нет).
В данном случае показатель метрики будет стремиться к значению настройки fetch.max.wait.ms(по умолчанию значение равно 500 мс)

Время нахождения запроса в очереди запросов на обработку брокером

kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=Produce

Время нахождения запроса на получение данных в очереди запросов на обработку брокером.
Долгое нахождение запроса на чтение в очереди может быть вызовано следующими причинами:
Недостаточное количество io threads. Посмотреть количество io threads можно в файле server.properties настройка num.io.threads (по умолчанию 8).
Неодстаточный размер Request Queue. Настройка брокера (server.properties) queued.max.requests. Значение настройки должно соответствовать количеству подключений к кластеру.
Не хвататает CPU

Время обработки запроса лидером партиции

kafka.network:type=RequestMetrics,name=LocalTimeMs,request=Produce

Время обработки запроса лидером партиции (подготовки ответа)
Долгое время обработки может быть вызвано медленными дисковыми операциями

Время нахождения ответа в очереди отправки

kafka.network:type=RequestMetrics,name=ResponseQueueTimeMs,request=Produce

Время нахождения ответа в очереди отправки.
Долгое время может быть вызвано малым количеством сетевых потоков(network threads — настройка num.network.threads)

Время отправки ответа клиенту

kafka.network:type=RequestMetrics,name=ResponseSendTimeMs,request=Produce

Время отправки ответа клиенту в секунду

Время обработки запросов последователей на получение новых данных

Общее время обработки запросов

kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchFollower

Общее время, необходимое для обработки запроса.
Включает в себя сумму метрик:
Время ожидания запросов в очереди
Время обработки лидером
Время ожидания ответа follower
Время для отправки ответа

Время ожидания ответа follower

kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=FetchFollower

Время ожидания ответа follower.
Если значение данной метрики велико, то на брокере не достаточно данных для отправки их на Потребитель (либо их нет).
В данном случае показатель метрики будет стремиться к значению настройки fetch.max.wait.ms(по умолчанию значение равно 500 мс)

Время нахождения запроса в очереди запросов на обработку брокером

kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=FetchFollower

Время нахождения запроса на получение данных в очереди запросов на обработку брокером.
Долгое нахождение запроса на чтение в очереди может быть вызовано следующими причинами:
Недостаточное количество io threads. Посмотреть количество io threads можно в файле server.properties настройка num.io.threads (по умолчанию 8).
Неодстаточный размер Request Queue. Настройка брокера (server.properties) queued.max.requests. Значение настройки должно соответствовать количеству подключений к кластеру.
Не хвататает CPU

Время обработки запроса лидером партиции

kafka.network:type=RequestMetrics,name=LocalTimeMs,request=FetchFollower

Время обработки запроса лидером партиции (подготовки ответа)
Долгое время обработки может быть вызвано медленными дисковыми операциями

Время нахождения ответа в очереди отправки

kafka.network:type=RequestMetrics,name=ResponseQueueTimeMs,request=FetchFollower

Время нахождения ответа в очереди отправки.
Долгое время может быть вызвано малым количеством сетевых потоков(network threads — настройка num.network.threads)

Время отправки ответа клиенту

kafka.network:type=RequestMetrics,name=ResponseSendTimeMs,request=FetchFollower

Время отправки ответа клиенту в секунду.
Метрика необходима для мониторинга и анализа задержек между лидеров и follower

Метрики JVM

Количество срабатываний GC в минуту
Среднее время работы GC
Процент работы GC от общего времени работы JVM

java.lang:type=GarbageCollector,name=<GC name> CollectionTime
java.lang:type=GarbageCollector,name=<GC name> CollectionCount

- общее время, затраченное на сборку мусора в миллисекундах;
- количество событий сборки мусора, произошедших с момента запуска JVM

Показатели Heap памяти

java.lang:type=Memory HeapMemory.commited
java.lang:type=Memory HeapMemory.used
java.lang:type=Memory HeapMemory.init
java.lang:type=Memory HeapMemory.max

Размер Heap памяти используемый экземпляром Java в байтах

Показатели Non-Heap памяти

java.lang:type=Memory NonHeapMemory.commited
java.lang:type=Memory NonHeapMemory.used
java.lang:type=Memory NonHeapMemory.init
java.lang:type=Memory NonHeapMemory.max

Размер Non-Heap памяти используемый экземпляром Java в байтах

Показатели fetch-сессий

Показатели инкрементальных fetch-сессий

kafka.server:type=FetchSessionCache,name=NumIncrementalFetchSessions

Количество инкрементальных fetch-сессий

kafka.server:type=FetchSessionCache,name=NumIncrementalFetchPartitionsCached

Количество партиций закешированных в инкрементальных fetch-сессиях

kafka.server:type=FetchSessionCache,name=IncrementalFetchSessionEvictionsPerSec

Количество инкрементальных fetch-сессий удаленных из кэша

Kafka Cluster Metrics#

Группа

Описание группы

JMX метрика

Описание

Метрики контроллера

Число активных контроллеров

kafka.controller:type=KafkaController,name=ActiveControllerCount

Первый запустившийся узел в кластере Corax становится контроллером. Контроллер кластера отвечает за ведения списка лидеров партиций, и координацию смены лидера, если текучий лидер становится недоступным.
Если возникает необходимость в смене контроллера, то ZooKeeper случайно выбирает новый контроллер из списка брокеров.
В «здоровом» кластере сумма по всем брокерам должна быть равна 1

Суммарное количество выборов лидера

kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs

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

Число партиций без лидера

kafka.controller:type=KafkaController,name=OfflinePartitionsCount

Партиции не имеющие активного лидера(офлайн-партиции) не доступны для записи и чтения.
В «здоровом» кластере метрика должна быть равна 0

Число незареплицированных партиций

kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions

В «здоровом» Corax-кластере все партиции должны быть реплицированы, чтобы при падении лидера не было потерь данных.
Если часть партиций нереплицирована, то при отказе лидера возможны потери данных. В «здоровом» кластере метрика должна быть равна 0

Количество UncleanLeaderElections в секунду

kafka.controller:type=ControllerStats,name=UncleanLeaderElectionsPerSec

Если лидер партиции недоступен, и при этом нет ни одной синхронизированной реплики, то в этом случае у брокеров есть два варианта действий в зависимости от настройки unclean.leader.election.enable:
если она равна true, то новый лидер партиции будет выбран из не синхронизированных партиций, данные которые не были синхронизированы будут утеряны. Такие выборы и называются UncleanLeaderElections.
если false, то партиция будет недоступна, пока не поднимется лидер, либо ее синхронизированная реплика. В «здоровом» кластере метрика должна быть равна 0

Ожидание удаления топика

kafka.controller:type=KafkaController,name=TopicsToDeleteCount

Поскольку удаление темы не всегда может быть выполнено сразу, контроллер помечает тему для удаления и ставит ее в очередь для последующей обработки. Когда большое количество тем (и их реплик) удаляется одновременно, контроллеру может потребоваться значительное время, чтобы обработать все. В это время контроллер может снижать производительность. В такие моменты необходимо знать, сколько тем и реплик еще предстоит удалить. В настоящее время оператор может только проверить прогресс удаления темы, посмотрев непосредственно в ZooKeeper на znode / admin / delete_topics.
Метрики возвращают целое значение количества тем и реплик, известных контроллеру, которые поставлены в очередь для удаления, а также количество тем/реплик, которые не могут быть удалены. Обратите внимание, что темы/реплики, которые невозможно удалить в данный момент исключены из ожидающих тем/реплик, отмеченных для удаления.
Эти метрики считываются с использованием внутреннего состояния контроллера. Во время инициализации и повторных выборов контроллера эти значения будут равны нулю, поскольку контроллер еще не прочитал список тем из ZooKeeper и не рассчитал право на удаление

Ожидающие удаления реплики

kafka.controller:type=KafkaController,name=ReplicasToDeleteCount

Количество реплик, которые ожидают удаления

Топики, не подлежащие удалению

kafka.controller:type=KafkaController,name=TopicsIneligibleToDeleteCount

Количество топиков, не подлежащих удалению

Реплики, не подлежащие удалению

kafka.controller:type=KafkaController,name=ReplicasIneligibleToDeleteCount

Количество реплик, не подлежащих удалению

Показатели нагрузки

Количество входящих сообщений в секунду

kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec

Количество входящих сообщений в секунду.
Данная метрика нужна для анализа пропускной способности сообщений по топикам

Объем данных на запись и на чтение в секунду

kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec

Количество исходящих байт в секунду.
Количество входящих байт в секунду.
Данные метрики необходимы для анализа о быстродействия чтения/записи в рамках топика

Количество запросов в секунду

kafka.network:type=RequestMetrics,name=RequestsPerSec,request={FetchConsumer|Produce|FetchFollower}

Количество запросов в секунду (Requests PerSec)

Количество записей в лог в секунду

kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs

Количество записей в лог в секунду


Количество лидеров, партиций, топиков, подключений к ZooKeeper

Количество лидеров и партиций

kafka.server:type=ReplicaManager,name=PartitionCount
kafka.server:type=ReplicaManager,name=LeaderCount

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

Число активных подключений к ZooKeeper

org.apache.ZooKeeperService:name0=ReplicatedServer_id[0-9]+,name1=replica.[0-9]+,name2={Follower|Leader}

Число активных подключений к ZooKeeper.
Метрика необходима для анализа текущего состоянии загруженности сети в рамках ZooKeeper

Kafka Topic Metrics#

JMX метрика

Описание

kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=<topic_name>

Количество входящих сообщений в секунду по топикам (Топ $topics_count)

ZooKeeper Metrics#

Группа

JMX метрика

Описание

Число активных подключений к ZooKeeper

org.apache.ZooKeeperService:name0=ReplicatedServer_id[0-9]+,name1=replica.[0-9]+,name2={Follower|Leader} NumAliveConnections

Число активных подключений к ZooKeeper.
Метрика необходима для анализа текущего состоянии загруженности сети в рамках ZooKeeper

Количество срабатываний GC в минуту
Среднее время работы GC
Процент работы GC от общего времени работы JVM

java.lang:type=GarbageCollector,name=<GC name> CollectionTime
java.lang:type=GarbageCollector,name=<GC name> CollectionCount

- общее время, затраченное на сборку мусора в миллисекундах;
- количество событий сборки мусора, произошедших с момента запуска JVM

Показатели Heap памяти

java.lang:type=Memory HeapMemory.commited
java.lang:type=Memory HeapMemory.used
java.lang:type=Memory HeapMemory.init
java.lang:type=Memory HeapMemory.max

Размер Heap памяти используемый экземпляром Java в байтах

Показатели Non-Heap памяти

java.lang:type=Memory NonHeapMemory.commited
java.lang:type=Memory NonHeapMemory.used
java.lang:type=Memory NonHeapMemory.init
java.lang:type=Memory NonHeapMemory.max

Размер Non-Heap памяти используемый экземпляром Java в байтах

ZooKeeper предоставляет метрики через MBeans, через CLI предоставляемые AdminServer:

echo mntr | nc localhost 2181

или

curl http://localhost:8080/commands/monitor

Имя метрики

Описание

Тип метрики

Способ получения метрики

pending_syncs

Количество ожидающих sync от followers

Other

Four-letter words, AdminServer, JMX

outstanding_requests

Количество запросов в очереди

Resource: Saturation

Four-letter words, AdminServer, JMX

open_file_descriptor_count

Количество используемых файловых дескрипторов

Resource: Utilization

Four-letter words, AdminServer

num_alive_connections

Количество клиентов, подключенных к ZooKeeper

Resource: Availability

Four-letter words, AdminServer, JMX

followers

Количество активных followers

Resource: Availability

Four-letter words, AdminServer

avg_latency

Время, необходимое для ответа на запрос клиента (в ms)

Work: Throughput

Four-letter words, AdminServer, JMX

HTTPReporter#

HTTPReporter — это компонент, который экспортирует метрики в формате Prometheus. При запуске брокера на указанном порту HTTP сервер начинает отдавать метрики, доступные для сбора и мониторинга системами вроде Prometheus.

Включение HTTPReporter#

Для активации HTTPReporter необходимо добавить следующую конфигурацию в server.properties:

metric.reporters=ru.sbrf.kafka.HttpReporter

Настройка#

Настройка HTTP порта#

Для настройки порта пропишите следующие параметры:

  • metrics.http.port — порт, на котором будет запущен HTTP сервер для экспорта метрик. По умолчанию 7011.

  • metrics.http.host — IP-адрес или FQDN, на котором будет доступен HTTP сервер. По умолчанию — все доступные адреса хоста.

Если нужно настроить сервер для работы только на одном из IP, пропишите в параметре metrics.http.host один из следующих вариантов:

  • 127.0.0.1 — для локального доступа (повышает безопасность метрик).

  • Внешний IP-адрес или FQDN — для внешнего доступа.

  • Оставьте параметр пустым (или закомментируйте/удалите из server.properties) — для использования всех доступных адресов.

По умолчанию метрики экспортируются по адресу:

http://<hostname>:7011/metrics

Настройка HTTPS порта#

Для включения HTTPS экспорта метрик, настройте дополнительный порт с SSL. HTTPS порт всегда требует настройку SSL с префиксом metrics.https в файле server.properties.

server.properties

metrics.https.port=7012
metrics.https.host=<external_IP/FQDN>

Для корректной работы HTTPS укажите пути до SSL сертификатов:

  • metrics.https.ssl.keystore.location — путь до хранилища ключей (Keystore).

  • metrics.https.ssl.keystore.password — пароль для Keystore.

  • metrics.https.ssl.truststore.location — путь до хранилища доверенных сертификатов (Truststore).

  • metrics.https.ssl.truststore.password — пароль для Truststore.

Пример:

metrics.https.port=7012
metrics.https.host=<external_IP/FQDN>
metrics.https.ssl.keystore.location=ssl/keystore.jks
metrics.https.ssl.keystore.password=<password>
metrics.https.ssl.truststore.location=ssl/truststore.jks
metrics.https.ssl.truststore.password=<password>
metrics.https.ssl.endpoint.identification.algorithm=all

Настройка URI для кастомных метрик#

HTTPReporter поддерживает добавление пользовательских меток (labels) к уже имеющимся базовым метрикам для улучшения их интеграции с системами мониторинга. Это особенно полезно для фильтрации и сортировки метрик по специфическим параметрам. При необходимости настройте кастомные URI для экспорта определенного подмножества метрик, используя параметры:

  • metrics.http.group.{group_name}.httpcontext — название URI контекста.

  • metrics.http.group.{group_name}.regexpfilte — регулярное выражение для фильтрации метрик.

  • metrics.http.group.{group_name}.groupfilter — фильтр по группе метрик.

  • metrics.http.group.{group_name}.labels — дополнительные метки (лейблы) для метрик, в формате: key1=val1[,key2=val2].

Пример:

metric.reporters=ru.sbrf.kafka.HttpReporter

# Экспорт всех метрик
metrics.http.group.all.httpcontext=all
metrics.http.group.all.regexpfilter=.* # Все метрики экспортируются по http://<hostname>:7011/all.

# Экспорт метрик по смещениям (offsets)
metrics.http.group.offsets.httpcontext=offsets
metrics.http.group.offsets.groupfilter=kafka.coordinator.group.GroupMetadata
metrics.http.group.offsets.labels=host=myhost,app=my-app # Лейблы добавляются к каждой метрике.

Использование SecMan для SSL#

HTTPReporter также поддерживает использование сертификатов из SecMan для HTTPS-соединения.

Пример:

metrics.https.ssl.truststore.password=${my_secman:truststore.password}
metrics.https.ssl.endpoint.identification.algorithm=all
metrics.https.secman.endpoint=https://secman.url:8443
metrics.https.secman.namespace=DEV_DZO
metrics.https.secman.fetch.role=role-ga-secman-pki
metrics.https.secman.fetch.mount.path=PKI
metrics.https.secman.fetch.cn=<cn>

Примечание:

При ошибках в конфигурации SSL брокер может не отработать (например, если пути к сертификатам и паролям будут некорректно заданы или будут отсутствовать), и появится следующая ошибка в server.log:

ERROR [KafkaServer id=1] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.NullPointerException: No 'metrics.https.ssl.keystore.location' property in config.