Prometheus 架构

基本架构

prometheus_arch
整个 Prometheus 可以分为四大部分,分别是:

  • Prometheus 服务器: Prometheus ServerPrometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询
  • NodeExporter 业务数据源: 业务数据源通过 Pull/Push 两种方式推送数据到 Prometheus Server
  • AlertManager 报警管理器: Prometheus 通过配置报警规则,如果符合报警规则,那么就将报警推送到 AlertManager,由其进行报警处理
  • 可视化监控界面: Prometheus 收集到数据之后,由 WebUI 界面进行可视化图标展示。目前我们可以通过自定义的 API 客户端进行调用数据展示,也可以直接使用 Grafana 解决方案来展示
  • 总结: 简单地说,Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进行报警处理

Prometheus Server

  • Prometheus ServerPrometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。 Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。
  • 其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。
  • 最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。
  • Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。
  • Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。

Exporters

  • Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus ServerPrometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
  • 一般来说可以将Exporter分为2类:
    • 直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisorKubernetesEtcdGokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
    • 间接采集:间接采集,原有监控目标并不直接支持Prometheus,因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如: Mysql ExporterJMX ExporterConsul Exporter等。

AlertManager

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

PushGateway

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

Prometheus 架构
http://mybestcheng.site/2021/09/13/prometheus/prometheus-basic/
作者
mybestcheng
发布于
2021年9月13日
许可协议