6.3. Service Telemetry Framework 中的警报
您可以在 Alertmanager 中的 Prometheus 和警报路由中创建警报规则。Prometheus 服务器中的警报规则将警报发送到管理警报的 Alertmanager。Alertmanager 可以静默、禁止或聚合警报,并使用电子邮件、调用通知系统或聊天平台发送通知。
要创建警报,请完成以下任务:
- 在 Prometheus 中创建警报规则。更多信息请参阅 第 6.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
6.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.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
参数的值。要验证 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
对象中。
流程
使用
oc edit
命令:$ oc edit prometheusrules.monitoring.rhobs 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
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 中创建带有模板模板的警报路由”。
流程
- 登录到 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-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'
验证配置是否已应用到 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-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":"...",...}}
-
验证
configYAML
字段是否包含您预期的更改。
其他资源
- 如需有关 Red Hat OpenShift Container Platform secret 和 Prometheus operator 的更多信息,请参阅有关 警报的 Prometheus 用户指南。
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
的内容。
流程
- 登录到 Red Hat OpenShift Container Platform。
进入
service-telemetry
命名空间:$ oc project service-telemetry
在名为 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
生成配置清单,并将其添加到 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"'}}'
验证配置是否已应用到 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-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":"...",...}}
-
验证
configYAML
字段是否包含您预期的更改。
其他资源
- 如需有关 Red Hat OpenShift Container Platform secret 和 Prometheus operator 的更多信息,请参阅有关 警报的 Prometheus 用户指南。