Prometheus(1): Prometheus原理和工作流程分析,及其特性

官方文档(中文版):https://www.kancloud.cn/nicefo71/prometheus-doc-zh/1318596

一:Prometheus是什么

Prometheus 起初是 SoundCloud 创建的一个开源系统监控报警工具。现在 Prometheus 是一个独立的开源项目,独立于任何一个公司。

Prometheus是一个TSDB(时序数据库),

时序数据库可以理解为一个经过优化,然后用来出来时间序列数据的软件, 并且数据中的数组是由时间进行索引的

二:特性(优点)

这些特性是作为TSDB的特性
主要特性包括:

  1. 通过指标名(metric name)和 KV 结构,使用时序数据(time series data)表达的多维度数据模型

    也就是说其数据格式类似与 “时间+key+value”

  2. 使用PromQL语句: 一种灵活的查询语言,能够更好的利用维度

  3. 对分布式存储没有依赖;单服务器节点即可自治

  4. 通过使用基于 HTTP 的拉模式 (pull model) 进行时序数据采集

  5. 通过中间网关 ( gateway) 以支持推送时序数据

  6. 通过服务发现或静态配置,发现监控目标(targets)

  7. 支持多图和仪表盘模, 比如Grafana等

三:架构

Prometheus(1): Prometheus原理和工作流程分析,及其特性

四:四大组件

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类:

  1. 直接采集 :: 这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点
  2. 间接采集 : : 原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。如:Mysql Exporter,JMX Exporter,Consul Exporter等。

Alertmanager: Prometheus server 主要负责根据基于PromQL的告警规则分析数据,如果满足PromQL定义的规则,则会产生一条告警,并发送告警信息到AlertmanagerAlertmanager则是根据配置处理告警信息并发送。常见的接收方式有:电子邮件,webhook,微信等。

五: Prometheus原理

Prometheus的基本原理是

  1. 通过HTTP协议周期性抓取被监控组件的状态,
  2. 任意组件只要提供对应的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的查询方式,自定义所需要的输出。

上一篇:06-kube-prometheus-stack


下一篇:prometheus-operator(一)