С развитием микросервисной архитектуры появляются новые инструменты, которые облегчают и упрощают работу с микросервисными приложениями. Одним из таких инструментов является Apache Kafka — популярная платформа и система для обработки потоковых данных и обмена сообщениями в режиме реального времени. Ее используют различные компании по всему миру для построения масштабируемых систем передачи сообщений, аналитики данных и для интеграции с микросервисными приложениями.
Kafka, будучи основным сервисом в архитектуре приложений, требует наличия мониторинга. Без должного мониторинга кластер может столкнуться со сбоями в работе, что может привести к потере данных или утечкам информации. Сегодня мы подробно разберем, как организовать мониторинг Apache Kafka.
Прежде чем приступать к процессу организации мониторинга и защиты Kafka, разберем архитектуру программы.
Kafka — это распределенная система, которая состоит из нескольких ключевых компонентов:
Сообщения в Kafka представляют собой пары ключ-значение, которые записываются в партиции в виде логов. Потребители читают эти сообщения, отслеживая свое положение в логе. Такая архитектура обеспечивает высокую пропускную способность, но делает систему уязвимой к сбоям, если не уделять внимания мониторингу и безопасности.
Kafka часто играет роль центрального компонента в инфраструктуре больших приложений, особенно при использовании в микросервисной архитектуре. Например, он может передавать миллионы событий в секунду между несколькими системами или базами данных. Любая задержка, сбой или потеря данных может привести к серьезным последствиям включая как финансовые потери, так и потери данных. В связи с этим необходимо выстроить мониторинг Kafka, который будет решать такие задачи как:
Эффективный мониторинг требует отслеживания метрик на всех уровнях системы. Рассмотрим основные категории и примеры.
vds
Разберем настройку мониторинга для Kafka на практике.
Нам понадобится один сервер или одна виртуальная машина с любым предустановленным дистрибутивом Linux. В данной статье в качестве примера мы будем использовать дистрибутив Ubuntu версии 24.04.
Сервер должен соответствовать следующим требованиям:
Минимум 4 ГБ оперативной памяти. Данный объем подойдет только для настройки и тестового использования Apache Kafka и не предназначен для решения высокоресурсных задач. Для более серьезных задач необходимо минимум 8 ГБ оперативной памяти.
Минимум одноядерный процессор для базовой конфигурации. Для выполнения реальных задач (например, для работы с большим объемом данных, для работы с математическими и научными вычислениями) рекомендуется 4-ядерный процессор.
Наличие публичного IP-адреса, который можно арендовать на этапе создания сервера в разделе «Сеть».
Сервер можно создать в панели управления в разделе «Облачные серверы». В процессе рекомендуем выбрать регион с минимальным пингом для быстрой передачи данных. Остальные параметры можно оставить без изменений.
Сервер будет запущен через пару минут, и вы сможете найти IP-адрес, логин и пароль для подключения на Дашборде сервера.
Для начала установим Kafka, используя следующие шаги:
1) Обновляем индекс репозиториев и устанавливаем пакет OpenJDK 11, который необходим для запуска Kafka:
apt update && apt -y install openjdk-11-jdk
2) Проверяем что Java была успешно установлена путем вывода ее версии:
java -version
Если в ответ команда вернула версию, то Java успешно установлена в системе.
3) Далее с помощью утилиты wget
скачиваем архив с программой (используемая версия — 3.9.0):
wget https://downloads.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
4) Разархивируем скачанный архив при помощи команды:
tar -xvzf kafka_2.13-3.9.0.tgz
На выходе появится директория с именем kafka_2.13-3.9.0
. Переместим ее в директорию /opt/kafka
:
mv kafka_2.13-3.9.0 /opt/kafka
5) Далее для удобного управления Kafka создадим systemd
-юниты. Начнем с Zookeeper. При помощи любого текстового редактора создаем файл zookeeper.service
:
nano /etc/systemd/system/zookeeper.service
Используем следующее содержимое:
[Unit]
Description=Apache Zookeeper service
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Сохраняем изменения и выходим из файла.
Также создаем systemd
-файл для kafka:
nano /etc/systemd/system/kafka.service
Содержимое будет следующим:
[Unit]
Description=Apache Kafka Service
Requires=zookeeper.service
[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
[Install]
WantedBy=multi-user.target
6) Перечитываем конфигурационные файлы демонов при помощи команды:
systemctl daemon-reload
7) Запускаем сначала Zookeeper:
systemctl start zookeeper
И проверяем его статус:
systemctl status zookeeper
В статусе должно отображаться active (running)
, что свидетельствует об успешном запуске Zookeeper.
Далее запускаем Kafka:
systemctl start kafka
И также проверяем статус:
systemctl status kafka
В статусе должно отображаться active (running)
, что свидетельствует об успешном запуске Kafka.
8) Дополнительно создадим отдельного пользователя, которого далее назначим владельцем всех файлов и директорий, используемых Kafka:
useradd -r -m -s /bin/false kafka
9) Задаем необходимые права:
chown -R kafka:kafka /opt/kafka
После того как оба сервиса — ZooKeeper и Kafka — были запущены, проверим работоспособность Kafka.
Все команды ниже необходимо выполнять из директории /opt/kafka
. Перейти в нее можно так:
cd /opt/kafka
1) Создадим новый топик с именем new-topic1
:
bin/kafka-topics.sh --create --topic new-topic1 --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
При успешном создании топика в терминале будет выведено сообщение «Created topic new-topic1».
2) Также выполним команду для вывода всех топиков в текущем инстансе Kafka:
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
Ранее созданный топик с именем new-topic1
был успешно создан.
3) Далее проверим работоспособность производителя (Producer). Запускаем производителя при помощи команды:
bin/kafka-console-producer.sh --topic new-topic1 --bootstrap-server localhost:9092
4) Отправим тестовое сообщение:
Hello from kafka!
5) Не закрывая текущую сессию SSH, открываем новую сессию и переходим в директорию /opt/kafka
:
cd /opt/kafka
Запускаем потребителя (Consumer) при помощи команды:
bin/kafka-console-consumer.sh --topic new-topic1 --from-beginning --bootstrap-server localhost:9092
Если все работает правильно, то мы увидим ранее отправленное сообщение.
1) Создаем пользователя с именем prometheus
:
useradd --no-create-home --shell /bin/false prometheus
2) Создаем директории, где будут храниться конфигурационные файлы Prometheus:
mkdir /etc/prometheus
mkdir /var/lib/prometheus
3) Назначаем владельцем директории /var/lib/prometheus
пользователя prometheus
:
chown prometheus:prometheus /var/lib/prometheus
4) Переходим в директорию /tmp
:
cd /tmp/
И скачиваем архив с программой при помощи утилиты wget
:
wget https://github.com/prometheus/prometheus/releases/download/v2.53.4/prometheus-2.53.4.linux-amd64.tar.gz
5) Разархивируем скачанный архив:
tar xvfz prometheus-2.53.4.linux-amd64.tar.gz
6) Переходим в появившуюся директорию:
cd prometheus-2.53.4.linux-amd64
7) Далее перемещаем директорию console
конфигурационный файл prometheus.yml
, бинарный файл Prometheus и конфигурационные файлы и назначаем для него владельца:
mv console* /etc/prometheus
mv prometheus.yml /etc/prometheus
mv prometheus /usr/local/bin/
chown -R prometheus:prometheus /etc/prometheus
chown prometheus:prometheus /usr/local/bin/prometheus
8) Дополнительно создаем systemd
-юнит для Prometheus:
nano /etc/systemd/system/prometheus.service
Используем следующее содержимое:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
9) По умолчанию доступ до Prometheus разрешен только с localhost. Разрешим доступ со всех адресов. Для этого открываем на редактирование основной конфигурационный файл prometheus.yml
при помощи любого текстового редактора:
nano /etc/prometheus/prometheus.yml
В конце файла находим параметр targets
в опции static_configs
:
И меняем значение localhost на внешний IP-адрес сервера (внешний IP-адрес у вас будет свой):
Сохраняем изменения и выходим из файла.
10) Запускаем Prometheus, добавляем его в автозагрузку и проверяем статус:
systemctl start prometheus && systemctl enable prometheus && systemctl status prometheus
В статусе должно отображаться active (running)
, что свидетельствует об успешном запуске Prometheus.
Перезапускаем демон systemd
и prometheus
и проверяем его статус:
systemctl daemon-reload && systemctl restart prometheus && systemctl status prometheus
Если в статусе отображается active (running)
, то Prometheus успешно запущен.
Переходим в браузере по IP-адресу сервера и порту 9090 (порт по умолчанию для Prometheus):
Должен открыться веб-интерфейс программы.
В связи с тем, что установить Grafana напрямую через официальный репозиторий из России нельзя, мы вручную добавим GPG ключ и воспользуемся репозиторием-зеркалом от Яндекса.
1) Создаем файл, в котором будет храниться GPG-ключ от репозитория Grafana:
nano grafana.key
И вставляем следующий ключ:
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=J9CI
-----END PGP PUBLIC KEY BLOCK-----
2) Создаем директорию, в которой будет храниться ключ от репозитория:
mkdir -p /etc/apt/keyrings/
3) Далее необходимо сконвертировать текстовый файл с ключом в поддерживаемый формат:
gpg --dearmor -o /etc/apt/keyrings/grafana.gpg grafana.key
4) Добавляем зеркало от Яндекса:
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://mirror.yandex.ru/mirrors/packages.grafana.com/oss/deb stable main" | tee /etc/apt/sources.list.d/grafana.list
5) Обновляем индекс пакетов и устанавливаем Grafana:
apt update && apt -y install grafana
6) Запускаем сервис при помощи следующих команд:
systemctl daemon-reload && systemctl enable grafana-server && systemctl start grafana-server
И проверяем статус Grafana:
systemctl status grafana-server
Если в статусе отображается active (running)
, то Grafana успешно запущена.
Используя IP-адрес сервера и порт 3000 (порт по умолчанию для Grafana), переходим в веб-интерфейс программы. Первоначальные логин и пароль для входа в веб-интерфейс — admin
/ admin
. При первом входе система предложит задать новый пароль для пользователя admin
:
После аутентификации откроется веб-интерфейс:
JMX Exporter — это утилита, которая собирает и передает метрики из приложений, работающих на Java, в системы мониторинга, например в Prometheus. Для установки JMX Exporter необходимо выполнить следующие шаги:
1) Скачиваем утилиту из официального репозитория при помощи wget
:
wget https://repo.maven.apache.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar
2) Перемещаем скаченный JAR-файл в директорию /opt/kafka/libs
:
mv jmx_prometheus_javaagent-0.20.0.jar /opt/kafka/libs/
3) Открываем на редактирование файл kafka-server-start.sh
:
nano /opt/kafka/bin/kafka-server-start.sh
И добавляем следующие строки в самый конец файла:
KAFKA_OPTS="-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.20.0.jar=9091:/etc/prometheus/prometheus.yml"
KAFKA_OPTS="-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.20.0.jar=9091:/opt/kafka/config/sample_jmx_exporter.yml"
Сохраняем изменения и выходим из файла.
4) Перезапускаем Kafka при помощи команд:
systemctl daemon-reload && systemctl restart kafka
Произведем настройку JMX Exporter.
1) Переходим в директорию /opt/kafka/config
:
cd /opt/kafka/config
2) Создаем файл sample_jmx_exporter.yml
:
nano sample_jmx_exporter.yml
И используем следующее содержимое:
lowercaseOutputName: true
rules:
# Special cases and very specific rules
- pattern : kafka.server<type=(.+), name=(.+), clientId=(.+), topic=(.+), partition=(.*)><>Value
name: kafka_server_$1_$2
type: GAUGE
labels:
clientId: "$3"
topic: "$4"
partition: "$5"
- pattern : kafka.server<type=(.+), name=(.+), clientId=(.+), brokerHost=(.+), brokerPort=(.+)><>Value
name: kafka_server_$1_$2
type: GAUGE
labels:
clientId: "$3"
broker: "$4:$5"
- pattern : kafka.coordinator.(\w+)<type=(.+), name=(.+)><>Value
name: kafka_coordinator_$1_$2_$3
type: GAUGE
# Generic per-second counters with 0-2 key/value pairs
- pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*, (.+)=(.+), (.+)=(.+)><>Count
name: kafka_$1_$2_$3_total
type: COUNTER
labels:
"$4": "$5"
"$6": "$7"
- pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*, (.+)=(.+)><>Count
name: kafka_$1_$2_$3_total
type: COUNTER
labels:
"$4": "$5"
- pattern: kafka.(\w+)<type=(.+), name=(.+)PerSec\w*><>Count
name: kafka_$1_$2_$3_total
type: COUNTER
- pattern: kafka.server<type=(.+), client-id=(.+)><>([a-z-]+)
name: kafka_server_quota_$3
type: GAUGE
labels:
resource: "$1"
clientId: "$2"
- pattern: kafka.server<type=(.+), user=(.+), client-id=(.+)><>([a-z-]+)
name: kafka_server_quota_$4
type: GAUGE
labels:
resource: "$1"
user: "$2"
clientId: "$3"
# Generic gauges with 0-2 key/value pairs
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>Value
name: kafka_$1_$2_$3
type: GAUGE
labels:
"$4": "$5"
"$6": "$7"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+)><>Value
name: kafka_$1_$2_$3
type: GAUGE
labels:
"$4": "$5"
- pattern: kafka.(\w+)<type=(.+), name=(.+)><>Value
name: kafka_$1_$2_$3
type: GAUGE
# Emulate Prometheus 'Summary' metrics for the exported 'Histogram's.
#
# Note that these are missing the '_sum' metric!
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+), (.+)=(.+)><>Count
name: kafka_$1_$2_$3_count
type: COUNTER
labels:
"$4": "$5"
"$6": "$7"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.*), (.+)=(.+)><>(\d+)thPercentile
name: kafka_$1_$2_$3
type: GAUGE
labels:
"$4": "$5"
"$6": "$7"
quantile: "0.$8"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.+)><>Count
name: kafka_$1_$2_$3_count
type: COUNTER
labels:
"$4": "$5"
- pattern: kafka.(\w+)<type=(.+), name=(.+), (.+)=(.*)><>(\d+)thPercentile
name: kafka_$1_$2_$3
type: GAUGE
labels:
"$4": "$5"
quantile: "0.$6"
- pattern: kafka.(\w+)<type=(.+), name=(.+)><>Count
name: kafka_$1_$2_$3_count
type: COUNTER
- pattern: kafka.(\w+)<type=(.+), name=(.+)><>(\d+)thPercentile
name: kafka_$1_$2_$3
type: GAUGE
labels:
quantile: "0.$4"
Сохраняем изменения и выходим из файла.
3) Далее открываем на редактирование основной конфигурационный файл Prometheus — prometheus.yml
:
nano /etc/prometheus/prometheus.yml
Нам необходимо добавить endpoint Kafka, чтобы Prometheus смог собирать данные. Для этого в самом внизу добавляем следующий блок, где 103.88.242.227 — это внешний IP-адрес сервера (не забудьте поменять на свой внешний IP-адрес):
- job_name: 'kafka'
static_configs:
- targets: ["103.88.242.227:9091"]
Сохраняем изменения и выходим из файла.
4) Перезапускаем Prometheus и проверяем его статус:
systemctl daemon-reload && systemctl restart prometheus && systemctl status prometheus
Далее необходимо внести изменения при запуске Kafka, добавив путь до файлов Prometheus и JMX Exporter.
1) Открываем на редактирование systemd
-файл Kafka:
nano /etc/systemd/system/kafka.service
И добавляем следующие строки в блок [Service]
:
Environment="KAFKA_OPTS=-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.20.0.jar=9091:/etc/prometheus/prometheus.yml"
Environment="KAFKA_OPTS=-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.20.0.jar=9091:/opt/kafka/config/sample_jmx_exporter.yml"
Сохраняем изменения и выходим из файла.
2) Перезапускаем Kafka и проверяем статус:
systemctl daemon-reload && systemctl restart kafka && systemctl status kafka
3) Переходим в веб-интерфейс Prometheus, далее в раздел «Status» и в выпадающем меню выбираем пункт «Targets»:
У нас появится новый источник данных Kafka:
Финальный этап заключается в добавление метрик из Prometheus в Grafana для построения визуализации с помощью графиков.
1) Переходим в веб-интерфейс Grafana. На панели слева выбираем меню «Connections», далее в выпадающем списке переходим в раздел «Data sources»:
2) В открывшемся разделе нажимаем на кнопку «Add data source»:
3) Далее выбираем Prometheus в качестве источника данных:
4) В качестве имени источника зададим Kafka (можно любое другое незанятое имя), а в качестве адреса укажем IP-адрес и порт, где расположен Prometheus:
5) Нажимаем на кнопку «Save & test»:
При успешном подключении к Prometheus будет выведено соответствующее сообщение:
После того как мы настроили мониторинг, самое время добавить dashboard для визуализации в Grafana.
1) На панели слева переходим в раздел «Dashboards»:
2) В открывшемся окне, нажимаем на кнопку «New» справа и в выпадающем меню выбираем «New dashboard»:
3) Далее переходим в раздел «Import dashboard»:
4) Используем номер 11962 графика, чтобы добавить его в Grafana, и нажимаем на кнопку «Load»:
В появившемся разделе можно задать имя для графика. Внизу в качестве источника данных выбираем ранее добавленный инстанс Prometheus:
Нажимаем на кнопку «Import».
Добавленный график сейчас не отображает нагрузку. Сымитируем ее самостоятельно.
1) На сервере переходим в директорию /opt/kafka
:
cd /opt/kafka
2) Создаем новый топик с именем test-load
:
bin/kafka-topics.sh --create --topic test-load --bootstrap-server localhost:9092 --partitions 4 --replication-factor 1
3) В Kafka имеется встроенный инструмент kafka-producer-perf-test.sh
, который позволяет имитировать отправку сообщений производителем (producer). Запустим его для создания тестовой загрузки:
bin/kafka-producer-perf-test.sh --topic test-load --num-records 1000000 --record-size 100 --throughput -1 --producer-props bootstrap.servers=localhost:9092
Команда выше сгенерирует и отправит 1000000 сообщений.
4) Также создадим нагрузку путем обработки еще 1000000 сообщений потребителем (consumer):
bin/kafka-consumer-perf-test.sh --topic test-load --messages 1000000 --broker-list localhost:9092 --group test-group
5) Переходим в dashboard Grafana и мы можем наблюдать за графиками:
Разверните Kafka на собственном сервере
Мониторинг Apache Kafka — это сложный и комплексный процесс, который требует максимального внимания к деталям. Процесс начинается со сбора метрик, который можно организовать при помощи современных инструменты вроде Prometheus и Grafana. После того как метрики будут настроены, необходимо регулярно проверять состояние кластера на наличие возможных проблем. Грамотный мониторинг обеспечит стабильность работы. Apache Kafka — это мощный инструмент, который раскроет свой потенциал только при правильной настройке и эксплуатации.