Prometheus 监控

17 Mar 2025 | 5 分钟阅读

Prometheus 概述

Prometheus 是一个工具集,即开源的系统告警和监控工具集。最初,它在 SoundCloud 上构建。许多组织和公司都批准了这个项目。自 2012 年成立以来,它拥有活跃的用户社区和开发者。现在,它是一个开源项目,并且独立于公司进行控制。2016 年,继 Kubernetes 之后,Prometheus 作为第二个托管项目加入了云原生计算基金会。

它在时间序列数据库中记录实时指标。该项目是用 Go 编写的。它获得了 Apache 2 许可证。

Prometheus 监控架构

Prometheus Monitoring

Prometheus 的工作原理

Prometheus 可以运行在 Go 和 Docker 应用程序中。该监控软件可以定义为时间序列数据库,并配有 UI(用户界面)和灵活、强大的查询语言 PromQL。

Prometheus 通过检测过的作业收集指标。样本可以本地存储。此外,它还可以通过规则进行扫描,以记录或收集现有数据中的任何新时间序列,并进行设计警报。这些指标通过**直方图、仪表盘**和**计数器**显示。数据可以通过 HTTP 以纯文本传输。

Prometheus 的特性

以下讨论了 Prometheus 的一些主要方面

  • 支持多种仪表盘和图形模式
  • 在 HTTP 上从任何拉取模型表示时间序列集合
  • 多维数据模型,表示时间序列数据,即以指标名称或 KVP(键值对)识别
  • 能够使用 PromQL 支持数据模型的多维性特性
  • 不依赖分布式存储,以及独立的单个服务器节点
  • 通过服务发现或静态配置进行目标发现
  • 能够从任何中间网关管理时间序列

Prometheus 的用途

IT 领域的各个部门使用 Prometheus 来尝试捕获云环境中的问题和入侵。此外,它还用于呈现产品信息、应用程序数据、服务和网站,这些都与许多网站访问者相关。Prometheus 已被 DigitalOcean、Ericsson、CoreOs、Weaveworks、Red Hat、Google、Docker 和 Boxever 等组织采用。

Prometheus 支持运行云托管网站、应用程序和服务,以确保为多个客户提供准确的功能。Prometheus 对客户,即面向客户的客户也非常重要。该软件向许多客户展示了有关趋势、评论、销售和产品的可接受数据。

Prometheus 的组件

Prometheus 的组件主要用 Go 编程语言定义,可以部署并构建为静态二进制文件。其许多组件都是可选的。

其组件包括

  1. Prometheus 的**服务器**存储和抓取指标。它应用了持久化层。这一层是服务器的一部分,并且不在文档中明确定义。该服务器的所有节点都是独立的,不依赖于分布式存储。
  2. Web **UI** 允许我们对存储的信息进行图表绘制、可视化和访问。Prometheus 提供了其 UI。此外,我们还可以配置一些其他可视化工具,如 Grafana,通过 Prometheus 查询语言(PromQL)访问 Prometheus 服务器。
  3. **Alertmanager** 通过客户端应用程序(如 Prometheus 服务器)传输警报。它包含用于路由、分组和去重警报的高级功能,并可能从 OpsGenie 和 PagerDuty 等其他服务进行路由。

从根本上说,Prometheus 依赖于通过定义的端点拉取或抓取指标。这意味着我们的应用程序需要公开任何存在多个指标的端点,并通知 Prometheus 服务器进行抓取。对于不包含添加 Web 端点方式的各种应用程序(如 Cassandra 和 Kafka),有各种导出器。

从根本上说,Prometheus 依赖于通过定义的端点拉取或抓取指标。这意味着我们的应用程序需要公开任何存在多个指标的端点,并通知 Prometheus 服务器进行抓取。对于不包含添加 Web 端点方式的各种应用程序(如 Cassandra 和 Kafka),有各种导出器。

PromQL

Prometheus 提供了其查询语言,即**Prometheus 查询语言**(PromQL)。它允许用户聚合和选择数据。特别是,PromQL 针对与时间序列数据库的集合工作进行了调整。Prometheus 包含四种类型的指标,如下所示:

  • Gauge
  • Counter
  • 总结
  • 直方图

仪表盘和计数器

仪表盘和计数器是两种指标类型。这是最简单的理解类型,因为它们很容易与任何值相关联。这些类型定义了我们的应用程序当前使用了多少系统资源,以及处理了多少事件。

**计数器**可以定义为任何累积指标,它表示一个单调递增的计数器,其值只能在重启时重置或增加到零。例如,我们可以使用计数器来表示错误数量、完成的任务数和处理的请求数。

由于我们不能递减计数器,因此它应该并且只能用于表示累积指标。

**仪表盘**可以定义为任何指标,它表示一个可能任意上升和下降的单个值。仪表盘通常用于测量值或最新的内存使用情况。

摘要和直方图

Prometheus 为两种复杂的指标类型提供了支持:**摘要**和**直方图**。这些指标用于跟踪观察次数和观察值的总和。它们在数据库中创建时间序列。例如,它们都以**_sum** 作为后缀创建观察值的总和。

直方图用于对配置桶中的采样计数和观察值(通常是响应大小或请求持续时间等)进行计数。此外,它还提供了每个观察值的总和。

直方图是跟踪延迟等事物的重要候选者,这些事物可能包含定义的**SLO**(服务水平目标)。

摘要用于采样各种观察值(通常是响应大小或请求持续时间等)。此外,它还提供观察值的总数和每个观察值的总和。它可以在任意滑动时间窗口上计算可配置的数量。

直方图和摘要之间的一个重要区别在于,直方图披露了分桶观察的计数,并且通过直方图的桶计算的数量是通过服务器端使用函数**histogram_quantile()** 完成的。

其他一些要点如下

  • 使用仪表盘处理时间序列指标,即直接处理。
  • 使用计数器处理许多我们知道会单调递增的事物。例如,如果我们正在计算某件事发生的次数。
  • 使用直方图处理具有一般桶的延迟测量。例如,一个用于“超过 SLO”的桶,另一个用于“低于 SLO”的桶。