5.3. Service Telemetry Framework 中的警报


您可以在 Alertmanager 中在 Prometheus 和警报路由中创建警报规则。Prometheus 服务器中的警报规则将警报发送到管理警报的 Alertmanager。Alertmanager 可以静默、禁止或聚合警报,并使用电子邮件、on-call 通知系统或聊天平台发送通知。

要创建警报,请完成以下步骤:

  1. 在 Prometheus 中创建警报规则。更多信息请参阅 第 5.3.1 节 “在 Prometheus 中创建警报规则”
  2. 在 Alertmanager 中创建警报路由。您可以通过两种方式创建警报路由:

其他资源

有关使用 Prometheus 和 Alertmanager 警报或通知的更多信息,请参阅 https://prometheus.io/docs/alerting/overview/

要查看可用于 Service Telemetry Framework (STF)的警报集合的示例,请参阅 https://github.com/infrawatch/service-telemetry-operator/tree/master/deploy/alerts

5.3.1. 在 Prometheus 中创建警报规则

Prometheus 评估警报规则来触发通知。如果规则条件返回空结果集,则条件为 false。否则,规则为 true,它会触发警报。

流程

  1. 登录 Red Hat OpenShift Container Platform。
  2. 进入 service-telemetry 命名空间:

    $ oc project service-telemetry
    Copy to Clipboard Toggle word wrap
  3. 创建包含警报规则的 PrometheusRule 对象。Prometheus Operator 将规则加载到 Prometheus 中:

    $ oc apply -f - <<EOF
    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      creationTimestamp: null
      labels:
        prometheus: default
        role: alert-rules
      name: prometheus-alarm-rules
      namespace: service-telemetry
    spec:
      groups:
        - name: ./openstack.rules
          rules:
            - alert: Collectd metrics receive rate is zero
              expr: rate(sg_total_collectd_msg_received_count[1m]) == 0 
    1
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    要更改规则,请编辑 expr 参数的值。
  4. 要验证 Operator 是否将规则加载到 Prometheus 中,请创建一个可访问 curl 的 pod:

    $ oc run curl --image=radial/busyboxplus:curl -i --tty
    Copy to Clipboard Toggle word wrap
  5. 运行 curl 命令访问 prometheus-operated 服务,以返回载入到内存的规则:

    [ root@curl:/ ]$ curl prometheus-operated:9090/api/v1/rules
    {"status":"success","data":{"groups":[{"name":"./openstack.rules","file":"/etc/prometheus/rules/prometheus-default-rulefiles-0/service-telemetry-prometheus-alarm-rules.yaml","rules":[{"state":"inactive","name":"Collectd metrics receive rate is zero","query":"rate(sg_total_collectd_msg_received_count[1m]) == 0","duration":0,"labels":{},"annotations":{},"alerts":[],"health":"ok","evaluationTime":0.000525886,"lastEvaluation":"2022-02-01T17:42:52.161007803Z","type":"alerting"}],"interval":30,"limit":0,"evaluationTime":0.000541524,"lastEvaluation":"2022-02-01T17:42:52.161000138Z"}]}}
    Copy to Clipboard Toggle word wrap
  6. 要验证输出是否显示加载到 PrometheusRule 对象的规则,例如,输出包含定义的 ./openstack.rules,退出 pod:

    [ root@curl:/ ]$ exit
    Copy to Clipboard Toggle word wrap
  7. 删除 curl pod 来清理环境:

    $ oc delete pod curl
    
    pod "curl" deleted
    Copy to Clipboard Toggle word wrap

5.3.2. 配置自定义警报

您可以在您在 第 5.3.1 节 “在 Prometheus 中创建警报规则” 中创建的 PrometheusRule 对象中添加自定义警报。

流程

  1. 使用 oc edit 命令:

    $ oc edit prometheusrules prometheus-alarm-rules
    Copy to Clipboard Toggle word wrap
  2. 编辑 PrometheusRules 清单。
  3. 保存并关闭清单。

其他资源

5.3.3. 在 Alertmanager 中创建标准警报路由

