AMP实现Prometheus Exporter数据对接
点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!
背 景
Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配Prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。
我们知道 zabbix 在监控界占有不可撼动的地位,功能强大。但是对容器监控显得力不从心。为解决监控容器的问题,对APM进行扩展,支持采集Prometheus exporter数据,实现APM容器化监控。
使用说明
1. 功能说明
对接prometheus性能数据,实现snc-proxy/snc-agent采集prometheus【exporter】数据。
2. 使用范围
采集prometheus性能数据。
3. 功能逻辑
3.1 snc-proxy/snc-agen添加支持prometheus采集协议。
主要实现逻辑:
1)定义监控格式为prometheus.xx.xx[{$PURL},key,label1="xx",label2="xx",...],label为可变参数;
2)添加PrometheusMetricProvider指标消费类,继承AbstractMetricsConsumer,类型为prometheus;
3)根据监控项参数key值,对prometheus metric数据进行筛选;
4)根据监控项参数label值,对完成步骤2的数据进行进一步筛选,label值支持正则表达式和通配符;
5)处理筛选结果。普通监控项赛选结果为1条,返回对象格式json文本,赛选结果为多条,返回结果数组格式json文本;自发现监控项返回自发现监控项结果。
3.2 AMP自定义prometheus node_exporter监控模板。
3.3 通过snc-agen监控工作原理,实现数据采集。
4. 格式规范/使⽤⽅式
以prometheus.开头。
prometheus metric数据格式:
4.1 普通监控项
prometheus.xx.xx[{$PURL},key,label1="xx",label2="xx",...]
第⼀个参数:prometheus metric数据url访问连接;
第二个参数:prometheus metric返回数据格式中的"{xxx}"前的key值信息;
后续参数:数量不固定,为Prometheus metric返回数据格式中的"{xxx}"中的信息。
样例:
prometheus.system.cup.count[http://XXX.XXX.XX.7:8000/actuator/prometheus,system_cpu_count]
#获取系统CPU数量信息
prometheus.jvm.memory.used.heap[http://XXX.XXX.XX.7:8000/actuator/prometheus,jvm_memory_used_bytes,area="heap"]
#获取jvm heap区内存使用情况
prometheus.logback.events.total[http://XXX.XXX.XX.7:8000/actuator/prometheus,logback_events_total,level="*"]
#获取日志事件数信息
4.2 特殊监控项
prometheus.cache.metric[{$PURL},300]
prometheus.cache.metric为固定值;
第一个参数:prometheus metric数据url访问连接;
第二个参数:缓存时间,单位秒。
普通监控项每次采集都要通过http请求访问Prometheus exporter获取数据,配置这个键值后会把Prometheus metric的返回信息缓存至snc-agent或者snc-proxy,有效期内其他键值采集数据直接从缓存中获取,否则每次都要http访问获取。
4.3 自发现配置
prometheus.discovery.metric[{$PURL},key,label1="xx",label2="xx",...]
prometheus.discovery.metric为固定键值;
第⼀个参数:prometheus metric数据url访问连接;
第二个参数:prometheus metric返回数据格式中的"{xxx}"前的key值信息;
后续参数:数量不固定,为Prometheus metric返回数据格式中的"{xxx}"中的信息。
自发现只适用于发现为Prometheus metric结果信息中格式为 xxx{label1="xx",label2="xx",...}的信息。
配置详情
1. 设备名 agent
采集方式:Zabbix agent
键值:agent.activehost[{HOST.HOST}]
数据类型:字符
2. 缓存 Prometheus metric 信息
采集方式:Zabbix agent(active)
键值:prometheus.cache.metric[{$PURL},300]
数据类型:字符
prometheus.cache.metric为固定值;
300为缓存有效时间。
配置这个键值后会把Prometheus metric的返回信息缓存至snc-agent或者snc-proxy,有效期内其他键值采集数据直接从缓存中获取,否则每次都要http访问获取。
3. 普通监控项配置
采集方式:Zabbix agent(active)
键值:prometheus.xx.xx[{$PURL},key,label1="xx",label2="xx",...]
key为Prometheus metric返回数据格式中的"{xxx}"前的信息;
label为Prometheus metric返回数据格式中的"{xxx}"中的信息,label不是必须输入,长度可变。
首先会根据key对Prometheus metric信息进行筛选,如果键值包含label,再根据label进行进一步筛选,label的值支持通配符和正则表达式。
筛选结果为单条数据,返回对象格式json文本。
例:
{
"metric": {
"exception": "None",
"method": "GET",
"uri": "/**",
"outcome": "REDIRECTION",
"status": "304"
},
"value": "0.0"
}
筛选结果为多条数据,返回数组格式的json文本。
例:
[
{
"metric": {
"exception": "None",
"method": "GET",
"uri": "/**",
"outcome": "REDIRECTION",
"status": "304"
},
"value": "0.0"
},
{
"metric": {
"exception": "None",
"method": "OPTIONS",
"uri": "root",
"outcome": "SUCCESS",
"status": "200"
},
"value": "0.0"
}
]
配置监控项,如果想要获取返回结果中的某个信息,可以使用预处理JSON路径获取结果中的某个信息。
4. 依赖监控项配置
普通监控项返回结果为对象格式JSON文本或者数组格式JSON文本,如果想要基于普通监控项的监控信息进行解析,可以添加依赖监控项,主要项为想要解析的普通监控项。
5. 自发现配置
5.1 自发现规则配置
采集方式:Zabbix agent(active)
键值:prometheus.discovery.metric[{$PURL},key,label1="xx",label2="xx",...],label为可选参数。
自发现只适用于发现为Prometheus metric结果信息中格式为 xxx{label1="xx",label2="xx",...}的信息。
5.2 监控项原型配置
采集方式:Zabbix agent(active)
键值:prometheus.xx.xx[{$PURL},key,label="{#LABEL}"]
其中{#xxx}为自发现规则键值中的label转换为大写的信息。如果自发先规则键值中没有传label,则{#xxx}变量为所有筛选结果 xxx{label1="xx",label2="xx",...}中的label的大写信息。
自发现监控项:
版 本
基于GA03版本实现snc-proxy-agent的扩展。
展 望
实现支持prometheus exporter数据HTTP访问授权验证。