一、Exporter概述
1.1 是什么?
所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示Prometheus通过轮询的方式定期从这些target中获取样本数据:
![](https://img.kancloud.cn/a9/fa/a9fa538a1ec3d2860e594479775ba311_465x176.png)
安装好后的Exporter会暴露一个http服务,通过Prometheus添加配置,就可以采集到这个http服务的所有监控样本数据
<hr>
1.2 有什么用?
Prometheus 已经成为云原生应用监控行业的标准,在很多流行的监控系统中都已经实现了Prometheus的监控接口,例如etcd、Kubernetes、CoreDNs等,它们可以直接被Prometheus监控,但大多数监控对象都没办法直接提供监控接口,主要原因有。很多系统在Prometheus诞生之前的很多年就已经发布了,例如MySQL和Redis等。它们本身不支持HTTP接口,例如对于硬件性能指标,操作系统并没有原生的HTTP接口可以获取。
。考虑到安全性,稳定性以及代码耦合等因素的影响,软件作者并不愿意将监控代码加入现有的代码中。
这些都导致无法通过一个规范解决所有监控问题。在此背景之下,Exporter应运而生Exporter 是一个采集监控数据并通过 Prometheus 监控规范对外提供数据的组件。除了官方实现的Exporter如Node Exporter、HAProxyExporter、MySQLserver Exporter,还有很多第三方实现如Redis Exporter和RabbitMQ Exporter等。
![](https://img.kancloud.cn/4a/76/4a76cf53094e447c3a43a8685b184906_495x290.png)
<hr>
二、Exporter的来源
社区提供的:
1.Prometheus社区提供了丰富的Exporter实现,溺盖了从基础设施,中间件以及网络等各个方面的监控功能。例如:Node Exporter,MySQLExporter,Fluentd Exporter2.官方文档链接:https://prometheus,io/docs/instrumenting/exporters/
用户自定义的:
1.除了可以使用社区提供的Exporter程序外,用户可以基于Prometheus提供的ClientLibrary创建自己的Exporter程序。
2.这里给出Client Go的链接:https://github.com/prometheus/client_golang
<hr>
三、Exporter的类型
1.直接采集型T
这类Exporter直接内置了相应的应用程序,用于向Prometheus直接提供Target数据支持。这样设计的好处是,可以更好地监控各自系统的内部运行状态,同时也适合更多自定义监控指标的项目实施。例如cAdvisor、Kubernetes等,它们均内置了用于向Prometheus提供监控数据的端点。
2.间接采集型
原始监控日标并不直接支持Prometheus,需要我们使用Prometheus提供的Client Library编写该监控目标的监控采集程序,用户可以将该程序独立运行,去获取指定的各类监控数据值。例如,由于Linux操作系统自身并不能直接支持Prometheus,用户无法从操作系统层面上直接提供对Prometheus的支持,因此单独安装Nodeexporter,还有数据库或网站HTTP应用类等Exporter。
<hr/>
四. Exporter获取监控数据的方式
1.HTTP/HTTPS方式。例如RabbitMQexporter通过RabbitMQ的HTTPS接囗获取监控数据。
2.TCP方式,例如Redis exporter通过Redis提供的系统监控相关命令获取监控指标MvSQLserver exporter诵过MVSQL开发的监控相关的表获取监控指标。
3.本地文件方式。例如Node exporter通过读取proc文件系统下的文件,计算得到整个作系统的状态。
4.标准协议方式
<hr>
五、Exporter的规范
Prometheus 在面对众多繁杂的监控对象时并没有采用逐一适配的方式,而是制定了一套独特的监控数据规范,符合这套规范的监控数据都可以被Prometheus统一采集、分析和展现。
所有的Exporter程序都需要按照Prometheus的规范,返回监控的样本数据。以NodeExporter为例,当访问/metrics地址时会返回以下内容
![](https://img.kancloud.cn/9f/b3/9fb365a004d527c0f0082c59f38eeb42_450x119.png)
Exporter返回的样本数据,主要由三个部分组成:样本的一般注释信息(HELP),样本的类型注释信息(TYPE)和样本。Prometheus会对Exporter响应的内容逐行解析
。如果当前行以# HELP开始,Prometheus将会按照以下规则对内容进行解析,得到当前的指标名称以及相应的说明信息:#HELP<metrics_name><doc_string>
如果当前行以#TYPE开始,Prometheus会按照以下规则对内容进行解析,得到当前的指标名称以及指标类型:#TYPE<metrics nammetrics type>
除了# 开头的所有行都会被视为是监控样本数据每一行样本需要满足以下格式规范:
![](https://img.kancloud.cn/14/e1/14e175852545261dacb43ff6e12a335e_451x73.png)
其中merric_name和label_name必须遵循PromQL的格式规范要求。value是一个foat格式的数据,timestamp的类型为int64(从1970-01-0100:00:00以来的毫秒数),timestamp为可选默认为当前时间。具有相同metric_name的样本必须按照一个组的形式排列,并且每一行必须是唯一的指标名称和标签键值对组合。
- Prometheus教程
- 一. dokcer 安装
- 二. 安装docker-compose
- 三. docker-compose安装Prometheus
- 四. 配置grafana的数据源
- 五. Prometheus的Exporter
- 六. Prometheus的基本术语
- 七. 监控Linux
- 八. 监控redis和mongodb
- 九. 监控mysql数据库
- 十. 监控go程序
- 十一. 监控nginx
- 十二. 监控消息队列
- 十三. 监控docker
- 十四. 监控进程
- 十五. 域名监控
- 十六. SNMP监控
- 十七. 黑盒监控
- 十八. 自定义监控
- 十九. go实现自定义监控
- 二十. 服务发现概述
- 二十一. 基于文件的服务发现
- 二十二. 基于Consul的服务发现
- 二十三. relabeling机制