目 录CONTENT

文章目录

PrometheusRule 与 Blackbox Exporter 集成告警配置指南

Administrator
2025-11-18 / 0 评论 / 0 点赞 / 9 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

PrometheusRule 与 Blackbox Exporter 集成告警配置指南

在现代云原生监控体系中,仅仅知道服务是否可用是不够的,更重要的是在服务出现问题时能够及时收到通知并快速响应。PrometheusRule 是 kube-prometheus-stack 中用于定义告警规则和记录规则的自定义资源,通过与 Blackbox Exporter 结合,我们可以实现对网络服务可用性的实时监控和自动告警。

一、技术背景

Blackbox Exporter 是 Prometheus 生态系统中的重要组件,专门用于黑盒监控,即从外部探测目标服务的可用性。它支持多种探测协议,包括 HTTP、HTTPS、TCP 等,可以监控任何可以通过网络访问的目标。

然而,Blackbox Exporter 本身只负责收集和暴露探测指标,不会主动发送告警通知。为了实现自动告警功能,我们需要结合 PrometheusRule 来定义告警规则,并通过 Alertmanager 进行告警通知的处理和分发。

通过Notification Manager,PrometheusRule 可以与外部平台(如钉钉、企业微信、邮件等)进行集成,实现对告警的实时通知。

1.1 核心组件

组件作用
Blackbox Exporter执行探测任务并收集指标
Probe定义探测目标和策略
PrometheusRule定义告警规则和记录规则
Prometheus评估告警规则并发送告警
Alertmanager处理告警通知

1.2 工作原理

+----------------+       +------------------+       +------------------+
|   Probe资源     |       | Blackbox Exporter |       |   Prometheus     |
| 定义探测目标    |------>|  执行探测任务     |------>|  收集指标数据     |
+----------------+       +------------------+       |                  |
                                                     |                  |
                                                     |  +-------------+ |
                                                     |  |PrometheusRule| |
                                                     |  |定义告警规则  | |
                                                     |  +-------------+ |
                                                     +------------------+
                                                              |
                                                              v
                                                     +------------------+
                                                     |  Alertmanager    |
                                                     |  发送告警通知     |
                                                     +------------------+
                                                              |
                                                              v
                                                     +------------------+
                                                     | Notification     |
                                                     | Manager          |
                                                     | 发送到具体平台    |
                                                     | (钉钉、企业微信、邮件等)|
                                                     +------------------+

二、关键监控指标

Blackbox Exporter 提供了丰富的监控指标,其中最重要的几个指标用于判断服务的可用性:

2.1 核心指标说明

指标名称类型说明告警用途
probe_successGauge探测是否成功 (1=成功, 0=失败)判断服务是否存活
probe_duration_secondsGauge探测持续时间(秒)判断服务响应速度
probe_http_status_codeGaugeHTTP状态码判断HTTP响应状态
probe_ssl_earliest_cert_expiryGauge最早过期证书时间戳判断SSL证书有效期

三、PrometheusRule 配置详解

PrometheusRule 是 Prometheus Operator 提供的自定义资源,用于定义告警规则和记录规则。通过定义合适的告警规则,我们可以在服务出现问题时及时收到通知。

3.1 基本结构

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: blackbox-exporter-rules
  namespace: monitoring
  labels:
    app: blackbox-exporter
spec:
  groups:
  - name: blackbox-exporter.rules
    rules:
    # 告警规则定义

3.2 核心字段说明

字段说明可选值默认值
apiVersionAPI版本monitoring.coreos.com/v1-
kind资源类型PrometheusRule-
metadata.name规则名称任意合法名称-
metadata.namespace命名空间有效的命名空间名称-
metadata.labels标签键值对-
spec.groups规则组规则组数组-
spec.groups[].name规则组名称任意合法名称-
spec.groups[].rules规则列表规则数组-

四、告警规则配置实践

根据实际使用的配置文件,我们的告警规则如下:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: blackbox-exporter-rules
spec:
  groups:
  - name: blackbox-exporter.rules
    rules:
    - alert: website_down
      expr: probe_success == 0
      for: 1m
      labels:
        severity: critical  # 告警级别
        receiver: prometheus # 定义告警接收者
        alerttype: howlaisi # 这个要和alertmanager联动。
      annotations:
        summaryCn: "网站{{ $labels.instance }}挂掉了"
        summary: "website {{ $labels.instance }} is down"
        description: "Target {{ $labels.instance }} (job {{ $labels.job }}) is down and not responding to probes."

4.1 告警规则字段详解

字段说明示例值
alert告警名称website_down
expr告警表达式probe_success == 0
for持续时间阈值1m
labels告警标签severity: critical
annotations告警注解summary: "website is down"

4.2 标签说明

在我们的实际配置中,使用了以下标签:

标签说明
severity告警严重程度critical
receiver告警接收者prometheus
alerttype告警类型howlaisi

这些标签将与 Alertmanager 的路由规则配合使用,确保告警能正确发送到指定的接收者。

4.3 注解说明

配置中包含以下注解:

注解说明内容
summaryCn中文摘要网站{{ $labels.instance }}挂掉了
summary英文摘要website {{ $labels.instance }} is down
description详细描述Target {{ labels.instance }} (job {{ labels.job }}) is down and not responding to probes.

五、部署与验证

5.1 部署规则

将上述配置保存为up-rule.yaml 文件,同时确保 kustomization.yaml 包含该规则文件,然后使用 argocd 部署

resources:
  - up-rule.yaml

5.2 验证规则

部署后,可以通过以下方式验证规则是否生效:

  1. 检查规则是否被正确加载:
# 根据实际部署情况修改命名空间参数
kubectl get prometheusrules -n <实际部署的命名空间>
  1. 在 Prometheus UI 中查看规则:
    • 访问 Prometheus Web UI
    • 导航到 "Alerts" 页面
    • 确认告警规则已显示在列表中
      website_down
  2. 模拟故障验证告警:
    • 暂时关闭某个被监控的服务
    • 等待告警触发时间(根据 for 参数)
    • 检查 Alertmanager 是否收到告警
      alertmanager_website_down.png

六、Alertmanager 配置联动

为了确保告警能正确发送,Alertmanager 需要配置相应的路由规则来处理带有 alerttype: howlaisi 标签的告警,.*代表匹配所有字符串,由于当前有kubesphere自带的规则,后续可以按照格式匹配alerttype: howlaisi,只发自定义的告警。
alertmanager_route.png

6.1 路由配置示例

route:
  group_by:
  - namespace
  - alertname
  - rule_id
  group_interval: 5m
  group_wait: 30s
  receiver: Default
  repeat_interval: 12h
  routes:
  # ... 其他路由规则
  - match_re:
      alerttype: .*
    receiver: prometheus

这样,所有带有 alerttype 标签的告警都会被发送到 prometheus 接收器,然后通过 webhook 转发给 Notification Manager 进行处理。

七、告警调优建议

7.1 合理设置告警阈值

  1. 告警触发时间:根据服务的重要性和SLA要求设置合适的 for 时间,避免因短暂网络波动导致误报
  2. 响应时间阈值:根据业务特点设置合理的响应时间阈值
  3. 证书过期时间:提前7-30天告警,确保有足够时间更换证书

7.2 告警分组与标签

  1. severity标签:使用 critical、warning 等标签区分告警严重程度
  2. 服务标签:为不同服务添加特定标签,便于告警分类和路由
  3. 环境标签:区分生产、测试等不同环境的告警

7.3 告警抑制

在某些情况下,可能需要设置告警抑制规则,例如:

  • 当服务完全不可达时,抑制响应时间过长的告警
  • 当SSL证书即将过期时,抑制服务不可达的告警(因为可能是证书问题导致)

八、常见问题与解决方案

8.1 告警规则未生效

问题现象:部署了PrometheusRule,但在Prometheus UI中看不到规则

根本原因
Prometheus Operator 不会自动采集所有命名空间中的 PrometheusRule 资源。只有当 Prometheus 实例的配置明确指定要监控包含 PrometheusRule 的命名空间时,这些规则才会被加载和执行。

换句话说,虽然通过以下类似以下命令成功创建了 PrometheusRule(张师傅用的argocd):

kubectl apply -f up-rule.yaml

但如果 Prometheus 的 CRD(Prometheus 资源)没有配置去监控这个 PrometheusRule 所在的命名空间,Prometheus 根本不会加载这些规则。

逐步排查与修正

  1. 检查 Prometheus 实例是否配置了 ruleNamespaceSelector
    执行以下命令查看 Prometheus 配置:

    kubectl -n kubesphere-monitoring-system get prometheus k8s -o yaml
    

    在输出中找到类似以下的配置:

    spec:
      ruleNamespaceSelector: {}
      ruleSelector:
        matchLabels:
          prometheus: k8s
          role: alert-rules
    

    该段表示会加载所有命名空间下的有 role: alert-rules以及 prometheus: k8s 标签的 PrometheusRule 对象。

解决方式

修改 Prometheus CRD 配置以监控正确的命名空间和标签:

spec:
  ruleNamespaceSelector: {}
  ruleSelector:
    matchLabels:
      prometheus: k8s
      role: alert-rules

如果需要监控所有命名空间中的规则,可以配置:

spec:
  ruleNamespaceSelector: {}
  ruleSelector: {}

8.2 告警频繁触发

问题现象:告警频繁触发和恢复,造成告警风暴

解决方案

  1. 调整 for 参数,增加触发时间
  2. 优化探测间隔,避免过于频繁的探测
  3. 设置合理的告警抑制规则

8.3 告警通知未收到

问题现象:Prometheus显示告警已触发,但未收到通知

解决方案

  1. 检查Alertmanager配置是否正确
  2. 确认告警路由规则是否匹配
  3. 检查通知渠道(如邮件、Slack等)配置是否正确

总结

通过 PrometheusRule 与 Blackbox Exporter 的集成,我们可以构建一个完整的网络服务监控和告警体系。合理的告警规则配置能够帮助我们及时发现服务问题,提高系统的可靠性和稳定性。

关键要点总结:

  1. PrometheusRule 是定义告警规则的核心资源
  2. probe_success 是判断服务存活的关键指标
  3. 合理设置告警阈值和触发时间,避免误报和漏报
  4. 结合 Alertmanager 实现多样化的告警通知

在实际应用中,建议根据具体业务需求和SLA要求,调整告警规则的参数和阈值,以达到最佳的监控效果。

参考文档

  1. Prometheus Operator 官方文档
  2. Blackbox Exporter GitHub 仓库
  3. Prometheus 官方文档
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区