架构说明
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等。
工作流程:
在代码中定义指标(如计数器、直方图)。
通过HTTP端点(如
/metrics
)暴露指标数据,供Prometheus拉取。
4 AlertManager
在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。
工作流程:
Prometheus Server根据规则生成告警,发送至Alertmanager。
Alertmanager对告警分组(如按集群或服务),抑制重复告警,并通过邮件、Slack、PagerDuty等渠道发送。
告警流水线:
路由(Routing):根据标签匹配路由规则,如
team=frontend
发送至 Slack。分组(Grouping):合并同一类告警(如同一服务的多个实例故障)。
抑制(Inhibition):若高优先级告警触发,抑制低优先级告警(如网络故障时忽略服务告警)。
静默(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记录动态更新目标。
最后更新于