3.5. 为核心平台监控配置警报和通知
您可以配置本地或远程 Alertmanager 实例,将警报从 Prometheus 路由到端点接收器。您还可以将自定义标签附加到所有时间序列和警报,以添加有用的元数据信息。
3.5.1. 配置外部 Alertmanager 实例
OpenShift Container Platform 监控堆栈包含一个本地 Alertmanager 实例,用于从 Prometheus 路由警报。
您可以添加外部 Alertmanager 实例来路由 OpenShift Container Platform 核心项目的警报。
如果您为多个集群添加相同的外部 Alertmanager 配置,并且为每个集群禁用本地实例,则可以使用单个外部 Alertmanager 实例管理多个集群的警报路由。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 -
您已创建
cluster-monitoring-config
ConfigMap
对象。 -
已安装 OpenShift CLI(
oc
)。
流程
编辑
openshift-monitoring
项目中的cluster-monitoring-config
配置映射:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
使用
data/config.yaml/prometheusK8s
下的配置详情添加一个additionalAlertmanagerConfigs
部分:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: additionalAlertmanagerConfigs: - <alertmanager_specification> 1
- 1
- 将
<alertmanager_specification
> 替换为额外的 Alertmanager 实例的身份验证和其他配置详情。目前支持的身份验证方法有 bearer 令牌 (bearerToken
) 和客户端 TLS (tlsConfig
)。
以下示例配置映射使用带有客户端 TLS 身份验证的 bearer 令牌为 Prometheus 配置额外的 Alertmanager:
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: additionalAlertmanagerConfigs: - scheme: https pathPrefix: / timeout: "30s" apiVersion: v1 bearerToken: name: alertmanager-bearer-token key: token tlsConfig: key: name: alertmanager-tls key: tls.key cert: name: alertmanager-tls key: tls.crt ca: name: alertmanager-tls key: tls.ca staticConfigs: - external-alertmanager1-remote.com - external-alertmanager1-remote2.com
- 保存文件以使改变生效。受新配置影响的 Pod 会自动重新部署。
3.5.1.1. 禁用本地 Alertmanager
在 OpenShift Container Platform 监控堆栈的 openshift-monitoring
项目中默认启用从 Prometheus 实例路由警报的本地 Alertmanager。
如果您不需要本地 Alertmanager,可以通过在 openshift-monitoring
项目中配置 cluster-monitoring-config
配置映射来禁用它。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 -
您已创建了
cluster-monitoring-config
配置映射。 -
已安装 OpenShift CLI(
oc
)。
流程
编辑
openshift-monitoring
项目中的cluster-monitoring-config
配置映射:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
data/config.yaml
下为alertmanagerMain
组件添加enabled: false
:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: enabled: false
- 保存文件以使改变生效。应用更改时,Alertmanager 实例会自动禁用。
其他资源
- Alertmanager (Prometheus 文档)
- 以管理员身份管理警报
3.5.2. 为 Alertmanager 配置 secret
OpenShift Container Platform 监控堆栈包括 Alertmanager,它将警报从 Prometheus 路由到端点接收器。如果您需要通过接收器进行身份验证以便 Alertmanager 能够向它发送警报,您可以将 Alertmanager 配置为使用包含接收器身份验证凭据的 secret。
例如,您可以将 Alertmanager 配置为使用 secret 与需要由私有证书颁发机构 (CA) 发布的证书的端点接收器进行身份验证。您还可以将 Alertmanager 配置为使用 secret 与需要用于基本 HTTP 身份验证密码文件的接收器进行身份验证。在这两种情况下,身份验证详情都包含在 Secret
对象中,而不是包括在 ConfigMap
对象中。
3.5.2.1. 在 Alertmanager 配置中添加 secret
您可以通过编辑 openshift-monitoring
项目中的 cluster-monitoring-config
配置映射,将 secret 添加到 Alertmanager 配置中。
将 secret 添加到配置映射后,secret 作为一个卷挂载到 Alertmanager Pod 的 alertmanager
容器中的 /etc/alertmanager/secrets/<secret_name
的卷中。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 -
您已创建了
cluster-monitoring-config
配置映射。 -
您已创建了要在
openshift-monitoring
项目中的 Alertmanager 中配置的 secret。 -
已安装 OpenShift CLI(
oc
)。
流程
编辑
openshift-monitoring
项目中的cluster-monitoring-config
配置映射:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
data/config.yaml/alertmanagerMain
下添加一个secrets:
部分,并具有以下配置:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: secrets: 1 - <secret_name_1> 2 - <secret_name_2>
以下示例配置映射设置将 Alertmanager 配置为使用名为
test-secret-basic-auth
和test-secret-api-token
的两个Secret
对象:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: secrets: - test-secret-basic-auth - test-secret-api-token
- 保存文件以使改变生效。新的配置会被自动应用。
3.5.3. 在时间序列和警报中附加额外标签
您可以使用 Prometheus 的外部标签功能,将自定义标签附加到离开 Prometheus 的所有时间序列和警报。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。 -
您已创建
cluster-monitoring-config
ConfigMap
对象。 -
已安装 OpenShift CLI(
oc
)。
流程
编辑
openshift-monitoring
项目中的cluster-monitoring-config
配置映射:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
data/config.yaml
下定义您要为每个指标添加的标签:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: externalLabels: <key>: <value> 1
- 1
- 将
<key>: <
;value> 替换为键值对,其中 <key
> 是新标签的唯一名称,<value&
gt; 是它的值。
警告-
不要使用
prometheus
或prometheus_replica
作为键的名称,因为它们是保留的并会被覆盖。 -
不要使用
cluster
或managed_cluster
作为密钥名称。使用它们可能会导致您无法在开发人员仪表板中看到数据的问题。
例如,要将关于区域和环境的元数据添加到所有时间序列和警报中,请使用以下示例:
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: externalLabels: region: eu environment: prod
- 保存文件以使改变生效。受新配置影响的 Pod 会自动重新部署。
其他资源
3.5.4. 配置警报通知
在 OpenShift Container Platform 4.16 中,您可以在 Alerting UI 中查看触发警报。您可以通过配置警报接收器,将 Alertmanager 配置为发送有关默认平台警报的通知。
Alertmanager 默认不会发送通知。强烈建议您通过 web 控制台或通过 alertmanager-main
secret 配置警报接收器来接收通知。
其他资源
- 将通知发送到外部系统
- PagerDuty (PagerDuty 官方站点)
- Prometheus Integration Guide (PagerDuty 官方站点)
- 监控组件的支持版本列表
- 为用户定义的项目启用警报路由
3.5.4.1. 为默认平台警报配置警报路由
您可以将 Alertmanager 配置为发送通知。通过编辑 openshift-monitoring
命名空间中的 alertmanager-main
secret 中的默认配置来自定义 Alertmanager 如何发送通知有关默认平台警报的通知。
OpenShift Container Platform Alertmanager 配置中也支持支持上游 Alertmanager 的所有功能。要检查受支持的上游 Alertmanager 版本的所有配置选项,请参阅 Alertmanager 配置 (Prometheus 文档)。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。
流程
打开 Alertmanager YAML 配置文件:
通过 CLI 打开 Alertmanager 配置:
将当前活跃的 Alertmanager 配置从
alertmanager-main
secret 输出到alertmanager.yaml
文件中:$ oc -n openshift-monitoring get secret alertmanager-main --template='{{ index .data "alertmanager.yaml" }}' | base64 --decode > alertmanager.yaml
-
打开
alertmanager.yaml
文件。
从 OpenShift Container Platform Web 控制台打开 Alertmanager 配置:
-
进入 web 控制台的 Administration
Cluster Settings Configuration Alertmanager YAML 页面。
-
进入 web 控制台的 Administration
通过更新 YAML 中的参数来编辑 Alertmanager 配置:
global: resolve_timeout: 5m route: group_wait: 30s 1 group_interval: 5m 2 repeat_interval: 12h 3 receiver: default routes: - matchers: - "alertname=Watchdog" repeat_interval: 2m receiver: watchdog - matchers: - "service=<your_service>" 4 routes: - matchers: - <your_matching_rules> 5 receiver: <receiver> 6 receivers: - name: default - name: watchdog - name: <receiver> <receiver_configuration> 7
重要-
使用
matchers
键名称来指示警报要与节点匹配的匹配者。不要使用match
或match_re
键名称,它们都已弃用,并计划在以后的发行版本中删除。 如果您定义了禁止规则,请使用以下密钥名称:
-
target_matchers
: 表示目标匹配器 -
source_matchers
: 用于指示源匹配器
不要使用
target_match
,target_match_re
,source_match
, 或source_match_re
键名称,这些名称已弃用,并计划在以后的发行版本中删除。-
以下 Alertmanager 配置示例将 PagerDuty 配置为警报接收器:
global: resolve_timeout: 5m route: group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: default routes: - matchers: - "alertname=Watchdog" repeat_interval: 2m receiver: watchdog - matchers: - "service=example-app" routes: - matchers: - "severity=critical" receiver: team-frontend-page receivers: - name: default - name: watchdog - name: team-frontend-page pagerduty_configs: - service_key: "<your_key>"
使用这个配置,由
example-app
服务触发critical
严重性等级的警报将通过team-frontend-page
接收器发送。通常情况下,这些类型的警报会传给个人或关键响应团队。-
使用
应用文件中的新配置:
要从 CLI 应用更改,请运行以下命令:
$ oc -n openshift-monitoring create secret generic alertmanager-main --from-file=alertmanager.yaml --dry-run=client -o=yaml | oc -n openshift-monitoring replace secret --filename=-
- 要从 OpenShift Container Platform Web 控制台应用更改,请点 Save。
3.5.4.2. 使用 OpenShift Container Platform Web 控制台配置警报路由
您可以通过 OpenShift Container Platform Web 控制台配置警报路由,以确保了解集群出现的重要问题。
OpenShift Container Platform Web 控制台提供比 alertmanager-main
secret 配置警报路由的设置更少。要通过访问更多配置设置配置警报路由,请参阅"配置默认平台警报的警报路由"。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户身份访问集群。
流程
在 Administrator 视角中,进入 Administration
Cluster Settings Configuration Alertmanager。 注意或者,您还可以通过 notification drawer 访问同一页面。选择 OpenShift Container Platform Web 控制台右上角的铃铛图标,并在 AlertmanagerReceiverNotConfigured 警报中选择 Configure。
- 在页面的 Receivers 部分中,点 Create Receiver。
- 在 Create Receiver 表单中,添加 Receiver Name,然后从列表中选择 Receiver Type。
编辑接收器配置:
对于 PagerDuty 接收器:
- 选择集成类型并添加 PagerDuty 集成密钥。
- 添加 PagerDuty 安装的 URL。
- 如果要编辑客户端和事件详情或严重性规格,请点 Show advanced configuration。
对于 Webhook 接收器:
- 添加将 HTTP POST 请求发送到的端点。
- 如果要编辑将已解析的警报发送给接收器的默认选项,请点 Show advanced configuration。
对于电子邮件接收器:
- 添加要将通知发送到的电子邮件地址。
- 添加 SMTP 配置详情,包括发送通知的地址、用来发送电子邮件的智能主机和端口号、SMTP 服务器的主机名以及验证详情。
- 选择是否需要 TLS。
- 如果要将默认选项编辑为不向接收器发送已解析的警报,或编辑电子邮件通知正文配置,请点 Show advanced configuration。
对于 Slack 接收器:
- 添加 Slack Webhook 的 URL。
- 添加要将通知发送到的 Slack 频道或用户名。
- 如果要将默认选项编辑为不向接收器发送已解析的警报,或编辑图标和用户名配置,请选择 Show advanced configuration。您还可以选择是否查找并链接频道名称和用户名。
默认情况下,如果触发的警报带有与所有选择器匹配的标签,将被发送到接收器。如果您希望触发的警报在发送到接收器前完全匹配的标签值,请执行以下步骤:
- 在表单的 Routing Labels 部分中添加路由标签名称和值。
- 点 Add label 来添加更多路由标签。
- 点 Create 创建接收器。
3.5.4.3. 为默认平台警报和用户定义的警报配置不同的警报接收器
您可以为默认平台警报和用户定义的警报配置不同的警报接收器,以确保以下结果:
- 所有默认平台警报都发送到团队拥有的接收器,以收取这些警报。
- 所有用户定义的警报都发送到另一个接收器,以便团队只能专注于平台警报。
您可以使用 Cluster Monitoring Operator 添加到所有平台警报的 openshift_io_alert_source="platform"
标签来实现此目的:
-
使用
openshift_io_alert_source="platform"
matcher 来匹配默认平台警报。 -
使用
openshift_io_alert_source!="platform"
或'openshift_io_alert_source=""
匹配程序来匹配用户定义的警报。
如果您启用了专用于用户定义的警报的 Alertmanager 实例,则此配置不适用。