Debezium系列之:监控 Debezium

Debezium系列之:监控 Debezium

  • 一、概述
  • 二、用于监控 Debezium 连接器的指标
  • 三、在本地安装中启用 JMX
    • 1.Zookeeper JMX 环境变量
    • 2.KafkaJMX环境变量
    • 3.Kafka Connect JMX 环境变量
  • 四、在 Docker 中启用 JMX
    • 1.Docker 中的 Zookeeper JMX 环境变量
    • 2.Docker 中的 Kafka JMX 环境变量
    • 3.Docker 中的 Kafka Connect JMX 环境变量
  • 五、使用 Prometheus 和 Grafana
  • 六、Java Flight Recording

Debezium JMX相关的技术博客:

  • Debezium系列之:安装jmx导出器监控debezium指标
  • Debezium系列之:为Debezium集群JMX页面增加监控,JMX页面出现异常时发送飞书告警,确保任务能够获取debezium集群指标
  • Debezium系列之:深入解读Debezium重要的jmx指标
  • Debezium系列之:mysql JMX metrics指标详细解读

更多内容请阅读博主Debezium专栏,博主会持续更新Debezium专栏:

  • Debezium专栏

Docker相关技术可以参考博主下面几篇技术博客:

  • Docker核心原理,Docker在线安装和离线安装
  • Docker 镜像和容器
  • docker系列之:Centos7安装docker compose
  • Docker编排工具Compose详解

一、概述

您可以使用 Apache Zookeeper、Apache Kafka 和 Kafka Connect 提供的 JMX 指标来监控 Debezium。要使用这些指标,您必须在启动 Zookeeper、Kafka 和 Kafka Connect 服务时启用它们。启用 JMX 涉及设置正确的环境变量。您必须设置的环境变量取决于您是在本地安装还是在 Docker 容器中运行 Zookeeper、Kafka 和 Kafka Connect。

注意:

  • 如果您在同一台计算机上运行多个服务,请确保为每个服务使用不同的 JMX 端口。

二、用于监控 Debezium 连接器的指标

除了 Kafka、Zookeeper 和 Kafka Connect 中对 JMX 指标的内置支持之外,每个连接器还提供其他指标,您可以使用这些指标来监控其活动。

  • Db2 connector metrics
  • MongoDB connector metrics
  • MySQL connector metrics
  • Oracle connector metrics
  • PostgreSQL connector metrics
  • SQL Server connector metrics
  • Cassandra connector metrics

三、在本地安装中启用 JMX

使用 Zookeeper、Kafka 和 Kafka Connect,您可以通过在启动每个服务时设置适当的环境变量来启用 JMX。

1.Zookeeper JMX 环境变量

Zookeeper 内置了对 JMX 的支持。使用本地安装运行 Zookeeper 时,zkServer.sh 脚本可识别以下环境变量:

  • JMXPORT:启用 JMX 并指定将用于 JMX 的端口号。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.port=$JMXPORT。
  • JMXAUTH:JMX 客户端在连接时是否必须使用密码身份验证。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH。
  • JMXSSL:JMX 客户端是否使用 SSL/TLS 进行连接。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.ssl=$JMXSSL。
  • JMXLOG4J:是否应禁用 Log4J JMX MBean。必须为 true(默认)或 false。默认为 true。该值用于指定 JVM 参数 -Dzookeeper.jmx.log4j.disable=$JMXLOG4J。

2.KafkaJMX环境变量

使用本地安装运行 Kafka 时,kafka-server-start.sh 脚本可识别以下环境变量:

  • JMX_PORT:启用 JMX 并指定将用于 JMX 的端口号。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.port=$JMX_PORT。
  • KAFKA_JMX_OPTS:JMX 选项,在启动期间直接传递到 JVM。默认选项是:
    • -Dcom.sun.management.jmxremote
    • -Dcom.sun.management.jmxremote.authenticate=false
    • -Dcom.sun.management.jmxremote.ssl=false

3.Kafka Connect JMX 环境变量

使用本地安装运行 Kafka 时,connect-distributed.sh 脚本可识别以下环境变量:

  • JMX_PORT:启用 JMX 并指定将用于 JMX 的端口号。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.port=$JMX_PORT。
  • KAFKA_JMX_OPTS:JMX 选项,在启动期间直接传递到 JVM。默认选项是:
    • -Dcom.sun.management.jmxremote
    • -Dcom.sun.management.jmxremote.authenticate=false
    • -Dcom.sun.management.jmxremote.ssl=false

四、在 Docker 中启用 JMX

如果您通过 Debezium 容器映像运行 Apache Zookeeper、Kafka 和 Kafka Connect,则启用 JMX 需要几个额外的环境变量,而在本地计算机上运行时通常不需要这些变量。这是因为 JVM 需要主机名来向 JMX 客户端通告自己。因此,Debezium 的 Zookeeper、Kafka 和 Kafka Connect 容器映像使用多个环境变量来启用和配置 JMX。所有图像的大多数环境变量都是相同的,但也有一些细微的差异。

1.Docker 中的 Zookeeper JMX 环境变量

debezium/zookeeper 映像可识别以下与 JMX 相关的环境变量:

JMXPORT(必填)
将用于 JMX 的端口号。该值用于指定以下 JVM 参数:

  • -Dcom.sun.management.jmxremote.port=$JMXPORT
  • -Dcom.sun.management.jmxremote.rmi.port=$JMXPORT

JMXHOST(必填)

  • Docker 主机的 IP 地址或可解析主机名,JMX 使用它来构造发送到 JMX 客户端的 URL。 localhost 或 127.0.0.1 值将不起作用。通常,可以使用 0.0.0.0。该值用于指定 JVM 参数 -Djava.rmi.server.hostname=$JMXHOST。

