vlambda博客
学习文章列表

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数据格式:

AMP实现Prometheus Exporter数据对接

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",...]

AMP实现Prometheus Exporter数据对接

  • 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路径获取结果中的某个信息。

AMP实现Prometheus Exporter数据对接

AMP实现Prometheus Exporter数据对接

4. 依赖监控项配置

普通监控项返回结果为对象格式JSON文本或者数组格式JSON文本,如果想要基于普通监控项的监控信息进行解析,可以添加依赖监控项,主要项为想要解析的普通监控项。

AMP实现Prometheus Exporter数据对接

AMP实现Prometheus Exporter数据对接

5. 自发现配置

5.1 自发现规则配置

采集方式:Zabbix agent(active) 

键值:prometheus.discovery.metric[{$PURL},key,label1="xx",label2="xx",...],label为可选参数。

自发现只适用于发现为Prometheus metric结果信息中格式为 xxx{label1="xx",label2="xx",...}的信息。

AMP实现Prometheus Exporter数据对接

5.2 监控项原型配置

采集方式:Zabbix agent(active)

键值:prometheus.xx.xx[{$PURL},key,label="{#LABEL}"]

其中{#xxx}为自发现规则键值中的label转换为大写的信息。如果自发先规则键值中没有传label,则{#xxx}变量为所有筛选结果 xxx{label1="xx",label2="xx",...}中的label的大写信息。

AMP实现Prometheus Exporter数据对接

自发现监控项:

AMP实现Prometheus Exporter数据对接





版  本



基于GA03版本实现snc-proxy-agent的扩展。





展  望



实现支持prometheus exporter数据HTTP访问授权验证。


AMP实现Prometheus Exporter数据对接


本文作者:赵璐璐

本文来源:IT那活儿(上海新炬王翦团队)