CloudMap
全部简历Argo CDPostgreSQLKubernetesPrometheusDocker其他

© 2026 云原生洞见 · Cloud Native Insights · 保留所有权利

文章目录

20 项
  • 1.术语与定义
  • 2.核心监控指标一览
  • 3.标准操作流程
  • 3.1 检查网站瞬时可用性
  • 3.2 计算一段时间内的成功率 / 失败率
  • 3.3 查看最近 5 分钟 HTTP 状态码历史
  • 3.4 查询探测总耗时 P99 (过去30分钟)
  • 3.5 定位延迟瓶颈:分阶段耗时分析
  • 3.5.1 各阶段 (phase) 含义
  • 3.5.2 查询特定阶段耗时 P99
  • 4.告警规则模板
  • 4.1 网站不可用告警
  • 4.2 高延迟告警(总耗时 P99)
  • 4.3 高错误率告警
  • 5.常见问题与排查思路
  • 6.监控大盘与最佳实践
  • 7.附录
  • 附录 A:PromQL 速查表
  • 附录 B:Blackbox Exporter 配置示例(Prometheus 端)
  • 附录 C:故障排查简明流程图
Prometheus2026年2月23日

PromQL 查询


1.术语与定义

术语

定义

Prometheus

开源监控系统,采集并存储时间序列数据。

Blackbox Exporter

Prometheus 生态组件,从外部对目标进行黑盒探测(HTTP/HTTPS/TCP/DNS),返回可用性与性能指标。

PromQL

Prometheus 查询语言,用于从时间序列数据库获取并计算监控数据。

指标 (Metric)

带标签的时序数据,例如 probe_success。

瞬时向量 (Instant Vector)

查询时刻每个时间序列的最新值。

区间向量 (Range Vector)

查询时刻往回一段时间窗口内的所有采样点。

Gauge

可增可减的指标类型,Blackbox Exporter 探针数据大多属于此类型。

Histogram

统计数据分布(如请求延迟的分桶)的指标类型,注意与 Gauge 区分。

P99 (第99百分位数)

将一段时间内的数值升序排列,处于99%位置的值,代表“最慢的1%”的延迟。


2.核心监控指标一览

Blackbox Exporter 将每次探测的结果通过以下关键指标暴露:

指标名称

描述

数据类型

示例值

probe_success

探测是否成功

Gauge

1(成功)/ 0(失败)

probe_http_status_code

HTTP 响应状态码

Gauge

200, 404, 502...

probe_duration_seconds

单次探测总耗时(从开始到结束的全链路时间)

Gauge(秒)

4.074

probe_http_duration_seconds

分阶段耗时,通过 phase 标签区分具体阶段

Gauge(秒)

phase="processing": 0.15

⚠️ 重点:以上指标均为 Gauge 类型,不是 Histogram。因此计算分位数(如 P99)时必须使用 quantile_over_time(),不是使用 histogram_quantile()。


3.标准操作流程

3.1 检查网站瞬时可用性

场景:需要立刻知道某网站当前能否正常打开。
PromQL:

probe_success{app="frontend"}

结果示例:

probe_success{app="frontend", env="production", instance="https://www.example.com", job="probe/exporters/frontend-probe", namespace="exporters", tier="frontend"}	1

解读:

  • 返回值 1 表示最近一次探测成功

  • 若为 0,代表探测失败,应立即结合 probe_http_status_code 或 Blackbox Exporter 日志排查。

3.2 计算一段时间内的成功率 / 失败率

场景:统计过去 5 分钟的可用率,用于 SLA 计算或报表。
成功率(百分比):

PromQL:

avg_over_time(probe_success{app="frontend"}[5m]) * 100

关键点:

  • [5m] 为时间窗口,可替换为 [10m]、[1h] 等。

  • avg_over_time 会对该窗口内所有 0/1 采样点求平均值(即成功率),乘 100 转换为百分比。

  • 若探测间隔为 30s,则 5 分钟内约有 10 个采样点参与计算。

结果示例:

{app="frontend", env="production", instance="https://www.example.com", job="probe/exporters/frontend-probe", namespace="exporters", tier="frontend"}	                 100

解读:

  • 返回值 100 表示最近一次探测成功

3.3 查看最近 5 分钟 HTTP 状态码历史

场景:确认网站是否频繁返回 5xx 错误。
PromQL:

probe_http_status_code{app="frontend"}[5m]

结果形式(在 Prometheus UI 中会显示多个采样点):

200 @1776402593.015
200 @1776402623.015
200 @1776402653.015
...

解读方法:

  • @ 后的数字为 Unix 时间戳,代表采样时刻。

  • 快速转换为北京时间示例:

