搜索

6.3. Service Telemetry Framework 中的警报

download PDF

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

要创建警报,请完成以下任务:

  1. 在 Prometheus 中创建警报规则。更多信息请参阅 第 6.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

6.3.1. 在 Prometheus 中创建警报规则

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

流程

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

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

    $ oc apply -f - <<EOF
    apiVersion: monitoring.rhobs/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
    EOF

    要更改规则,请编辑 expr 参数的值。

  4. 要验证 Operator 是否已将规则加载到 Prometheus 中,请使用基本身份验证针对 default-prometheus-proxy 路由运行 curl 命令:

    $ curl -k -H "Authorization: Bearer $(oc create token stf-prometheus-reader)" https://$(oc get route default-prometheus-proxy -ogo-template='{{ .spec.host }}')/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 count is zero","query":"rate(sg_total_collectd_msg_received_count[1m]) == 0","duration":0,"labels":{},"annotations":{},"alerts":[],"health":"ok","evaluationTime":0.00034627,"lastEvaluation":"2021-12-07T17:23:22.160448028Z","type":"alerting"}],"interval":30,"evaluationTime":0.000353787,"lastEvaluation":"2021-12-07T17:23:22.160444017Z"}]}}

6.3.2. 配置自定义警报

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

流程

  1. 使用 oc edit 命令:

    $ oc edit prometheusrules.monitoring.rhobs prometheus-alarm-rules
  2. 编辑 PrometheusRules 清单。
  3. 保存并关闭清单。

其他资源

6.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'

要使用 STF 部署自定义 Alertmanager 路由,您必须将 alertmanagerConfigManifest 参数添加到生成由 Prometheus Operator 管理的 Service Telemetry Operator 中。

注意

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

流程

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

    $ oc project service-telemetry
  3. 编辑 STF 部署的 ServiceTelemetry 对象:

    $ oc edit stf default
  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'
  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'
  6. 针对 alertmanager-proxy 服务运行 prometheus pod 中的 wget 命令,以检索状态和 configYAML 内容,并验证提供的配置是否与 Alertmanager 中的配置匹配:

    $ oc exec -it prometheus-default-0 -c prometheus -- sh -c "wget --header \"Authorization: Bearer \$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)\" https://default-alertmanager-proxy:9095/api/v1/status -q -O -"
    
    {"status":"success","data":{"configYAML":"...",...}}
  7. 验证 configYAML 字段是否包含您预期的更改。

其他资源

6.3.4. 在 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'

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

流程

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

    $ oc project service-telemetry
  3. 在名为 alertmanager.yaml 的文件中创建所需的 alertmanager 配置,例如:

    $ cat > alertmanager.yaml <<EOF
    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'
    EOF
  4. 生成配置清单,并将其添加到 STF 部署的 ServiceTelemetry 对象中:

    $ CONFIG_MANIFEST=$(oc create secret --dry-run=client generic alertmanager-default --from-file=alertmanager.yaml -o json)
    $ oc patch stf default --type=merge -p '{"spec":{"alertmanagerConfigManifest":'"$CONFIG_MANIFEST"'}}'
  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'
  6. 针对 alertmanager-proxy 服务运行 prometheus pod 中的 wget 命令,以检索状态和 configYAML 内容,并验证提供的配置是否与 Alertmanager 中的配置匹配:

    $ oc exec -it prometheus-default-0 -c prometheus -- /bin/sh -c "wget --header \"Authorization: Bearer \$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)\" https://default-alertmanager-proxy:9095/api/v1/status -q -O -"
    
    {"status":"success","data":{"configYAML":"...",...}}
  7. 验证 configYAML 字段是否包含您预期的更改。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.