使用 Alertmanager 向外部系统发送警报,如电子邮件、IRC 或其他通知频道。Prometheus Operator 将 Alertmanager 配置作为 Red Hat OpenShift Container Platform secret 管理。默认情况下,Service Telemetry Framework (STF)部署会导致任何接收器的基本配置:

alertmanager.yaml: |-
  global:
    resolve_timeout: 5m
  route:
    group_by: ['job']
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 12h
    receiver: 'null'
  receivers:
  - name: 'null'
Copy to Clipboard Toggle word wrap

要使用 STF 部署自定义 Alertmanager 路由,您必须将 alertmanagerConfigManifest 参数传递给 Service Telemetry Operator,以生成由 Prometheus Operator 管理的更新 secret。

如果 alertmanagerConfigManifest 包含用于构造发送警报的标题和文本的自定义模板,请使用 base64 编码的配置部署 alertmanagerConfigManifest 的内容。更多信息请参阅 第 5.3.4 节 “在 Alertmanager 中创建带有模板模板的警报路由”

流程

  1. 登录 Red Hat OpenShift Container Platform。
  2. 进入 service-telemetry 命名空间:

    $ oc project service-telemetry
    Copy to Clipboard Toggle word wrap
  3. 为您的 STF 部署编辑 ServiceTelemetry 对象:

    $ oc edit stf default
    Copy to Clipboard Toggle word wrap
  4. 添加新参数 alertmanagerConfigManifestSecret 对象内容,以定义 Alertmanager 的 alertmanager.yaml 配置:

    注意

    此步骤加载 Service Telemetry Operator 管理的默认模板。要验证是否正确填充了更改,请更改值,返回 alertmanager-default secret,然后验证新值是否已加载到内存中。例如,将 global.resolve_timeout 参数的值从 5m 改为 10m

    apiVersion: infra.watch/v1beta1
    kind: ServiceTelemetry
    metadata:
      name: default
      namespace: service-telemetry
    spec:
      backends:
        metrics:
          prometheus:
            enabled: true
      alertmanagerConfigManifest: |
        apiVersion: v1
        kind: Secret
        metadata:
          name: 'alertmanager-default'
          namespace: 'service-telemetry'
        type: Opaque
        stringData:
          alertmanager.yaml: |-
            global:
              resolve_timeout: 10m
            route:
              group_by: ['job']
              group_wait: 30s
              group_interval: 5m
              repeat_interval: 12h
              receiver: 'null'
            receivers:
            - name: 'null'
    Copy to Clipboard Toggle word wrap
  5. 验证配置是否已应用到 secret:

    $ oc get secret alertmanager-default -o go-template='{{index .data "alertmanager.yaml" | base64decode }}'
    
    global:
      resolve_timeout: 10m
    route:
      group_by: ['job']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 12h
      receiver: 'null'
    receivers:
    - name: 'null'
    Copy to Clipboard Toggle word wrap
  6. 要验证配置是否已加载到 Alertmanager 中,请创建一个可访问 curl 的 pod:

    $ oc run curl --image=radial/busyboxplus:curl -i --tty
    Copy to Clipboard Toggle word wrap
  7. 针对 alertmanager-operated 服务运行 curl 命令,以检索 status 和 configYAML 内容,并验证提供的配置是否与 Alertmanager 中的配置匹配:

    [ root@curl:/ ]$ curl alertmanager-operated:9093/api/v1/status
    
    {"status":"success","data":{"configYAML":"...",...}}
    Copy to Clipboard Toggle word wrap
  8. 验证 configYAML 字段是否包含您预期的更改。
  9. 退出 pod:

    [ root@curl:/ ]$ exit
    Copy to Clipboard Toggle word wrap
  10. 要清理环境,请删除 curl pod:

    $ oc delete pod curl
    
    pod "curl" deleted
    Copy to Clipboard Toggle word wrap

其他资源