date -d @1776402593 "+%Y-%m-%d %H:%M:%S"   # 输出:2026-04-17 11:49:53 CST
  • 若 5 分钟内出现 10 个采样点,说明探测间隔约为 30 秒(与 Prometheus 配置的 scrape_interval 一致)。

3.4 查询探测总耗时 P99 (过去30分钟)

场景:掌控最近 30 分钟内最慢的 1% 请求的耗时,监控尾延迟。
PromQL:

quantile_over_time(0.99,
  probe_duration_seconds{app="vercel-frontend"}[30m]
)

返回示例:

{app="frontend", env="production", instance="https://wwww.example.com", job="probe/exporters/frontend-probe", namespace="exporters", tier="frontend"}                                        4.074420551799996

解读:

  • 数值 4.07 秒 代表:过去 30 分钟内,有 99% 的探测请求总耗时 ≤ 4.07 秒;有 1% 的请求耗时 > 4.07 秒。

  • probe_duration_seconds 包含 DNS 解析、TCP 建连、TLS 握手、服务器处理及内容传输的全部时间,是黑盒端到端全链路耗时。

3.5 定位延迟瓶颈:分阶段耗时分析

当 probe_duration_seconds P99 偏高时,必须拆解到具体阶段,才能定位根因。

3.5.1 各阶段 (phase) 含义

probe_http_duration_seconds 通过 phase 标签区分以下阶段:

phase 值

对应阶段

主要影响因素

resolve

DNS 解析

DNS 服务器性能、缓存命中率

connect

TCP 连接建立

网络延迟、丢包、防火墙策略

tls

TLS/SSL 握手

服务器 CPU、加密套件复杂度、证书链长度

processing

服务器处理 (TTFB)

应用代码、数据库查询、后端服务

transfer

内容传输

响应体大小、出口带宽

注意:各阶段耗时合计应约等于 probe_duration_seconds(可能存在微小误差)。部分旧版 Blackbox Exporter 可能使用 phase="ssl" 而非 tls,请根据实际指标调整。

3.5.2 查询特定阶段耗时 P99

查询服务器处理耗时 P99:

quantile_over_time(0.99,
  probe_http_duration_seconds{app="vercel-frontend", phase="processing"}[30m]
)

查询内容传输耗时 P99:

quantile_over_time(0.99,
  probe_http_duration_seconds{app="frontend", phase="transfer"}[30m]
)

根因分析示例:
假设一次探测各阶段值为:resolve 0.31s,connect 0.09s,tls 0.15s,processing 4.07s,transfer 2.58s。

阶段

耗时

判断

DNS / TCP / TLS

均 < 0.5s

网络基本健康

processing

4.07s

服务器处理严重缓慢

transfer

2.58s

可能响应体过大或带宽受限

首要优化方向:后端应用性能调优(慢 SQL、高 CPU、未命中缓存)。

✅ 最佳实践:先通过 probe_duration_seconds P99 确认总延迟异常,再逐阶段查询 P99,快速收敛至最慢的一两个阶段。


4.告警规则模板

以下规则可直接用于 Prometheus Rule 配置文件。

4.1 网站不可用告警

- alert: WebsiteDown
  expr: probe_success{app="frontend"} == 0
  for: 2m
  labels:
    severity: critical
  annotations:
    summary: "网站 {{ $labels.instance }} 不可用"
    description: "探测失败已持续 2 分钟,请立即检查。"

4.2 高延迟告警(总耗时 P99)

- alert: WebsiteHighP99Latency
  expr: quantile_over_time(0.99, probe_duration_seconds{app="frontend"}[30m]) > 5
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: "网站 {{ $labels.instance }} 总耗时 P99 超过 5 秒"
    description: "过去 30 分钟的 P99 延迟为 {{ $value }} 秒,请排查后端或网络。"

4.3 高错误率告警

- alert: WebsiteHighErrorRate
  expr: (1 - avg_over_time(probe_success{app="frontend"}[5m])) * 100 > 5
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "网站 {{ $labels.instance }} 5 分钟内错误率超过 5%"

5.常见问题与排查思路

Q1:probe_success 为 0 但手动可以打开网站?

  • 确认 Blackbox Exporter 所在节点/容器是否存在出口网络限制(防火墙、安全组、代理)

  • 检查目标网站是否启用了反爬机制、IP 黑名单或限流策略

  • 查看 probe_http_status_code 具体返回值,确认是否收到 4xx/5xx

  • 查看 Blackbox Exporter 日志(Kubernetes 环境示例):

kubectl logs -n monitoring deploy/blackbox-exporter

