5.3. Service Telemetry Framework 中的警报
您可以在 Alertmanager 中在 Prometheus 和警报路由中创建警报规则。Prometheus 服务器中的警报规则将警报发送到管理警报的 Alertmanager。Alertmanager 可以静默、禁止或聚合警报,并使用电子邮件、on-call 通知系统或聊天平台发送通知。
要创建警报,请完成以下步骤:
- 在 Prometheus 中创建警报规则。更多信息请参阅 第 5.3.1 节 “在 Prometheus 中创建警报规则”。
在 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,它会触发警报。
流程
- 登录 Red Hat OpenShift Container Platform。
进入
service-telemetry命名空间:$ oc project service-telemetry创建包含警报规则的
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]) == 01 EOF- 1
- 要更改规则,请编辑
expr参数的值。
要验证 Operator 是否将规则加载到 Prometheus 中,请创建一个可访问
curl的 pod:$ oc run curl --image=radial/busyboxplus:curl -i --tty运行
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"}]}}要验证输出是否显示加载到
PrometheusRule对象的规则,例如,输出包含定义的./openstack.rules,退出 pod:[ root@curl:/ ]$ exit删除
curlpod 来清理环境:$ oc delete pod curl pod "curl" deleted
5.3.2. 配置自定义警报 复制链接链接已复制到粘贴板!
您可以在您在 第 5.3.1 节 “在 Prometheus 中创建警报规则” 中创建的 PrometheusRule 对象中添加自定义警报。
流程
使用
oc edit命令:$ oc edit prometheusrules prometheus-alarm-rules-
编辑
PrometheusRules清单。 - 保存并关闭清单。
其他资源
- 有关如何配置警报规则的更多信息,请参阅 https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/。
- 有关 PrometheusRules 对象的更多信息,请参阅 https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/alerting.md
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'
要使用 STF 部署自定义 Alertmanager 路由,您必须将 alertmanagerConfigManifest 参数传递给 Service Telemetry Operator,以生成由 Prometheus Operator 管理的更新 secret。
如果 alertmanagerConfigManifest 包含用于构造发送警报的标题和文本的自定义模板,请使用 base64 编码的配置部署 alertmanagerConfigManifest 的内容。更多信息请参阅 第 5.3.4 节 “在 Alertmanager 中创建带有模板模板的警报路由”。
流程
- 登录 Red Hat OpenShift Container Platform。
进入
service-telemetry命名空间:$ oc project service-telemetry为您的 STF 部署编辑
ServiceTelemetry对象:$ oc edit stf default添加新参数
alertmanagerConfigManifest和Secret对象内容,以定义 Alertmanager 的alertmanager.yaml配置:注意此步骤加载 Service Telemetry Operator 管理的默认模板。要验证是否正确填充了更改,请更改值,返回
alertmanager-defaultsecret,然后验证新值是否已加载到内存中。例如,将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'验证配置是否已应用到 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'要验证配置是否已加载到 Alertmanager 中,请创建一个可访问
curl的 pod:$ oc run curl --image=radial/busyboxplus:curl -i --tty针对
alertmanager-operated服务运行curl命令,以检索 status 和configYAML内容,并验证提供的配置是否与 Alertmanager 中的配置匹配:[ root@curl:/ ]$ curl alertmanager-operated:9093/api/v1/status {"status":"success","data":{"configYAML":"...",...}}-
验证
configYAML字段是否包含您预期的更改。 退出 pod:
[ root@curl:/ ]$ exit要清理环境,请删除
curlpod:$ oc delete pod curl pod "curl" deleted
其他资源
- 如需有关 Red Hat OpenShift Container Platform secret 和 Prometheus operator 的更多信息,请参阅有关 警报的 Prometheus 用户指南。
5.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 的内容。
流程
- 登录 Red Hat OpenShift Container Platform。
进入
service-telemetry命名空间:$ oc project service-telemetry为您的 STF 部署编辑
ServiceTelemetry对象:$ oc edit stf default要使用 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==验证配置是否已应用到 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'要验证配置是否已加载到 Alertmanager,请创建一个可访问
curl命令的 pod:$ oc run curl --image=radial/busyboxplus:curl -i --tty针对
alertmanager-operated服务运行curl命令,以检索 status 和configYAML内容,并验证提供的配置是否与 Alertmanager 中的配置匹配:[ root@curl:/ ]$ curl alertmanager-operated:9093/api/v1/status {"status":"success","data":{"configYAML":"...",...}}-
验证
configYAML字段是否包含您预期的更改。 退出 pod:
[ root@curl:/ ]$ exit要清理环境,请删除
curlpod:$ oc delete pod curl pod "curl" deleted
其他资源
- 如需有关 Red Hat OpenShift Container Platform secret 和 Prometheus operator 的更多信息,请参阅有关 警报的 Prometheus 用户指南。