Prometheus 既是一个时序数据库,又是一个监控系统,更是一套完备的监控生态解决方案。

一、 Prometheus 主要特点

Prometheus 与其他监控系统相比,它的主要特点:

  • 通过 PromQL 实现多维度数据模型的灵活查询
  • 定义了开放指标数据的标准,自定义探针(如 Exporter 等),编写简单方便
  • PushGateway 组件让这款监控系统可以接收监控数据
  • 提供了 VM 和容器化的版本

Prometheus 的局限性:

  • Prometheus 主要针对性能和可用性监控,不适用于针对日志(Log)、事件(Event)、调用链(Tracing)等的监控
  • Prometheus 关注的是近期发生的事情,而不是跟踪数周或数月的数据。Prometheus 认为最有用的数据是最近的数据,监控数据默认保留 15 天
  • 本地存储有限,存储大量的历史数据需要对接第三方远程存储
  • 采用联邦集群的方式,并没有提供统一的全局视图
  • Prometheus 的监控数据并没有对单位进行定义
  • Prometheus 对数据的统计无法做到 100% 准确
  • Prometheus 默认是拉模型,建议合理规划网络,尽量不要转发

二、 Prometheus 架构

pro.png

2.1 Job/Exporter

Job/Exporter 属于Prometheus target,是 Prometheus 监控的对象。 Job 分为长时间和短时间两种,长时间执行的Job 可使用 Prometheus Client 集成进行监控;短时间执行的Job 可将监控数据推送到 PushGateway 中缓存。 Exporter 用于第三方系统的监控,其机制是将第三方系统的监控数据按照 Prometheus 的格式暴露出来,没有 Exporter 的第三方系统可以自己定制 Exporter。当 Exporter 越来越多的时候,可以考虑使用 Telegraf 统一管理。

2.2. Pushgateway

Prometheus 以拉模式为主,推模式是通过 Pushgateway 组件实现的。Pushgateway 是支持临时性 Job 主动推送指标的中间网关,它本质上是一种用于监控 Prometheus 服务器无法抓取的资源的解决方案。
Pushgateway 作为独立的服务,位于被采集监控指标的应用程序和 Prometheus 服务器之间。它的主要使用场景:

  • 临时/短作业
  • 批处理作业
  • 应用程序与 Prometheus 服务器之间有网络隔离,如 安全性(防火墙)、连接性(不在一个网段)

Pushgateway 的缺点:

  • 它会丢失 Prometheus 服务器提供的很多功能,如UP 指标和指标过期时进行实例状态监控
  • 单点故障问题
  • 不会自动删除推送给它的任何指标数据,因此必须使用Pushgateway 的api 从推送网关中删除过期的指标
  • 防火墙和NAT 问题,推荐将 Prometheus 移到防火墙后面以便更加接近采集目标

Pushgateway 会丧失 Prometheus 通过 UP 指标检查实例监控状况的功能,此时 Prometheus 对应的拉状态的 UP 指标只是针对单 Pushgateway 服务的。

2.3. 服务发现

对于支持文件的服务发现,实践场景下可以与自动化配置管理工具(Ansible、Crontab等)结合使用。除了支持文件的服务发现(Prometheus 周期性地从文件中读取最新的target 信息)外,还支持多种常见的服务发现组件,如 Kubernetes、DNS、ZooKeeper等。通过服务发现的方式,管理员可以在不重启 Prometheus 服务的情况下动态发现需要监控的 target 信息。
服务发现中的 Relabeling 机制会从 Prometheus 包含的target 实例中获取默认的元标签信息,从而对不同开发环境、不同业务团队、不同组织等按照某些规则(如标签)从服务发现注册中心返回的 target 实例中有选择性的采集某些 Exporter 实例的监控数据。

2.4. Prometheus 服务器

主要功能:

  • 抓取:Prometheus Server 通过服务发现组件,周期性地从Job、Exporter、Pushgateway 中通过HTTP轮询的形式拉取监控指标数据
  • 存储:抓取到的监控数据通过一定的规则清洗和整理数据(抓取前使用服务发现提供的relabel_configs 方法,抓取后使用作业内的 metrics_relabel_configs 方法),会把得到的结果存储到新的时间序列中进行持久化。
    • 本地存储:会直接保留到本地磁盘,建议使用SSD 且不要保存超过一个月的数据。任何版本的 Prometheus 都不支持 NFS(有损坏或丢失历史数据的风险)
    • 远程存储:适用于存储大量的监控数据。支持OpenTSDB、InfluxDB、ES、Kafka、Postgresql等
  • 查询:持久化数据以后,客户端就可以通过 PromQL 语句对数据进行查询

2.5. Dashboard

Web UI、Grafana、API Client 都算是 Prometheus 的Dashboard

2.6. Alertmanager

Alertmanager 是独立于 Prometheus 的一个告警组件,需要单独安装部署。它接收 Prometheus 推送过来的告警,用于管理、整合和分发告警到不同的目的地。