1. 简介

Prometheus 是一款时序(time series)数据库,但它的功能并非止步于TSDB,而是一款设计用于进行目标(target)监控的关键组件。结合生态内的其他组件,如Pushgateway,Altermanager,Exporter等,构建了一套完整的监控体系。
Prometheus 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,2015 年 github 上开源,2016 年 Prometheus 成为继 k8s 后,第二名 CNCF(Cloud Native Computing Foundation) 成员。 2017年底发布了基于全新存储层的2.0版本,能更好地与容器平台、云平台配合。

2. 架构及组件

Prometheus架构及组件.png

2.1 Prometheus 是如何工作的?

Prometheus 基于 HTTP 来传输数据,从配置文件中指定的网络端点(endpoint)上周期性获取指标数据。
prometheus工作模式.png
那么,Prometheus 需要的这些指标数据又是怎么来的呢?Prometheus 支持通过三种类型的途径从目标上“抓取(Scrape)”指标数据:

  1. Instrumentation:构建应用程序仪表盘,应用程序自己并不会直接生成指标数据,想要生成 Prometheus 指标数据需要开发人员将 Prometheus 相关的客户端库添加至应用程序中构建出的测量系统(instrumentation system)来完成。客户端库主要负责处理所有的细节类问题,例如线程安全和记账,以及生成文本格式的指标以数据响应 HTTP 请求等,客户端库通常还会额外提供一些指标,例如 CPU 使用率和垃圾回收统计信息等,具体的实现则取决于库和相关的运行时环境。
  2. Exporters:对于那些非由用户可直接控制的应用代码来说,为其添加客户端库以进行直接测量很难实现。操作系统内核和 MySQL 应用就是两个典型的示例,显然不大可能直接实现添加自定义代码通过 HTTP 协议输出 Prometheus 格式的指标。但这一类的程序一般都会通过某种接口输出其内在的指标,只不过这些指标一般有着自己特有的格式,这些指标需要对它进行适当的解析和处理以转换为 Prometheus 可用的目标格式,Exporter(指标暴露器)就是完成此类转换功能的应用程序。Exporter独立运行于要获取其测量指标的应用程序之外,负责接收来自于 Prometheus Server 的指标获取请求,它通过目标应用程序(真正的目标)内置的指标接口获取指标数据,并将这些指标数据转换为可用的目标格式后响应给 Prometheus Server。Exporter 更像是“一对一”的代理,它作为 Prometheus Server 的target 存在,工作于应用程序的指标接口和 Prometheus 的文本指标格式之间转换数据格式,但 Exporter 本身不存储也不缓存任何数据。
  3. PushGateway:

prometheus抓取数据方式.png