架构说明

prometheus基本架构如下图所示:

prometheus基本架构

1 Prometheus Server

Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。 Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。

Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。

Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。

子组件​​:

  • ​Retrieval(数据采集器)​​:主动通过HTTP从配置的目标(如Exporter、应用程序)​​拉取(Pull)​​指标数据。

  • ​Storage(存储引擎)​​:使用本地时间序列数据库(TSDB)存储数据,优化高吞吐量的写入与查询。数据按时间分块(默认2小时块),并支持压缩和过期删除(可配置保留策略)。

  • ​HTTP Server​​:提供Web UI、API接口及PromQL查询服务。

2 Exporters

Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。

一般来说可以将Exporter分为2类:

  • 直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。

  • 间接采集:间接采集,原有监控目标并不直接支持Prometheus,因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。

3 客户端库(Client Library)

  • 作用​​:集成到应用程序中,暴露自定义监控指标。

  • ​支持语言​​:Go、Java、Python、Ruby等。

  • ​工作流程​​:

    1. 在代码中定义指标(如计数器、直方图)。

    2. 通过HTTP端点(如/metrics)暴露指标数据,供Prometheus拉取。

4 AlertManager

在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。

  • ​工作流程​​:

    1. Prometheus Server根据规则生成告警,发送至Alertmanager。

    2. Alertmanager对告警分组(如按集群或服务),抑制重复告警,并通过邮件、Slack、PagerDuty等渠道发送。

  • ​告警流水线​​:

    1. ​路由(Routing)​​:根据标签匹配路由规则,如 team=frontend 发送至 Slack。

    2. ​分组(Grouping)​​:合并同一类告警(如同一服务的多个实例故障)。

    3. ​抑制(Inhibition)​​:若高优先级告警触发,抑制低优先级告警(如网络故障时忽略服务告警)。

    4. ​静默(Silence)​​:临时屏蔽特定标签告警(如维护期间)。

route:
  group_by: [cluster, alertname]
  receiver: 'slack-frontend'
  routes:
    - match: { severity: 'critical' }
      receiver: 'pagerduty'

5 PushGateway

由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。

也可以收集生命周期较短的任务,让其主动push数据到PushGateway,再由Server去pull。

6 服务发现

  • 动态目标管理​​:自动检测监控目标(如Kubernetes Pod、Consul服务),无需手动更新配置。

  • ​环境适配​​:支持多云、混合云及传统IDC环境,灵活对接各类基础设施。

  • ​标签生成​​:自动为目标附加元数据标签(如集群名、命名空间),便于数据聚合与筛选。

  • ​支持机制​​:

    • ​Kubernetes​​:自动发现Pod、Service、Endpoint等资源。

    • ​Consul​​:通过服务注册中心发现实例。

    • ​文件或DNS​​:静态文件列表或DNS记录动态更新目标。

最后更新于