JMX认证

  • JMX 客户端在连接时是否必须使用密码身份验证。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH。

JMXSSL

  • JMX 客户端是否使用 SSL/TLS 进行连接。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.ssl=$JMXSSL。

JMXLOG4J

  • 是否应禁用 Log4J JMX MBean。必须是真或假。默认为 true。该值用于指定 JVM 参数 -Dzookeeper.jmx.log4j.disable=$JMXLOG4J。

示例 1. 在 Zookeeper Docker 容器中启用 JMX
以下示例 Docker 命令使用 debezium/zookeeper 映像以及 JMXPORT 和 JMXHOST 环境变量的值启动容器,并将 Docker 主机的端口 9010 映射到容器的 JMX 端口:

docker run -it --rm --name zookeeper 
-p 2181:2181 -p 2888:2888 
-p 3888:3888 
-p 9010:9010 
-e JMXPORT=9010 
-e JMXHOST=10.0.1.10 
quay.io/debezium/zookeeper:latest

2.Docker 中的 Kafka JMX 环境变量

debezium/kafka 映像可识别以下与 JMX 相关的环境变量:

JMXPORT(必填)
将用于 JMX 的端口号。该值用于指定以下 JVM 参数:

  • -Dcom.sun.management.jmxremote.port=$JMXPORT
  • -Dcom.sun.management.jmxremote.rmi.port=$JMXPORT

JMXHOST(必填)

  • Docker 主机的 IP 地址或可解析主机名,JMX 使用它来构造发送到 JMX 客户端的 URL。 localhost 或 127.0.0.1 值将不起作用。通常,可以使用 0.0.0.0。该值用于指定 JVM 参数 -Djava.rmi.server.hostname=$JMXHOST。

JMXAUTH

  • JMX 客户端在连接时是否必须使用密码身份验证。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH。

JMXSSL

  • JMX 客户端是否使用 SSL/TLS 进行连接。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.ssl=$JMXSSL。

示例 2. 在 Kafka Docker 容器中启用 JMX

以下示例 Docker 命令使用 debezium/kafka 映像以及 JMXPORT 和 HOST_NAME 环境变量的值启动容器,并将 Docker 主机的端口 9011 映射到容器的 JMX 端口:

docker run -it --rm --name kafka 
-p 9092:9092 
-p 9011:9011 
-e JMXPORT=9011 
-e JMXHOST=10.0.1.10 
--link zookeeper:zookeeper quay.io/debezium/kafka:latest

3.Docker 中的 Kafka Connect JMX 环境变量

debezium/connect 映像可识别以下与 JMX 相关的环境变量:

JMXPORT (Required)
将用于 JMX 的端口号。该值用于指定以下 JVM 参数:

  • -Dcom.sun.management.jmxremote.port=$JMXPORT
  • -Dcom.sun.management.jmxremote.rmi.port=$JMXPORT

JMXHOST(必填)

  • Docker 主机的 IP 地址或可解析主机名,JMX 使用它来构造发送到 JMX 客户端的 URL。 localhost 或 127.0.0.1 值将不起作用。通常,可以使用 0.0.0.0。该值用于指定 JVM 参数 -Djava.rmi.server.hostname=$JMXHOST。

JMXAUTH

  • JMX 客户端在连接时是否必须使用密码身份验证。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH。

JMXSSL

  • JMX 客户端是否使用 SSL/TLS 进行连接。必须是真或假。默认为 false。该值用于指定 JVM 参数 -Dcom.sun.management.jmxremote.ssl=$JMXSSL。

示例 3. 在 Kafka Connect Docker 容器中启用 JMX

以下示例 Docker 命令使用 debezium/connect 映像以及 JMXPORT 和 JMXHOST 环境变量的值启动容器,并将 Docker 主机的端口 9012 映射到容器的 JMX 端口:

docker run -it --rm --name connect \
  -p 8083:8083 -p 9012:9012 \
  -e JMXPORT=9012 -e JMXHOST=10.0.1.10 \
  -e GROUP_ID=1 \
  -e CONFIG_STORAGE_TOPIC=my_connect_configs \
  -e OFFSET_STORAGE_TOPIC=my_connect_offsets \
  -e STATUS_STORAGE_TOPIC=my_connect_statuses \
  --link zookeeper:zookeeper \
  --link kafka:kafka \
  --link mysql:mysql \
  quay.io/debezium/connect:latest

五、使用 Prometheus 和 Grafana

Debezium 和 Kafka 公开的指标可以通过 Prometheus 和 Grafana 导出和显示。

更多内容参考博主下面这篇技术博客:

  • Debezium系列之:监控 Debezium 实例

更详细的实现步骤,可以移步博主Debezium专栏。

六、Java Flight Recording

Kafka Connect 的 Debezium 容器映像还为 JDK Flight Recorder 提供易于使用的支持。要启用记录,需要设置环境变量 ENABLE_JFR=true。然后,容器启动时将自动开始录制。默认情况下,记录处于启用状态,即使用默认设置完成连续记录,然后您可以使用 jcmd 或 JDK Mission Control 转储记录。

可以修改记录器的行为。为此,您需要设置以 JFR_RECORDING_ 为前缀的环境变量来设置录制参数。前缀后面的部分转换为小写,下划线替换为破折号,因此 JFR_RECORDING_PATH_TO_GC_ROOTS=true 变为 path-to-gc-roots=true。

Flight Recorder控制选项可以通过 JFR_OPT_ 前缀的环境变量进行配置。

你可能感兴趣的:(日常分享专栏,Debezium系列,监控,Debezium)