跳到主要内容

四个黄金信号

在监控和可观测性领域,"四个黄金信号"(Four Golden Signals)是评估系统健康状态的关键指标。它们由 Google 的 Site Reliability Engineering (SRE) 团队提出,并被广泛应用于监控系统中。这四个信号分别是:延迟流量错误饱和度。通过监控这些信号,您可以快速识别系统中的问题并采取相应的措施。

本文将详细介绍这四个黄金信号,并通过实际案例展示如何在 Prometheus 中实现这些监控。

1. 延迟(Latency)

延迟是指系统处理请求所需的时间。它可以是请求的总时间,也可以是系统中某个组件的处理时间。延迟通常分为两种:

  • 成功请求的延迟:系统成功处理请求所需的时间。
  • 失败请求的延迟:系统处理失败请求所需的时间(例如,超时或错误响应)。

在 Prometheus 中,您可以使用 histogramsummary 来监控延迟。以下是一个使用 histogram 的示例:

prometheus
# 定义一个 histogram 来监控 HTTP 请求的延迟
http_request_duration_seconds_bucket{method="GET", handler="/api", le="0.1"} 10
http_request_duration_seconds_bucket{method="GET", handler="/api", le="0.5"} 50
http_request_duration_seconds_bucket{method="GET", handler="/api", le="1"} 100
http_request_duration_seconds_bucket{method="GET", handler="/api", le="+Inf"} 150
http_request_duration_seconds_sum{method="GET", handler="/api"} 75.6
http_request_duration_seconds_count{method="GET", handler="/api"} 150
提示

提示:使用 histogram 时,le 标签表示 "less than or equal to",即小于或等于某个值的请求数量。

2. 流量(Traffic)

流量是指系统处理的请求量或数据量。它可以是每秒的请求数(QPS)、每秒的字节数(BPS)或其他相关指标。流量是评估系统负载的重要指标。

在 Prometheus 中,您可以使用 counter 来监控流量。以下是一个监控 HTTP 请求量的示例:

prometheus
# 定义一个 counter 来监控 HTTP 请求量
http_requests_total{method="GET", handler="/api"} 1000
备注

注意counter 类型的指标只能递增,不能递减。通常,您会使用 rate() 函数来计算每秒的请求量。

3. 错误(Errors)

错误是指系统在处理请求时发生的错误。错误可以是 HTTP 错误码(如 4xx 或 5xx)、数据库连接错误、超时等。监控错误率可以帮助您快速识别系统中的问题。

在 Prometheus 中,您可以使用 counter 来监控错误。以下是一个监控 HTTP 错误请求的示例:

prometheus
# 定义一个 counter 来监控 HTTP 错误请求
http_errors_total{method="GET", handler="/api", status="500"} 10
警告

警告:错误率过高可能表明系统存在严重问题,需要立即排查。

4. 饱和度(Saturation)

饱和度是指系统资源的利用率。它可以是 CPU 使用率、内存使用率、磁盘 I/O 等。饱和度是评估系统是否接近其容量极限的重要指标。

在 Prometheus 中,您可以使用 gauge 来监控饱和度。以下是一个监控 CPU 使用率的示例:

prometheus
# 定义一个 gauge 来监控 CPU 使用率
cpu_usage{instance="server1", core="0"} 0.75
注意

警告:饱和度接近 100% 时,系统可能会出现性能瓶颈,需要及时扩容或优化。

实际案例

假设您正在监控一个 Web 服务,以下是您可能会使用的 Prometheus 配置:

prometheus
# 监控 HTTP 请求的延迟
http_request_duration_seconds_bucket{method="GET", handler="/api", le="0.1"} 10
http_request_duration_seconds_bucket{method="GET", handler="/api", le="0.5"} 50
http_request_duration_seconds_bucket{method="GET", handler="/api", le="1"} 100
http_request_duration_seconds_bucket{method="GET", handler="/api", le="+Inf"} 150
http_request_duration_seconds_sum{method="GET", handler="/api"} 75.6
http_request_duration_seconds_count{method="GET", handler="/api"} 150

# 监控 HTTP 请求量
http_requests_total{method="GET", handler="/api"} 1000

# 监控 HTTP 错误请求
http_errors_total{method="GET", handler="/api", status="500"} 10

# 监控 CPU 使用率
cpu_usage{instance="server1", core="0"} 0.75

通过监控这些指标,您可以全面了解系统的健康状态,并在出现问题时快速响应。

总结

四个黄金信号(延迟、流量、错误和饱和度)是评估系统健康状态的关键指标。通过 Prometheus 监控这些信号,您可以快速识别系统中的问题并采取相应的措施。

备注

练习

  1. 在您的 Prometheus 实例中,尝试定义并监控一个 HTTP 请求的延迟。
  2. 使用 rate() 函数计算每秒的请求量。
  3. 监控您的系统的 CPU 使用率,并设置一个警报,当使用率超过 80% 时触发。

通过本文的学习,您应该已经掌握了如何在 Prometheus 中监控四个黄金信号。希望这些知识能帮助您更好地管理和优化您的系统!