Q2:P99 延迟偶发性突增,但平均耗时正常?
这是典型的长尾效应,应使用分阶段指标聚焦排查:

  • phase="processing" 高 → 检查应用慢日志、数据库负载、GC 停顿

  • phase="tls" 高 → 检查 SSL 证书有效期、是否使用弱加密套件、TLS 会话复用情况

  • phase="resolve" 高 → 上游 DNS 服务器异常,建议部署本地 DNS 缓存 (如 CoreDNS/NodeLocalDNS)

Q3:quantile_over_time 与 histogram_quantile 有何区别?

  • Blackbox Exporter 的指标是 Gauge,必须用 quantile_over_time 计算一段时间内的统计分位数。

  • 如果应用程序自行暴露了 Histogram 类型指标(如 http_request_duration_seconds_bucket),则应使用 histogram_quantile()。

  • 记忆口诀:外部黑盒探测用 quantile_over_time,内部埋点 Histogram 用 histogram_quantile。

Q4:Unix 时间戳如何快速转换为可读时间?

  • Linux/Mac 命令行:

date -d @1776402593 "+%Y-%m-%d %H:%M:%S"

  • Prometheus Web UI 中直接切换到 Graph 页面,鼠标悬停可显示格式化时间。

6.监控大盘与最佳实践

  • Grafana 面板建议:

    • 使用 Stat 面板展示即时可用状态(0/1)与实时延迟。

    • 使用 Time series 面板绘制各阶段 P99 趋势图,叠加阈值线。

    • 为不同 job 创建可复用的 Dashboard,通过变量切换实例。

  • 探测频率控制:生产环境建议 scrape_interval: 30s,关键业务可缩短为 15s,但需评估 Blackbox Exporter 负载。

  • 多区域探测:对于广州、深圳双数据中心的企业,建议在两地基站各部署一个 Blackbox Exporter,并附加 region 标签,对比两地访问质量。

  • 指标保留与降准:原始探测数据建议保留至少 7 天,P99 等聚合指标可长期保留用于月度分析。

7.附录

附录 A:PromQL 速查表

需求

PromQL 示例

站点当前是否可用

probe_success{job="blackbox-http-probe"}

过去 5 分钟成功率

avg_over_time(probe_success{job="blackbox-http-probe"}[5m]) * 100

过去 5 分钟失败率

(1 - avg_over_time(probe_success{job="blackbox-http-probe"}[5m])) * 100

HTTP 状态码历史

probe_http_status_code{job="blackbox-http-probe"}[5m]

总耗时 P99(30min)

quantile_over_time(0.99, probe_duration_seconds{job="blackbox-http-probe"}[30m])

DNS 解析耗时 P99(1h)

quantile_over_time(0.99, probe_http_duration_seconds{job="blackbox-http-probe", phase="resolve"}[1h])

服务器处理耗时 P99

quantile_over_time(0.99, probe_http_duration_seconds{job="blackbox-http-probe", phase="processing"}[30m])

TLS 握手耗时 P99

quantile_over_time(0.99, probe_http_duration_seconds{job="blackbox-http-probe", phase="tls"}[30m])

附录 B:Blackbox Exporter 配置示例(Prometheus 端)

以下展示如何在 prometheus.yml 中定义探测目标,是理解 job 与 instance 来源的关键。

scrape_configs:
  - job_name: 'blackbox-http-probe'
    metrics_path: /probe
    params:
      module: [http_2xx]   # 使用 Blackbox Exporter 中定义的 HTTP 模块
    static_configs:
      - targets:
          - https://charge.example.com    # 新能源充电桩云平台
          - https://mes.example.com       # 制造执行系统入口
          - https://oa.example.com
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target      # 将目标地址传给 Blackbox Exporter
      - source_labels: [__param_target]
        target_label: instance            # 保留原始 URL 作为 instance 标签
      - target_label: __address__
        replacement: blackbox-exporter.monitoring.svc:9115   # 指向 Blackbox Exporter 地址

附录 C:故障排查简明流程图

探测失败 (probe_success=0)
├─ 检查 probe_http_status_code
│   ├─ 返回 4xx → 客户端/权限问题(检查请求头、认证令牌)
│   ├─ 返回 5xx → 服务器应用错误(查看目标服务日志)
│   └─ 无返回 / 超时 → 网络或目标不可达
│       ├─ 从 Blackbox 节点 curl 目标 URL 测试
│       └─ 检查防火墙/安全组、DNS 解析
└─ 延迟高 (probe_duration_seconds P99 > 阈值)
    ├─ resolve 高 → DNS 故障
    ├─ connect 高 → 网络丢包/防火墙
    ├─ tls 高 → 证书/加密问题
    ├─ processing 高 → 后端应用/数据库瓶颈
    └─ transfer 高 → 响应体过大或带宽不足

最后更新:2026年5月27日← 更多「Prometheus」文章