Мониторинг Kafka в Prometheus

Алгоритм действий состоит из следующих шагов:

1.Запуск Kafka-экспортера для сбора метрик с Kafka и отдачи их Prometheus-у
2.Запуск JMX-экспортера для сбора метрик с Java virtual machine-based(JVM)приложений и отдачи их Prometheus-у
3.Настройка Prometheus-а для сбора метрик с Kafka и JMX-экспортеров
4.Импортирование/настройка dashboard-ов Grafana для визуализации метрик для Kafka и JMX
5.Настрйка правил Prometheus для мониторинга Kafka и JMX показателей

 

1.Запуск Kafka-экспортера для сбора метрик с Kafka и отдачи их Prometheus-у

https://github.com/danielqsj/kafka_exporter
Kafka-экспортер всегда запускаем в Docker-контейнере(независимо от того, запущена Kafka в контейнера или запущена Kafka непосредственно на хосте)

Если Kafka запущена в Docker-контейнере, тогда

Kafka-экспортер запускаем в той же docker-сети, в которой и запущен kafka-контейнер,чтобы средствами докера экспортер смог разименовать имя kafka-контейнера в его IP-адрес и подключиться по этому IP-адресу для снятия с него метрик

Параметр —kafka.server определяет адрес kafka-сервера, с которого необходимо собирать метрики( по умолчанию kafka:9092 )
В данном случае kafka-контейнер имеет имя mq, поэтому значение параметра

Если Kafka запущена не в Docker-контейнере, а непостредственно на хосте, тогда для сбора метрик с Kafka можно подключаться, например, к внутреннему интерфейсу хоста, на который нужно настроить прослушивание запросов kafka

В таком случае значение параметр —kafka.server может иметь вид

Больше информации о возможных параметрах доступно здесь

https://github.com/danielqsj/kafka_exporter

Также здесь пробрасывается порт,на котором слушает запросы kafka-exporter наружу на, например, туннельный IP-адрес(10.10.110.117) и на порт, например,9308, чтобы Prometheus смог подключиться к kafka-экспортеру для сбора метрик с него.
env-файл для docker-compose имеет вид

Если не используется docker-compose

Если используется docker-compose

Проверка синтаксиса docker-compose-файла

Создание и запуск kafka-exporter контейнера

Проверяем наличие запущенного kafka-exporter контейнера, который будет собирать метрики с redis-контейнера

С хоста, на котором запущен kafka-контейнер проверяем доступность метрик с kafka-экспортера
Список показателей достаточно длинный, поэтому просто вывел их количество

С мониторинг хоста получаем такой же успешный ответ

 

2.Запуск JMX-экспортера для сбора метрик с Java virtual machine-based(JVM) и отдачи их Prometheus-у

https://github.com/prometheus/jmx_exporter

Для загрузки jmx-экспортера и его конфигурационного файла выполним скрипт

Если Kafka-запускается в Docker, тогда встараиваем JMX-экспортера путем передачи опции KAFKA_OPTS в виде переменной, в которой указываем jmx-экспортер
Например:

env-файл для docker-compose имеет вид

Если Kafka-запускается запускается не в Docker, а через запуск бинарника непоредственно на хосте:
https://github.com/apache/kafka, тогда добавляем jmx-экспортер в bash-скрипт

Проверяем доступность порта jmx-экспортера и получение с него метрик

 

3.Настройка Prometheus-а для сбора метрик с Kafka и JMX-экспортеров

Добавляем kafka-экпортер в service discovery файл

Добавляем jmx-экcпортер в service discovery файл

Подключаем эти service discovery файлы в Prometheus

Проверка синтаксиса конфиг.файла Prometheus и файлов с правилами

Перечитываем конф.файл Prometheus

После чего проверяем в Prometheus наличие новой цели для мониторинга

 

4.Импортирование/настройка dashboard Grafana для визуализации метрик
Импортируем дашбоард отсюда
для Kafka-exporter(https://github.com/danielqsj/kafka_exporter)
https://grafana.com/grafana/dashboards/7589

Я изменил его под свои задачи
kafka_dashboard.config

 

Также создал kafka-jmx-dashboard на основе jmx-экспортера (https://github.com/prometheus/jmx_exporter)
kafka_jmx_dashboard.config

 

5.Настройка правил Prometheus для мониторинга Kafka и JMX -показателей

В качестве источника для создания правил была выбраны статьи:
https://blog.serverdensity.com/how-to-monitor-kafka
https://www.datadoghq.com/blog/monitoring-kafka-performance-metrics

Добавляем несколько правил для мониторинга Kafka и JMX -показателей
1.Количество kafka-брокеров (kafka_number_broker)
2.Количество ордеров orders1 в топике topicname1 (kafka_number_orders1)
3.Количество ордеров orders2 в топике topicname2 (kafka_number_orders2)
4.Количество under-replicated partitions(kafka_topic_partition_under_replicated_partition)
5.Количество partition-ов без активного лидира (такие partition недоступны как на чтение, так и на запись)(kafka_offline_partitions_count)
6.Количество активных broker-контроллеров(kafka_active_controller_count)
7.LeaderElectionRateAndTimeMs reports the rate of leader elections (per second) and the total time the cluster went without a leader (in milliseconds).(kafka_leader_election_rate_and_timems)
8.Количество partitions в системе( kafka_partitions_count)
9.When a broker goes down, ISR will shrink for some of the partitions. When that broker is up again, ISR will be expanded once the replicas have fully caught up. (kafka_isrshrinks_isrexpands_rate)
10.The average fraction of time the network processors are idle. (kafka_network_processor_avg_idle_percent)
11.Использование оперативной памяти(kafka_memory_usage)

 

Проверка синтаксиса конфиг.файла Prometheus и файлов с правилами

Перечитываем конф.файл Prometheus

После чего в Prometheus→Alerts появляются добавленные правила

 

Источник:
https://github.com/danielqsj/kafka_exporter
https://github.com/prometheus/jmx_exporter
https://blog.serverdensity.com/how-to-monitor-kafka
https://www.datadoghq.com/blog/monitoring-kafka-performance-metrics
https://grafana.com/grafana/dashboards/7589

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика