通过在Kafka应用中埋点来暴露应用的数据,使用Prometheus监控抓取数据,并借助Prometheus Grafana大盘来展示数据,即可实现通过Prometheus监控Kafka应用的目的。
背景信息
本教程的操作流程如图所示。
步骤一:启动JMX服务
在Kafka应用中启用JMX服务以获取资源信息。
修改/opt/kafka/kafka_2.11-0.8.2.1/bin/kafka-server-start.sh ,在第一行添加export JMX_PORT="9999"
。
重启Kafka。
步骤二:启动jmx_exporter
启动jmx_exporter,让JMX信息可以直接通过HTTP方式访问,以便Prometheus监控抓取。
下载kafka.yml 到/opt/exporter_kafka/ 目录下。
修改下载的/opt/exporter_kafka/kafka-0.8.2.yml 文件。 在第一行添加hostPort: localhost:9999
,将JMX服务运行的端口暴露给jmx_exporter。
下载jmx_exporter的可执行文件 到/opt/exporter_kafka/ 目录下。
启动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 。
步骤三:配置Prometheus监控以抓取Kafka应用的数据
登录ARMS控制台 。
在左侧导航栏单击Prometheus监控 。
在Prometheus监控 页面左上角选择容器服务K8s集群所在的地域,并在目标集群右侧的操作 列单击设置 。
在设置 页面单击Prometheus设置 页签。
在Prometheus设置 页签中输入以下代码,然后单击保存 。 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应用的数据
在Prometheus控制台导入Grafana大盘模板并指定Prometheus数据源所在的容器服务K8s集群。
打开Prometheus Grafana大盘概览页 。
在左侧导航栏中选择,并在Grafana.com Dashboard 文本框输入10973 ,然后单击Load 。
在Import 页面输入以下信息,然后单击Import 。
在Name 文本框中输入自定义的大盘名称。
在Folder 下拉框中选择您的阿里云容器服务K8s集群。
在Select a Prometheus data source 下拉框中选择您的阿里云容器服务K8s集群。
配置完毕后的Prometheus Grafana Kafka大盘如图所示。
步骤五:创建Prometheus监控报警
登录ARMS控制台 。
在左侧导航栏单击Prometheus监控 。
在顶部菜单栏选择目标地域,然后单击目标K8s集群名称。
在左侧导航栏中选择报警配置Beta ,然后在右上角单击创建报警 。
在创建报警 对话框中输入以下信息,完成后单击确认 。
填写规则名称 ,例如:网络接收压力报警。
输入报警规则表达式,表达式需要使用PromQL语句。例如:(sum(rate(kube_state_metrics_list_total{job="kube-state-metrics",result="error"}[5m]))
/ sum(rate(kube_state_metrics_list_total{job="kube-state-metrics"}[5m]))) > 0.01
。
注意 PromQL语句中包含的$
符号会导致报错,您需要删除包含$符号的语句中=
左右两边的参数及=
。例如:将sum (rate (container_network_receive_bytes_total{instance=~"^$HostIp.*"}[1m]))
修改为sum (rate (container_network_receive_bytes_total[1m]))
。
在标签 区域单击创建标签 可以设置报警标签,设置的标签可用作分派规则的选项。
在注释 区域可以编辑告警信息发送模板。单击创建注释 ,设置键 为message ,设置值 为 {{变量名}}告警信息 。设置完成后的格式为:message:{{变量名 }}告警信息,例如:message:{{$labels.pod_name}}重启。
您可以自定义变量名 ,也可以选择已有的标签作为变量名 。已有的标签包括:
报警规则表达式指标中携带的标签。
通过报警规则创建的标签,请参见创建报警 。
ARMS系统自带的默认标签,默认标签说明如下。
标签
说明
alertname
告警名称,格式为:告警名称_集群名称。
_aliyun_arms_alert_level
告警等级。
_aliyun_arms_alert_type
告警类型。
_aliyun_arms_alert_rule_id
告警规则对应的ID。
_aliyun_arms_region_id
地域ID。
_aliyun_arms_userid
用户ID。
_aliyun_arms_involvedObject_type
关联对象子类型,如ManagedKubernetes,ServerlessKubernetes。
_aliyun_arms_involvedObject_kind
关联对象分类,如app,cluster。
_aliyun_arms_involvedObject_id
关联对象ID。
_aliyun_arms_involvedObject_name
关联对象名称。
后续步骤
Prometheus Grafana Kafka大盘配置完毕后,您可以查看Prometheus监控指标和进一步自定义大盘,详见以下文档。
查看Prometheus监控指标
通过阿里云Prometheus自定义Grafana大盘
创建报警
在文档使用中是否遇到以下问题
更多建议
匿名提交