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

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

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

`kafka.server:type=DelayedOperationPurgatory,name=PurgatorySize,delayedOperation={Fetch

Produce}`

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

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

Показатели 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

Если лидер партиции упал, и при этом нет ни одной синхронизированной реплики, то в этом случае у брокеров есть 2 варианта действий в зависимости от настройки 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

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

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}`

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 | | | | Показатели 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