Мониторинг Kafka с помощью Proto Observability
Визуализация производительности вашего кластера в режиме реального времени
Сбор метрик Kafka
Конфигурация ProtoOBP агента
Обратите внимание
Для сбора метрик c Kafka используется подключение по JMX, если агент установлен в среде Linux, то агентом может быть использована та же Java, что используется самой Kafka.
Если же Агент работает в контейнере, например, в Kubernetes, то необходимо использовать тег агента с суффиксом -jmx, например protoobp-agent:7.40.3-jmx.
-
В файле конфигурации Kafka проверки ProtoOBP Агента (
/etc/protoobp-agent/conf.d/kafka.d/conf.yaml) укажите следующее:init_config: is_jmx: true, collect_default_metrics: true, new_gc_metrics: true instances: - host: http://localhost port: 9997 #JMX user: user #Если используется аутентификациия password: password #Если используется аутентификациия -
Перезапустите ProtoOBP Агента выполнив
systemctl restart protoobp-agent
- Убедитесь, что у вас установлен Агент для Kubernetes с тегом образа Агента с
-jmxсуффиксом. - Убедитесь, что JMX включен для Kafka и доступен для подключения.
- Добавьте необходимую аннотацию и, опционально, лейблы.
Полностью рабочий пример для запуска Kafka с аннотациями для автодискавернга агентом:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka
labels:
app: kafka
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
tags.proto.group/service: "my-kafka" # тег для метрик Kafka в ProtoOBP
tags.proto.group/env: "dev" # тег для метрик Kafka в ProtoOBP
tags.proto.group/version: "3.0" # тег для метрик Kafka в ProtoOBP
annotations:
ad.proto.group/kafka.checks: |-
{
"kafka": {
"init_config": {
"is_jmx": true,
"collect_default_metrics": true,
"new_gc_metrics": true
},
"instances": [
{
"host": "%%host%%",
"port": "9101",
"monitor_unlisted_consumer_groups": true,
"monitor_all_broker_highwatermarks": true
}
]
}
}
spec:
containers:
- name: kafka
image: confluentinc/cp-kafka:7.7.0
ports:
- name: broker
containerPort: 9092
- name: jmx # обязательно JMX порт
containerPort: 9101
env:
- name: KAFKA_PROCESS_ROLES
value: "controller,broker"
- name: KAFKA_NODE_ID
value: "1"
- name: KAFKA_CONTROLLER_QUORUM_VOTERS
value: "1@kafka-broker:9093"
- name: KAFKA_LISTENERS
value: "PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093"
- name: KAFKA_ADVERTISED_LISTENERS
value: "PLAINTEXT://kafka-broker:9092"
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
value: "PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT"
- name: KAFKA_INTER_BROKER_LISTENER_NAME
value: "PLAINTEXT"
- name: KAFKA_CONTROLLER_LISTENER_NAMES
value: "CONTROLLER"
- name: KAFKA_AUTO_CREATE_TOPICS_ENABLE
value: "true"
- name: CLUSTER_ID
value: "MkU3OEVBNTcwNTJENDM2Qk"
- name: POD_IP # для того чтобы Kafka использовала IP пода для JXM host
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: KAFKA_JMX_PORT # порт должен соответствовать порту в instances
value: "9101"
- name: KAFKA_JMX_HOSTNAME # для того чтобы Kafka использовала IP пода для JXM host
value: "$(POD_IP)"
- name: KAFKA_JMX_OPTS # включение опций JMX
value: "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9101 -Dcom.sun.management.jmxremote.rmi.port=9101 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=$(POD_IP)"
volumeMounts:
- name: data
mountPath: /var/lib/kafka/data
volumes:
- name: data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: kafka-broker
spec:
selector:
app: kafka
ports:
- name: kafka
port: 9092
targetPort: 9092
nodePort: 30092
type: NodePort