События мониторинга#
По умолчанию в 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 метрика |
Описание |
|---|---|---|---|
Показатели нагрузки |
Количество входящих сообщений в секунду(по всем топикам) |
|
Количество входящих сообщений в секунду. |
Количество запросов в секунду(Requests PerSec) |
k |
Количество запросов в секунду. |
|
Объем данных на запись и на чтение в секунду (BytestIn/OutPerSec) |
|
Количество исходящих байт в секунду. |
|
Количество записей в лог в секунду/Время записи в лог (LogFlushRateAndTimeMs) |
|
Количество записей в лог в секунду. |
|
Количество produce-запросов в секунду (TotalProduceRequestsPerSec) |
|
Количество produce-запросов в секунду. |
|
Размер очереди запросов |
|
Размер очереди запросов. |
|
Количество лидеров, партиций |
Количество лидеров и партиций |
|
Количество партиций должно быть примерно одинаковое для всех брокеров. |
Показатели репликации |
Сокращение и расширение синхронизированных реплик в секунду |
|
Метрика IsrExpandsPerSec показывает увеличение количества партиций, входящих в ISR, в секунду. |
Максимальное отставание в репликации |
|
Максимальное отставание в реплицировании сообщений между лидером и follower. |
|
Показатели отложенных запросов |
Число истекших запросов в секунду |
|
Запросы (consumer — запросы Потребителей на получение новых данных, follower — запросы других брокеров на получение данных для репликации) приходящие на брокер попадают в purgatory — по сути это очередь, в которой они ждут обработки. |
Объем хранилища отложенных запросов |
|
Количество запросов, ожидающих обработки во временном хранилище. |
|
Показатели загруженности обработчиков |
Cредний процент времени простоя обработчика запросов в пуле |
|
Средняя доля времени простоя обработчиков запросов. |
Средний процент времени простоя сетевых процессоров |
|
Средняя доля времени простоя сетевых процессоров. |
|
Статистика состояний подключения клиентов к ZooKeeper |
Статистика состояний подключения клиентов к ZooKeeper |
|
Количество ошибок аутентификации в секунду |
|
Количество разъединений в секунду |
||
|
Количество истекших сессий в секунду |
||
|
Количество подключений только на чтение в секунду. |
||
|
Количество успешных аутентификаций в секунду |
||
|
Количество успешных подключений в секунду |
||
Время обработки запросов Потребителей на получение новых данных |
Общее время обработки запросов |
|
Общее время, необходимое для обработки запроса. |
Время ожидания ответа follower |
|
Время ожидания ответа follower. |
|
Время нахождения запроса в очереди запросов на обработку брокером |
|
Время нахождения запроса на получение данных в очереди запросов на обработку брокером. |
|
Время обработки запроса лидером партиции |
|
Время обработки запроса лидером партиции (подготовки ответа). |
|
Время нахождения ответа в очереди отправки |
|
Время нахождения ответа в очереди отправки. |
|
Время отправки ответа клиенту |
|
Время отправки ответа клиенту в секунду |
|
Время обработки запросов Производителей на отправку данных |
Общее время обработки запросов |
|
Общее время, необходимое для обработки запроса. |
Время ожидания ответа follower |
|
Время ожидания ответа follower. |
|
Время нахождения запроса в очереди запросов на обработку брокером |
|
Время нахождения запроса на получение данных в очереди запросов на обработку брокером. |
|
Время обработки запроса лидером партиции |
|
Время обработки запроса лидером партиции (подготовки ответа) |
|
Время нахождения ответа в очереди отправки |
|
Время нахождения ответа в очереди отправки. |
|
Время отправки ответа клиенту |
|
Время отправки ответа клиенту в секунду |
|
Время обработки запросов последователей на получение новых данных |
Общее время обработки запросов |
kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchFollower |
Общее время, необходимое для обработки запроса. |
Время ожидания ответа follower |
|
Время ожидания ответа follower. |
|
Время нахождения запроса в очереди запросов на обработку брокером |
kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=FetchFollower |
Время нахождения запроса на получение данных в очереди запросов на обработку брокером. |
|
Время обработки запроса лидером партиции |
|
Время обработки запроса лидером партиции (подготовки ответа) |
|
Время нахождения ответа в очереди отправки |
|
Время нахождения ответа в очереди отправки. |
|
Время отправки ответа клиенту |
|
Время отправки ответа клиенту в секунду. |
|
Метрики JVM |
Количество срабатываний GC в минуту |
|
- общее время, затраченное на сборку мусора в миллисекундах; |
Показатели Heap памяти |
|
Размер Heap памяти используемый экземпляром Java в байтах |
|
Показатели Non-Heap памяти |
|
Размер Non-Heap памяти используемый экземпляром Java в байтах |
|
Показатели fetch-сессий |
Показатели инкрементальных fetch-сессий |
|
Количество инкрементальных fetch-сессий |
|
Количество партиций закешированных в инкрементальных fetch-сессиях |
||
|
Количество инкрементальных fetch-сессий удаленных из кэша |
Kafka Cluster Metrics#
Группа |
Описание группы |
JMX метрика |
Описание |
|---|---|---|---|
Метрики контроллера |
Число активных контроллеров |
|
Первый запустившийся узел в кластере Corax становится контроллером. Контроллер кластера отвечает за ведения списка лидеров партиций, и координацию смены лидера, если текучий лидер становится недоступным. |
Суммарное количество выборов лидера |
|
Суммарное количество выборов лидера. |
|
Число партиций без лидера |
|
Партиции не имеющие активного лидера(офлайн-партиции) не доступны для записи и чтения. |
|
Число незареплицированных партиций |
|
В «здоровом» Corax-кластере все партиции должны быть реплицированы, чтобы при падении лидера не было потерь данных. |
|
Количество UncleanLeaderElections в секунду |
|
Если лидер партиции недоступен, и при этом нет ни одной синхронизированной реплики, то в этом случае у брокеров есть два варианта действий в зависимости от настройки |
|
Ожидание удаления топика |
|
Поскольку удаление темы не всегда может быть выполнено сразу, контроллер помечает тему для удаления и ставит ее в очередь для последующей обработки. Когда большое количество тем (и их реплик) удаляется одновременно, контроллеру может потребоваться значительное время, чтобы обработать все. В это время контроллер может снижать производительность. В такие моменты необходимо знать, сколько тем и реплик еще предстоит удалить. В настоящее время оператор может только проверить прогресс удаления темы, посмотрев непосредственно в ZooKeeper на znode / admin / delete_topics. |
|
Ожидающие удаления реплики |
|
Количество реплик, которые ожидают удаления |
|
Топики, не подлежащие удалению |
|
Количество топиков, не подлежащих удалению |
|
Реплики, не подлежащие удалению |
|
Количество реплик, не подлежащих удалению |
|
Показатели нагрузки |
Количество входящих сообщений в секунду |
|
Количество входящих сообщений в секунду. |
Объем данных на запись и на чтение в секунду |
|
Количество исходящих байт в секунду. |
|
Количество запросов в секунду |
|
Количество запросов в секунду (Requests PerSec) |
|
Количество записей в лог в секунду |
|
Количество записей в лог в секунду |
|
|
Количество лидеров и партиций |
|
Количество партиций партиций на брокере. |
Число активных подключений к ZooKeeper |
|
Число активных подключений к ZooKeeper. |
Kafka Topic Metrics#
JMX метрика |
Описание |
|---|---|
|
Количество входящих сообщений в секунду по топикам (Топ $topics_count) |
ZooKeeper Metrics#
Группа |
JMX метрика |
Описание |
|---|---|---|
Число активных подключений к ZooKeeper |
|
Число активных подключений к ZooKeeper. |
Количество срабатываний GC в минуту |
|
- общее время, затраченное на сборку мусора в миллисекундах; |
Показатели Heap памяти |
|
Размер Heap памяти используемый экземпляром Java в байтах |
Показатели Non-Heap памяти |
|
Размер 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.