目录
(1).核心原理与代码
(2).基础镜像
(3).结合grafana/prometheus/容器化
(4).一些瑕疵
(5).最终效果
(6).建议rocketmq集成prometheus监控到官方
(7).相关文章
(1).核心原理与代码
笔者为了简单快速,是直接调用rocketmq-console的ajax/http取现成数据,所以本例rocketmq-exporter的运行必须有对应的rocketmq-console实例。
http_util.py:封装pycurl访问http。
rocketmq_constant.py:定义不监控的topic,因为rocketmq安装后会有一些默认topic,如给benchmark用的BenchmarkTest等,正常情况下这些不需要纳入监控。如果你要进行压测,肯定是要开的,目前只能改代码重制镜像,后边会把他放到env做成可配置的。
rocketmq_dao.py:使用http_util,封装调用rocketmq-console取监控数据的接口。
rocketmq_service.py:调用rocketmq_dao,格式化数据。
rocketmq_exporter.py:暴露最终的exporter服务,同时创建prometheus监控对象,返回最终的metrics数据给prometheus的scrape调用。
(2).基础镜像
以官方镜像python3.6为基准安装prometheus-client, flask等必要组件。
cd python-docker-image
sh ./docker-python3.6.build.sh
hpy-rocketmq-exporter
以前述镜像为基准制作rocketmq-exporter镜像。
sh ./docker.build.sh
(3).结合grafana/prometheus/容器化
笔者提供grafana/prometheus/rocketmq-exporter容器化的基本配置文件
父目录有grafana/prometheus的容器化配置,分别执行即可。
(4).一些瑕疵
但足够生产使用了(主要是我也没啥动力,够我们用就可以了,高优先级事情太多)。
1.目前只支持rocketmq-console的变量设置。
2.数据校验方面有遗漏,必须存在至少一个topic和consumer才正常,否则json解析失败,metrics获取失败。
(5).最终效果
可以根据各个维度监控消息堆积,精确到进程粒度:
(6).建议rocketmq集成prometheus监控到官方
建议rocketmq集成prometheus监控,这样可以全方位监控rocketmq集群的状态,比如其中一个很重要的维度就是高压力下消息发送失败,以及对应的重试机制,如果可以对其进行观测,更有助于生产使用。
如下图例,监控producer第一次发送消息失败的情况,以及重发结果的情况: