通过在 Kafka 应用中埋点来暴露应用的数据,使用 ARMS Prometheus 监控抓取数据,并借助 ARMS Prometheus Grafana 大盘来展示数据,即可实现通过 ARMS Prometheus 监控 Kafka 应用的目的。

背景信息

本教程的操作流程如图所示。

How It Works

步骤一:启动 JMX 服务

首先需要在 Kafka 应用中启用 JMX 服务以获取资源信息。

  1. 修改 /opt/kafka/kafka_2.11-0.8.2.1/bin/kafka-server-start.sh,在第一行添加 export JMX_PORT="9999"
  2. 重启 Kafka。

步骤二:启动 jmx_exporter

其次需要启动 jmx_exporter,让 JMX 信息可以直接通过 HTTP 方式访问,以便 ARMS Prometheus 监控抓取。

  1. 下载 kafka.yml/opt/exporter_kafka/ 目录下。
  2. 修改下载的 /opt/exporter_kafka/kafka-0.8.2.yml 文件,在第一行添加 hostPort: localhost:9999,将 JMX 服务运行的端口暴露给 jmx_exporter。
  3. 下载 jmx_exporter 的可执行文件/opt/exporter_kafka/ 目录下。
  4. 启动 jmx_exporter。
    java -Dcom.sun.management.jmxremote.ssl=false -
    Dcom.sun.management.jmxremote.authenticate=false -
    Dcom.sun.management.jmxremote.port=9998 -cp 
    /opt/exporter_kafka/jmx_prometheus_httpserver-0.12.0-jar-with-dependencies.jar 
    io.prometheus.jmx.WebServer 9997 /opt/exporter_kafka/kafka-0-8-2.yml &
    至此应用部分配置完成。可通过运行以下命令验证 jmx_exporter 是否可以正常工作。
    curl http://<jmx_exporter所在机器的IP>:9997/metrics

    Kafka 各指标的含义请参见 Monitoring Kafka

步骤三:配置 ARMS Prometheus 监控以抓取 Kafka 应用的数据

接下来需要在 ARMS 控制台配置 ARMS Prometheus 监控以抓取 Kafka 应用的数据。

  1. 登录 ARMS 控制台
  2. 在左侧导航栏中单击 Prometheus监控
  3. Prometheus监控页面顶部选择容器服务 K8s 集群所在的地域,然后单击目标集群的名称。
  4. 在接下来的页面单击配置详情页签,然后单击编辑prometheus.yamlprom_kafka yaml
  5. 粘贴以下代码。
      global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      scrape_configs:
      - job_name: 'kafka'
        static_configs:
        - targets: ['121.40.124.46:9997']

步骤四:通过 Grafana 大盘展示 Kafka 应用的数据

最后需要在 ARMS 控制台导入 Grafana 大盘模板并指定 Prometheus 数据源所在的容器服务 K8s 集群。

  1. 打开 ARMS Prometheus Grafana 大盘概览页
  2. 在左侧导航栏中选择 + > Import,并在 Grafana.com Dashboard 文本框输入 10973,然后单击 Load
    Import Grafana Dashboard
  3. Import 页面输入以下信息,然后单击 Import
    Import Grafana Dashboard with Options
    1. Name 文本框中输入自定义的大盘名称。
    2. Folder 下拉框中选择您的阿里云容器服务 K8s 集群。
    3. prometheus-apl 下拉框中选择您的阿里云容器服务 K8s 集群。
    配置完毕后的 ARMS Prometheus Grafana Kafka 大盘如图所示。prometheus_kafka_grafana

创建 Prometheus 监控报警

若需为 Prometheus 监控任务创建报警,例如网络接收压力报警,具体操作步骤如下:

  1. 报警创建提供两个入口,您可根据需要自行选择其中一个入口进入创建报警环节。
    • 在 ARMS Prometheus Grafana 大盘页面,单击左侧的 图标,跳转至 ARMS Prometheus 创建报警对话框。
    • 在控制台左侧导航栏中选择报警管理 > 报警策略管理,进入报警策略管理页面,在右上角单击创建报警 > Prometheus
  2. 创建报警对话框中输入所有必填信息,完成后单击保存
    1. 填写报警名称,例如:网络接收压力报警。
    2. 选择要创建报警的 Prometheus 监控对应的集群
    3. 选择类型grafana
    4. 选择要监控的具体大盘图表
    5. 设置报警规则。
      1. 勾选同时满足下述规则
      2. 编辑报警规则,例如:N = 5 时网络接收数据字节(MB)的平均值大于等于 3 时则报警。
        说明 一个 Grafana 图表中可能有 A、B、C 三条曲线数据,您可设置监控其中的一条线。
      3. PromQL 输入框中编辑或重新输入 PromQL 语句。
        注意 PromQL 语句中包含的“$”符号会导致报错,您需要删除包含“$”符号的语句中“=”左右两边的参数及“=”。例如:将sum (rate (container_network_receive_bytes_total{instance=~"^$HostIp.*"}[1m]))修改为sum (rate (container_network_receive_bytes_total[1m]))
    6. 勾选通知方式,例如:勾选短信。
    7. 设置通知对象。在全部联系组中单击联系人分组的名称,该联系人分组出现在已选联系组中,即设置成功。
    Prometheus Monitoring Alarm

后续步骤

ARMS Prometheus Grafana Kafka 大盘配置完毕后,您可以查看 Prometheus 监控指标和进一步自定义大盘,详见相关文档。