prometheus 架构组件

Prometheus 提供了从指标暴露,到指标抓取、存储和可视化,以及最后的监控告警等一系列组件。

从上图可以看到,整个 Prometheus 可以分为四大部分,分别是:

  • Prometheus 服务器

Prometheus Server 是 Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

  • NodeExporter 业务数据源

业务数据源通过 Pull/Push 两种方式推送数据到 Prometheus Server。

  • AlertManager 报警管理器

Prometheus 通过配置报警规则,如果符合报警规则,那么就将报警推送到 AlertManager,由其进行报警处理。

  • 可视化监控界面

Prometheus 收集到数据之后,由 WebUI 界面进行可视化图标展示。目前我们可以通过自定义的 API 客户端进行调用数据展示,也可以直接使用 Grafana 解决方案来展示。

Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进行报警处理。 但其珍贵之处在于提供了一整套可行的解决方案,并且形成了一整个生态,能够极大地降低我们的研发成本。

1. 指标暴露

每一个被 Prometheus 监控的服务都是一个 Job,Prometheus 为这些 Job 提供了官方的 SDK ,利用这个 SDK 可以自定义并导出自己的业务指标,也可以使用 Prometheus 官方提供的各种常用组件和中间件的 Exporter(比如常用的 MySQL,Consul 等等)。对于短时间执行的脚本任务或者不好直接 Pull 指标的服务,Prometheus 提供了 PushGateWay 网关给这些任务将服务指标主动推 Push 到网关,Prometheus 再从这个网关里 Pull 指标。

2. 指标抓取

上面提到了 Push 和 Pull,其实这是两种指标抓取模型。

  • Pull 模型:监控服务主动拉取被监控服务的指标

被监控服务一般通过主动暴露 metrics 端口或者通过 Exporter 的方式暴露指标,监控服务依赖服务发现模块发现被监控服务,从而去定期的抓取指标。

  • Push 模型:被监控服务主动将指标推送到监控服务,可能需要对指标做协议适配,必须得符合监控服务要求的指标格式

对于 Prometheus 中的指标抓取,采用的是 Pull 模型,默认是一分钟去拉取一次指标,通过 Prometheus.yaml 配置文件中的 scrape_interval 配置项配置,Prometheus 对外都是用的 Pull 模型,一个是 Pull Exporter 的暴露的指标,一个是 Pull PushGateway 暴露的指标。

3. 指标存储和查询

指标抓取后会存储在内置的时序数据库中,Prometheus 也提供了 PromQL 查询语言给我们做指标的查询,我们可以在 Prometheus 的 WebUI 上通过 PromQL,可视化查询我们的指标,也可以很方便的接入第三方的可视化工具,例如 grafana。

4. 监控告警

prometheus 提供了 alertmanageer 基于 promql 来做系统的监控告警,当 promql 查询出来的指标超过我们定义的阈值时,prometheus 会发送一条告警信息到 alertmanager,manager 会将告警下发到配置好的邮箱或者微信。

安装和配置 Prometheus 是任何一个高级工程师必须要掌握的技能。那么如何从零部署一套 Prometheus 监控系统呢?本教程将手把手带你用一个最简单的例子部署 Prometheus 监控系统。1. ...