Мониторинг#

По умолчанию в 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)

Consumer Lag Metrics#

JMX-метрика

Описание

kafka.consumer:type=consumer-fetch-manager-metrics,client-id={client-id} Attribute: records-lag-max

Количество сообщений, на которое потребитель отстает от производителя (автора сообщений). Публикуется потребителем, а не брокером

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

Метрики авторизации#

Описание

JMX-метрика

Атрибуты

Текущее количество успешных ACL-авторизаций

ru.sbrf.kafka.authorizer:type=CoraxAuthorizer,name=AllowedCount

  • Count — количественное значение метрики;

  • Rate — единица измерения *Rate параметров;

  • MeanRate — средняя скорость выполнения запроса авторизации за все время наблюдений;

  • FifteenMinuteRate — средняя скорость выполнения запроса авторизации за последние 15 минут;

  • FiveMinuteRate — средняя скорость выполнения запроса авторизации за последние 5 минут;

  • OneMinuteRate — средняя скорость выполнения запроса авторизации за последнюю 1 минуту

Текущее количество отказов в ACL авторизации

ru.sbrf.kafka.authorizer:type=CoraxAuthorizer,name=DeniedCount

  • Count — количественное значение метрики;

  • Rate — единица измерения *Rate параметров;

  • MeanRate — средняя скорость выполнения запроса авторизации за все время наблюдений;

  • FifteenMinuteRate — средняя скорость выполнения запроса авторизации за последние 15 минут;

  • FiveMinuteRate — средняя скорость выполнения запроса авторизации за последние 5 минут;

  • OneMinuteRate — средняя скорость выполнения запроса авторизации за последнюю 1 минуту

Количество случаев срабатывания fallback алгоритма (когда произошло переключение с Corax авторизации на базовую авторизацию)

ru.sbrf.kafka.authorizer:type=CoraxAuthorizer,name=BypassCount

  • Count — количественное значение метрики;

  • Rate — единица измерения *Rate параметров;

  • MeanRate — средняя скорость выполнения запроса авторизации за все время наблюдений;

  • FifteenMinuteRate — средняя скорость выполнения запроса авторизации за последние 15 минут;

  • FiveMinuteRate — средняя скорость выполнения запроса авторизации за последние 5 минут;

  • OneMinuteRate — средняя скорость выполнения запроса авторизации за последнюю 1 минуту

Количество срабатываний проверок ACL по strict паттерну ACL

ru.sbrf.kafka.authorizer:type=CoraxAuthorizer,name=StrictCheckCount

  • Count — количественное значение метрики;

  • Rate — единица измерения *Rate параметров;

  • MeanRate — средняя скорость выполнения запроса авторизации за все время наблюдений;

  • FifteenMinuteRate — средняя скорость выполнения запроса авторизации за последние 15 минут;

  • FiveMinuteRate — средняя скорость выполнения запроса авторизации за последние 5 минут;

  • OneMinuteRate — средняя скорость выполнения запроса авторизации за последнюю 1 минуту

Количество срабатываний проверок ACL по мягкому паттерну

ru.sbrf.kafka.authorizer:type=CoraxAuthorizer,name=SoftCheckCount

  • Count — количественное значение метрики;

  • Rate — единица измерения *Rate параметров;

  • MeanRate — средняя скорость выполнения запроса авторизации за все время наблюдений;

  • FifteenMinuteRate — средняя скорость выполнения запроса авторизации за последние 15 минут;

  • FiveMinuteRate — средняя скорость выполнения запроса авторизации за последние 5 минут;

  • OneMinuteRate — средняя скорость выполнения запроса авторизации за последнюю 1 минуту

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

ru.sbrf.kafka.authorizer:type=CoraxAuthorizer,name=QueriesLastMinute

Value — числовое значение метрики

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

ru.sbrf.kafka.authorizer:type=CoraxAuthorizer,name=AlgorithmDurationNanos

  • 50thPerscentile — 50-й персентиль;

  • 75thPerscentile — 75-й персентиль;

  • 95thPerscentile — 95-й персентиль;

  • 98thPerscentile — 98-й персентиль;

  • 99thPerscentile — 99-й персентиль;

  • 999thPerscentile — 99.9-й персентиль;

  • Count — количество авторизаций;

  • Max — максимальное время авторизации (в наносекундах);

  • Mean — среднее арифметическое время авторизации (в наносекундах);

  • Min — минимальное время авторизации (в наносекундах);

  • StdDev — стандартное отклонение от среднего значения времени авторизации (в наносекундах)

Дополнительные метрики#

Описание

JMX-метрика

Атрибуты

committed смещение группы в топике в определенной партиции или сумма смещений, если partition=all.