使用 Alertmanager 向外部系统发送警报,如电子邮件、IRC 或其他通知频道。Prometheus Operator 将 Alertmanager 配置作为 Red Hat OpenShift Container Platform secret 管理。默认情况下,Service Telemetry Framework (STF)部署会导致任何接收器的基本配置:

alertmanager.yaml: |-
  global:
    resolve_timeout: 5m
  route:
    group_by: ['job']
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 12h
    receiver: 'null'
  receivers:
  - name: 'null'
Copy to Clipboard Toggle word wrap

如果 alertmanagerConfigManifest 参数包含自定义模板,例如:构建发送警报的标题和文本,请使用 base64 编码的配置部署 alertmanagerConfigManifest 的内容。

流程

  1. 登录 Red Hat OpenShift Container Platform。
  2. 进入 service-telemetry 命名空间:

    $ oc project service-telemetry
    Copy to Clipboard Toggle word wrap
  3. 为您的 STF 部署编辑 ServiceTelemetry 对象:

    $ oc edit stf default
    Copy to Clipboard Toggle word wrap
  4. 要使用 STF 部署自定义 Alertmanager 路由,您必须将 alertmanagerConfigManifest 参数传递给 Service Telemetry Operator,这会导致 Prometheus Operator 管理的更新 secret:

    apiVersion: infra.watch/v1beta1
    kind: ServiceTelemetry
    metadata:
      name: default
      namespace: service-telemetry
    spec:
      backends:
        metrics:
          prometheus:
            enabled: true
      alertmanagerConfigManifest: |
        apiVersion: v1
        kind: Secret
        metadata:
          name: 'alertmanager-default'
          namespace: 'service-telemetry'
        type: Opaque
        data:
          alertmanager.yaml: Z2xvYmFsOgogIHJlc29sdmVfdGltZW91dDogMTBtCiAgc2xhY2tfYXBpX3VybDogPHNsYWNrX2FwaV91cmw+CnJlY2VpdmVyczoKICAtIG5hbWU6IHNsYWNrCiAgICBzbGFja19jb25maWdzOgogICAgLSBjaGFubmVsOiAjc3RmLWFsZXJ0cwogICAgICB0aXRsZTogfC0KICAgICAgICAuLi4KICAgICAgdGV4dDogPi0KICAgICAgICAuLi4Kcm91dGU6CiAgZ3JvdXBfYnk6IFsnam9iJ10KICBncm91cF93YWl0OiAzMHMKICBncm91cF9pbnRlcnZhbDogNW0KICByZXBlYXRfaW50ZXJ2YWw6IDEyaAogIHJlY2VpdmVyOiAnc2xhY2snCg==
    Copy to Clipboard Toggle word wrap
  5. 验证配置是否已应用到 secret:

    $ oc get secret alertmanager-default -o go-template='{{index .data "alertmanager.yaml" | base64decode }}'
    
    global:
      resolve_timeout: 10m
      slack_api_url: <slack_api_url>
    receivers:
      - name: slack
        slack_configs:
        - channel: #stf-alerts
          title: |-
            ...
          text: >-
            ...
    route:
      group_by: ['job']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 12h
      receiver: 'slack'
    Copy to Clipboard Toggle word wrap
  6. 要验证配置是否已加载到 Alertmanager,请创建一个可访问 curl 命令的 pod:

    $ oc run curl --image=radial/busyboxplus:curl -i --tty
    Copy to Clipboard Toggle word wrap
  7. 针对 alertmanager-operated 服务运行 curl 命令,以检索 status 和 configYAML 内容,并验证提供的配置是否与 Alertmanager 中的配置匹配:

    [ root@curl:/ ]$ curl alertmanager-operated:9093/api/v1/status
    
    {"status":"success","data":{"configYAML":"...",...}}
    Copy to Clipboard Toggle word wrap
  8. 验证 configYAML 字段是否包含您预期的更改。
  9. 退出 pod:

    [ root@curl:/ ]$ exit
    Copy to Clipboard Toggle word wrap
  10. 要清理环境,请删除 curl pod:

    $ oc delete pod curl
    
    pod "curl" deleted
    Copy to Clipboard Toggle word wrap

其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat