官方文档(中文版):https://www.kancloud.cn/nicefo71/prometheus-doc-zh/1318596
一:Prometheus是什么
Prometheus 起初是 SoundCloud 创建的一个开源系统监控报警工具。现在 Prometheus 是一个独立的开源项目,独立于任何一个公司。
Prometheus是一个TSDB(时序数据库),
时序数据库可以理解为一个经过优化,然后用来出来时间序列数据的软件, 并且数据中的数组是由时间进行索引的
二:特性(优点)
这些特性是作为TSDB的特性
主要特性包括:
-
通过指标名(metric name)和 KV 结构,使用时序数据(time series data)表达的多维度数据模型
也就是说其数据格式类似与 “时间+key+value”
-
使用PromQL语句: 一种灵活的查询语言,能够更好的利用维度
-
对分布式存储没有依赖;单服务器节点即可自治
-
通过使用基于 HTTP 的拉模式 (pull model) 进行时序数据采集
-
通过中间网关 ( gateway) 以支持推送时序数据
-
通过服务发现或静态配置,发现监控目标(targets)
-
支持多图和仪表盘模, 比如Grafana等
三:架构
四:四大组件
Prometheus 生态由多组件构成,其中大部分都是可选配置:
Prometheus Server
:: 是Prometheus组件中的核心部分, 负责实现随监控数据的获取,存储和查询
Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。
其次Prometheus Sever需要对采集到的数据进行存储,
Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。
Prometheus Server 对外提供了自定义的PromQL,实现对数据的查询以及分析。
另外Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据。·
Push Gateway
: : 为应对部分push场景提供的插件,这部分监控数据先推送到 Push Gateway 上,然后再由 Prometheus Server端拉取 。
用于存在时间较短,可能在 Prometheus 来拉取之前就消失了的 jobs;, 可能在Prometheus来pull之前就消失了.
这次jobs可以直接向Prometheus中间网关推送它们的metrics。
这种方式主要用于服务层面的metrics,对于机器层面的metrices,需要使用node exporter。(PushGatway类似zabbix proxy)
XXX Exporters
: Exporters(探针) 是Prometheus的一类数据采集组件的总称。负责从目标处搜集数据,并将其转化为Prometheus支持的格式
。它并不向*服务器发送数据,而是等待*服务器主动前来抓取。
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,
将其转化为Prometheus支持的格式,
Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采集的监控数据。可以将Exporter分为2类:
直接采集
:: 这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。间接采集
: : 原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。如:Mysql Exporter,JMX Exporter,Consul Exporter等。
Alertmanager: Prometheus server 主要负责根据基于PromQL的告警规则分析数据,如果满足PromQL定义的规则,则会产生一条告警
,并发送告警信息到Alertmanager
,Alertmanager则是根据配置处理告警信息并发送
。常见的接收方式有:电子邮件,webhook,微信等。
五: Prometheus原理
Prometheus的基本原理是
- 通过HTTP协议周期性抓取被监控组件的状态,
- 任意组件只要提供对应的HTTP接口就可以接入监控。
不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,
比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做
exporter
。
六:Prometheus工作流程
第一步: Prometheus server定期从配置好的
jobs 或者 exporters ,或者从Pushgateway,或者从其他的 Prometheus server 中拉metrics。
默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。
第二步: Prometheus server在本地存储收集到的 metrics
,并运行已定义好的alert.rules,通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。记录新的时间序列或者向Alertmanager推送警报。
获取到的数据存入TSDB,一款时序型数据库。
第三步: Prometheus通过PromQL和其他API可视化地展示收集的数据
。Prometheus支持很多方式的图表可视化,
例如Grafana、自带的Promdash以及自身提供的模版引擎等等。
Prometheus还提供HTTPAPI的查询方式,自定义所需要的输出。