kafka.coordinator.group.GroupMetadata.offset

  • topic — bмя топика;

  • group — имя группы;

  • partition — номер партиции

Время последнего коммита группы в топике для определенной партиции.

kafka.coordinator.group.GroupMetadata.timestamp

  • topic - имя топика;

  • group - имя группы;

  • partition - номер партиции

Дата создания самого раннего сообщения непрочитанного группой. Обновляется каждые timestamp.metadata.group.metrics.period секунд.

kafka.coordinator.group.PublishConsumersEarliestUncommittedMessageTimestampTask.EarliestUncommittedMessageTimestamp

  • topic - имя топика;

  • group - имя группы

Суммарный лаг группы по топику. Обновляется каждые offset.metadata.group.lag.period секунд.

kafka.coordinator.group.PublishConsumersLagsTask.lag

  • topic - имя топика;

  • group - имя группы

Время последнего обновления лага группы.

kafka.coordinator.group.PublishConsumersLagsTask.timestamp

  • topic - имя топика;

  • group - имя группы

Сумма смещений для партиций топика. Учитываются только те партиции для которых брокер являетс лидером.

kafka.server.ReplicaManager.LogEndOffset

  • topic - имя топика

Суммарный размер партиций топика в байтах

kafka.log.Log.Size

  • topic - имя топика;

  • partition=all

Суммарный размер партиций топика в байтах

kafka.server.config

Внутри этой группы (JMX bean) генерируются метрики со значением всех настроек заданных в server.properties

Настройка#

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 — путь до хранилища ключей.

  • metrics.https.ssl.keystore.password — пароль для хранилища ключей.

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

  • metrics.https.ssl.truststore.password — пароль для хранилища доверенных сертификатов.

Пример:

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.
Настройки для метрик топика#

Параметр metrics.topic.size.period задает период обновления метрики суммарного размера партиций топика (в секундах). По умолчанию 60 секунд.

Метрики смещений и меток времени#

Дополнительные метрики по смещениям групп потребителей и меткам времени управляются параметрами в файле server.properties.

Включение метрик смещений#

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

# Включение сбора метрик по смещению в топиках
offset.metadata.group.metrics.enabled=true

# Включение детальных метрик в разрезе партиций
offset.metadata.group.detailed.metrics.enabled=false

Параметры метрик смещений#

  • offset.metadata.group.metrics.enabled — включает или выключает сбор дополнительных метрик по смещению в топиках. По умолчанию false.

  • offset.metadata.group.detailed.metrics.enabled — включает или выключает сбор дополнительных метрик в разрезе партиций по смещению в топиках. По умолчанию false.

  • offset.metadata.group.lag.metrics.enabled — включает сбор метрик consumer lag на координаторе группы. По умолчанию true.

  • offset.metadata.group.lag.period — период обновления метрики лага группы (в секундах). По умолчанию 60.

  • offset.metadata.group.lag.timestamps.enabled — включает метрики времени обновления лага. По умолчанию true.

  • offset.metadata.group.lag.pool.size — количество потоков для отправки запросов на лидеров при обновлении лага группы. По умолчанию 4.

Включение метрик меток времени#

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

# Включение сбора метрик по времени старейшего непрочитанного сообщения
timestamp.metadata.group.metrics.enabled=true

# Период обновления метрики (в секундах)
timestamp.metadata.group.metrics.period=300

Параметры метрик меток времени#

  • timestamp.metadata.group.metrics.enabled — включает или выключает сбор дополнительных метрик по времени старейшего непрочитанного сообщения в топиках. По умолчанию false.

  • timestamp.metadata.group.metrics.period — период обновления метки времени старейшего непрочитанного сообщения группы в топике (в секундах). По умолчанию 300.

  • timestamp.metadata.group.metrics.whitelist — регулярное выражение, задающее шаблон групп, для которых необходимо собирать метрику времени старейшего непрочитанного сообщения. По умолчанию не задано (собираются все группы, если не задан timestamp.metadata.group.metrics.blacklist).

  • timestamp.metadata.group.metrics.blacklist — регулярное выражение, задающее шаблон групп, для которых не собирается метрика времени старейшего непрочитанного сообщения. По умолчанию не задано.

Пример полной конфигурации:

# Метрики смещений
offset.metadata.group.metrics.enabled=true
offset.metadata.group.detailed.metrics.enabled=true
offset.metadata.group.lag.metrics.enabled=true
offset.metadata.group.lag.period=30
offset.metadata.group.lag.timestamps.enabled=true
offset.metadata.group.lag.pool.size=8

# Метрики меток времени
timestamp.metadata.group.metrics.enabled=true
timestamp.metadata.group.metrics.period=60
timestamp.metadata.group.metrics.whitelist=^my-app-.*
timestamp.metadata.group.metrics.blacklist=^internal-.*