Мониторинг метрик Kafka с помощью Prometheus и Grafana
Нет нужды говорить о том, как важно следить за состоянием развертывания kafka. Ниже я собираюсь продемонстрировать Вам, как в этих целях мы можем использовать готовые решения Prometheus и Grafana.
Прежде чем мы продолжим, кратко расскажу о Prometheus и Grafana. Prometheus - это база данных временных рядов для сбора метрик в режиме реального времени из любого приложения по протоколу http. Grafana - это инструмент визуализации данных, хранящихся в Prometheus. Хотя Prometheus поставляется со встроенным пользовательским интерфейсом, он очень наивен по сравнению с Grafana.
Базовая установка
Пожалуйста, следуйте приведенным ниже инструкциям. Моя локальная система установлена на Fedora (версия 37).
- Kafka : https://kafka.apache.org/quickstart
- Prometheus : https://devopscube.com/install-configure-prometheus-linux/
- Prometheus jmx exporter java agent : https://github.com/prometheus/jmx_exporter
- Grafana : https://grafana.com/docs/grafana/latest/setup-grafana/installation/rpm/
После того как основные шаги по установке будут выполнены, Вы можете перейти к объединению всех этих решений.
Настройка Kafka
1. Откройте файл «zookeeper-server-start.sh» и добавьте нижеприведенные строки перед последней строкой. Это позволит включить jmx-порты для jconsole и Prometheus.
export JMX_PORT=9998 export JMX_PROMETHEUS_PORT=7072
2. Откройте файл «kafka-server-start.sh» и перед последней строкой добавьте следующие строки:
export JMX_PORT=9999 export JMX_PROMETHEUS_PORT=7071
3. Откройте файл «kafka-run-class.sh» и измените настройки JMX на указанные ниже. Настройки KAFKA_JMX_OPTS должны быть в одной строке. Пожалуйста, измените каталоги в соответствии с вашей локальной установкой.
# JMX settings if [ -z “$KAFKA_JMX_OPTS” ]; then KAFKA_JMX_OPTS=”-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost -Djava.net.preferIPv4Stack=true -javaagent:/home/prometheus/jmx_prometheus_javaagent-0.17.2.jar=$JMX_PROMETHEUS_PORT:/home/prometheus/kafka-2_0_0.yml” fi
4. Запустите серверы zookeeper и kafka. При успешном запуске по следующим ссылкам Вы должны увидеть метрики jmx:
http://localhost:7071/metrics [kafka jmx metrics] http://localhost:7072/metrics [zookeeper jmx metrics]
Настройка Prometheus
Если установка Prometheus прошла успешно, Вы должны увидеть его на порту 9090.
http://localhost:9090
Добавьте нижеприведенный текст в конец файла «/etc/prometheus/prometheus.yml» для того, чтобы зарегистрировать сервер kafka и сервер zookeeper в качестве целей для сбора метрик Prometheus:
- job_name: "kafka-server"
static_configs:
- targets: ["localhost:7071"]
- job_name: "zookeeper-server"
static_configs:
- targets: ["localhost:7072"]
Перезапустите Prometheus, используя приведенные ниже команды:
sudo systemctl stop prometheus sudo systemctl start prometheus
Теперь Вы можете видеть метрики kafka в пользовательском интерфейсе Prometheus, пример приведен ниже.
Настройка Grafana
Если установка Grafana прошла успешно, запустите ее с помощью следующей команды (если она еще не запущена) из каталога развертывания bin.
./grafana-server web
Если все прошло успешно, Вы должны увидеть, что он подключен к порту 3000 по умолчанию. Имя пользователя и пароль по умолчанию - «admin». При первом входе в систему будет предложено изменить пароль.
Далее добавьте Prometheus в качестве источника данных. Нажмите на Настройки -> Источники данных -> Добавить источник данных. Введите локальный url Prometheus.
Далее Вы можете либо создать дашборд с нуля, либо импортировать существующий готовый шаблон дашборда Grafana. Ниже приведено то, что я импортировал для этого поста.
https://grafana.com/dashboards/721
Ниже показан дашборд Grafana, отражающий показатели моего сервера kafka в реальном времени.













