# AMP实现Prometheus Exporter数据对接

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 解决方案
> 标签: Kubernetes
> 原文链接: http://117.50.162.249:3000/yun/articles/1344

---

# AMP实现Prometheus Exporter数据对接

> 来源: https://www.ucloud.cn/yun/129557.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

AMP实现Prometheus Exporter数据对接

## **点击上方“IT那活儿”，关注后了解更多内容，不管IT什么活儿，干就完了！！！**

## **![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_000.png)**

背  景

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_002.png)

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为固定值；
- {$PURL}为Prometheus metric的http请求地址；
- 300为缓存有效时间。

**配置这个键值后会把Prometheus metric的返回信息缓存至snc-agent或者snc-proxy，有效期内其他键值采集数据直接从缓存中获取，否则每次都要http访问获取。**

**3. 普通监控项配置**

采集方式：Zabbix agent(active) 

键值：prometheus.xx.xx[{$PURL},key,label1="xx",label2="xx",...]

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_002.png)

- {$PURL}为Prometheus metric的http请求地址；
- 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路径获取结果中的某个信息。

**![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_003.png)**

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_004.png)

**4. 依赖监控项配置**

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_005.png)

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_006.png)

**5. 自发现配置**

5.1 自发现规则配置

采集方式：Zabbix agent(active) 

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

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_007.png)

5.2 监控项原型配置

采集方式：Zabbix agent(active)

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

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_008.png)

自发现监控项：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_009.png)

版  本

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

展  望

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_010.png)

## 本文作者：赵璐璐

## 本文来源：IT那活儿（上海新炬王翦团队）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129557/images/129557_011.png)

​