1.4. 定制可观察性
以下部分介绍了对可观察性服务所收集的数据进行自定义、管理和查看的信息。
使用 must-gather 命令收集有关为可观察性资源创建的新信息的日志。如需更多信息,请参阅故障排除文档中的 Must-gather 部分。
1.4.1. 创建自定义规则 复制链接链接已复制到粘贴板!
通过在可观察性资源中添加 Prometheus 记录规则和 警报规则,为可观察性安装创建自定义规则。如需更多信息,请参阅 Prometheus 配置。
- 记录规则可让您根据需要预先计算或计算昂贵的表达式。结果保存为一组新的时间序列。
- 通过警报规则,您可以根据如何将警报发送到外部服务来指定警报条件。
使用 Prometheus 定义自定义规则来创建警报条件,并将通知发送到外部消息服务。注:当您更新自定义规则时,observability-thanos-rule pod 会自动重启。
在 open-cluster-management-observability 命名空间中创建一个名为 thanos-ruler-custom-rules 的 ConfigMap。键必须被命名为 custom_rules.yaml,如下例所示。您可以在配置中创建多个规则。
默认情况下,开箱即用的警报规则在
open-cluster-management-observability命名空间中的thanos-ruler-default-rulesConfigMap 中定义。例如,您可以创建一个自定义警报规则,在 CPU 使用量超过了您定义的值时通知您。您的 YAML 可能类似以下内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以在
thanos-ruler-custom-rulesConfigMap 中创建自定义记录规则。例如,您可以创建一个记录规则,让您可以获取 pod 的容器内存缓存的总和。您的 YAML 可能类似以下内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注:如果这是第一个新的自定义规则,它会被立即创建。对于 ConfigMap 的更改,会自动重新加载配置。由于
observability-thanos-rulersidecar 中的config-reload,所以会重新加载配置。
要验证警报规则是否正常工作,启动 Grafana 仪表板,进入 Explore 页面并查询 ALERTS。只有启动警报时,Grafana 才会在 Grafana 中提供警报。
1.4.2. 配置 AlertManager 复制链接链接已复制到粘贴板!
集成外部消息工具,如 email、Slack 和 PagerDuty 以接收来自 AlertManager 的通知。您必须覆盖 open-cluster-management-observability 命名空间中的 alertmanager-config secret 来添加集成,并为 AlertManager 配置路由。完成以下步骤以更新自定义接收器规则:
从
alertmanager-configsecret 中提取数据。运行以下命令:oc -n open-cluster-management-observability get secret alertmanager-config --template='{{ index .data "alertmanager.yaml" }}' |base64 -d > alertmanager.yamloc -n open-cluster-management-observability get secret alertmanager-config --template='{{ index .data "alertmanager.yaml" }}' |base64 -d > alertmanager.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,编辑并保存
alertmanager.yaml文件配置:oc -n open-cluster-management-observability create secret generic alertmanager-config --from-file=alertmanager.yaml --dry-run -o=yaml | oc -n open-cluster-management-observability replace secret --filename=-
oc -n open-cluster-management-observability create secret generic alertmanager-config --from-file=alertmanager.yaml --dry-run -o=yaml | oc -n open-cluster-management-observability replace secret --filename=-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新的 secret 可能与以下类似:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您的更改会在修改后立即生效。如需 AlertManager 的示例,请参阅 prometheus/alertmanager。
1.4.3. 添加自定义指标 复制链接链接已复制到粘贴板!
将指标添加到 metrics_list.yaml 文件中,用来从受管集群中收集数据。
在添加自定义指标前,请确定使用以下命令启用了 mco observability : oc get mco observability -o yaml。在 status.conditions.message 中检查以下消息:Observability components are deployed and running
创建名为 observability-metrics-custom-allowlist.yaml 的文件,并将自定义指标名称添加到 metrics_list.yaml 参数。ConfigMap 的 YAML 可能类似以下内容:
-
在
names部分中,添加要从受管集群收集的自定义指标的名称。 -
在
rules部分中,仅为expr和record参数对输入一个值来定义查询表达式。指标作为来自受管集群的record参数中定义的名称来收集。返回的指标值是运行查询表达式后的结果。 -
name和rules部分是可选的。您可以使用其中一个或两个部分。
使用以下命令,在 open-cluster-management-observability 命名空间中创建 observability-metrics-custom-allowlist ConfigMap:oc apply -n open-cluster-management-observability -f observability-metrics-custom-allowlist.yaml。
通过 Grafana 仪表板,查询来自 Explore 页的指标数据来验证是否收集了您的自定义指标的数据。您也可以在您自己的仪表板中使用自定义指标。有关查看仪表板的更多信息,请参阅指定 Grafana 仪表板。
1.4.4. 删除默认指标 复制链接链接已复制到粘贴板!
如果您不需要收集管理集群中的特定指标数据,从 observability-metrics-custom-allowlist.yaml 文件中删除相应的指标。当您删除指标时,不会在受管集群上收集指标数据。如前文所述,首先验证 mco observability 是否已启用。
您可以在 metrics 名称的开头使用连字符 - 将默认指标名称添加到 metrics_list.yaml 参数中。例如: -cluster_infrastructure_provider。
使用以下命令,在 open-cluster-management-observability 命名空间中创建 observability-metrics-custom-allowlist ConfigMap:oc apply -n open-cluster-management-observability -f observability-metrics-custom-allowlist.yaml。
验证特定指标是否没有从受管集群中收集。当您从 Grafana 仪表板查询指标时,指标不会显示。
1.4.5. 将指标导出到外部端点 复制链接链接已复制到粘贴板!
您可以自定义可观察性,将指标导出到外部端点,该端点可实时支持 Prometheus Remote Write 协议。如需更多信息,请参阅 Prometheus Remote Write 协议。
1.4.5.1. 为外部端点创建 Kubernetes secret 复制链接链接已复制到粘贴板!
您必须使用 open-cluster-management-observability 命名空间中外部端点的访问信息创建一个 Kubernetes secret。查看以下示例 secret:
ep.yaml 是内容的密钥,在下一步中在 multiclusterobservability CR 中使用。目前,可观察性支持在不进行安全检查的情况下将指标导出到端点,以及基本身份验证或 tls 启用。查看下表以了解支持的参数的完整列表:
| Name | 描述 | 模式 |
|---|---|---|
|
url | 外部端点的 URL。 | 字符串 |
|
http_client_config | HTTP 客户端的高级配置。 |
HttpClientConfig
| Name | 描述 | 模式 |
|---|---|---|
|
basic_auth | 用于基本身份验证的 HTTP 客户端配置。 | |
|
tls_config | TLS 的 HTTP 客户端配置。 |
BasicAuth
| Name | 描述 | 模式 |
|---|---|---|
|
username | 基本授权的用户名。 | 字符串 |
|
password | 基本授权的密码。 | 字符串 |
TLSConfig
| Name | 描述 | 模式 |
|
secret_name | 包含证书的 secret 的名称。 | 字符串 |
|
ca_file_key | secret 中的 CA 证书的密钥(只在 insecure_skip_verify 设为 true 时才可选)。 | 字符串 |
|
cert_file_key | secret 中客户端证书的密钥。 | 字符串 |
|
key_file_key | 机密中的客户端密钥的键。 | 字符串 |
|
insecure_skip_verify | 用于跳过目标证书的验证参数。 | bool |
1.4.5.2. 更新 multiclusterobservability CR 复制链接链接已复制到粘贴板!
创建 Kubernetes secret 后,您必须更新 multiclusterobservability CR,以便在 spec.storageConfig 参数中添加 writeStorage。查看以下示例:
spec:
storageConfig:
writeStorage:
- key: ep.yaml
name: victoriametrics
spec:
storageConfig:
writeStorage:
- key: ep.yaml
name: victoriametrics
writeStorage 的值是一个列表。当您要将指标导出到一个外部端点时,您可以在列表中添加一个项目。如果您在列表中添加多个项,则指标将导出到多个外部端点。每个项目包含两个属性:name 和 key。name 是包含端点访问信息的 Kubernetes secret 的名称,key 是 secret 中内容的密钥。查看以下描述表
1.4.5.3. 查看指标导出的状态 复制链接链接已复制到粘贴板!
启用指标导出后,您可以通过检查 acm_remote_write_requests_total 指标来查看指标导出的状态。在 hub 集群的 OpenShift 控制台中点 Observe 部分中的 Metrics 进入 Metrics 页面。
然后查询 acm_remote_write_requests_total 指标。该指标的值是在一个 observatorium API 实例上具有特定响应的请求总数。name 标签是外部端点的名称。code 标签是指标导出的 HTTP 请求的返回代码。
1.4.6. 添加高级配置 复制链接链接已复制到粘贴板!
添加 advanced 配置部分,以根据您的需要更新每个可观察性组件的保留。
编辑 MultiClusterObservability CR,使用以下命令添加 advanced 部分: oc edit mco observability -o yaml。您的 YAML 文件可能类似以下内容:
有关可添加到高级配置中的所有参数的描述,请参阅 Observability API。
1.4.7. 从控制台更新 multiclusterobservability CR 副本 复制链接链接已复制到粘贴板!
如果工作负载增加,增加可观察 pod 的副本数。从您的 hub 集群中进入到 Red Hat OpenShift Container Platform 控制台。找到 multiclusterobservability 自定义资源(CR),并更新要更改副本的组件的 replicas 参数值。更新的 YAML 可能类似以下内容:
spec:
advanced:
receive:
replicas: 6
spec:
advanced:
receive:
replicas: 6
有关 mco observability CR 中的参数的更多信息,请参阅 Observability API。
1.4.8. 转发警报 复制链接链接已复制到粘贴板!
启用可观察性后,来自 OpenShift Container Platform 受管集群的警报会自动发送到 hub 集群。您可以使用 alertmanager-config YAML 文件,为警报配置外部通知系统。
查看 alertmanager-config YAML 文件示例:
如果要配置代理进行警报转发,请在 alertmanager-config YAML 文件中添加以下 global 条目:
global:
slack_api_url: '<slack_webhook_url>'
http_config:
proxy_url: http://****
global:
slack_api_url: '<slack_webhook_url>'
http_config:
proxy_url: http://****
如需更多信息,请参阅 Prometheus Alertmanager 文档。
1.4.8.1. 为受管集群禁用转发警报 复制链接链接已复制到粘贴板!
禁用受管集群的警报转发。在 MultiClusterObservability 自定义资源中添加以下注解:
metadata:
annotations:
mco-disable-alerting: "true"
metadata:
annotations:
mco-disable-alerting: "true"
设置注解时,受管集群上的警报转发配置会被恢复。对 openshift-monitoring 命名空间中的 ocp-monitoring-config ConfigMap 所做的任何更改都会被恢复。设置注解可确保 ocp-monitoring-config ConfigMap 不再由 observability operator 端点管理或更新。更新配置后,受管集群中的 Prometheus 实例会重启。
重要: 如果您有一个带有指标数据的 Prometheus 实例,且 Prometheus 实例重启了 Prometheus 实例,则受管集群上的指标将会丢失。但是,hub 集群中的指标不会受到影响。
恢复更改后,会在 open-cluster-management-addon-observability 命名空间中创建一个名为 cluster-monitoring-reverted 的 ConfigMap。任何新的、手动添加的警报转发配置都不会从 ConfigMap 恢复。
验证 hub 集群警报管理器不再将受管集群警报传播到第三方消息传递工具。请参阅上一节中 配置 AlertManager。
1.4.9. 静默警报 复制链接链接已复制到粘贴板!
添加您不想接收的警报。您可以根据警报名称、匹配标签或持续时间来静默警报。添加要静默的警报后,会创建一个 ID。您的静默警报的 ID 可能类似以下字符串 d839aca9-ed46-40be-84c4-dca8773671da。
继续读取静默警报的方法:
要静默 Red Hat Advanced Cluster Management 警报,您必须有权访问
open-cluster-management-observability命名空间中的alertmanager-mainpod。例如,在 pod 终端中输入以下命令来静默SampleAlert:amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" alertname="SampleAlert"
amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" alertname="SampleAlert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用多个匹配标签静默警报。以下命令使用
match-label-1和match-label-2:amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" <match-label-1>=<match-value-1> <match-label-2>=<match-value-2>
amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" <match-label-1>=<match-value-1> <match-label-2>=<match-value-2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要在特定时间段内静默警报,请使用
--duration标志。运行以下命令,以静默一个小时的SampleAlert:amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" --duration="1h" alertname="SampleAlert"
amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" --duration="1h" alertname="SampleAlert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以为静默的警报指定开始或结束时间。输入以下命令,在一个特定的开始时间静默
SampleAlert:amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" --start="2023-04-14T15:04:05-07:00" alertname="SampleAlert"
amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" --start="2023-04-14T15:04:05-07:00" alertname="SampleAlert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看创建的所有静默警报,请运行以下命令:
amtool silence --alertmanager.url="http://localhost:9093"
amtool silence --alertmanager.url="http://localhost:9093"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您不再需要静默警报,请运行以下命令终止警报:
amtool silence expire --alertmanager.url="http://localhost:9093" "d839aca9-ed46-40be-84c4-dca8773671da"
amtool silence expire --alertmanager.url="http://localhost:9093" "d839aca9-ed46-40be-84c4-dca8773671da"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要结束所有警报的静默,请运行以下命令:
amtool silence expire --alertmanager.url="http://localhost:9093" $(amtool silence query --alertmanager.url="http://localhost:9093" -q)
amtool silence expire --alertmanager.url="http://localhost:9093" $(amtool silence query --alertmanager.url="http://localhost:9093" -q)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.10. 阻止警报 复制链接链接已复制到粘贴板!
在全局范围内限制 Red Hat Advanced Cluster Management 警报,这不太严重。通过在 open-cluster-management-observability 命名空间中定义 alertmanager-config 中的禁止规则来限制警报。
当一组与另一组现有匹配者匹配的一组参数时,禁止规则会静默警报。为了让规则生效,目标和源警报必须具有 equal 列表中标签名称相同的标签值。您的 inhibit_rules 可能类似以下:
- 1
- 定义了
inhibit_rules参数部分,以查找同一命名空间中的警报。当一个命名空间中出现了一个critical警报时,如果在那个命名空间中还有其他包括严重性级别为warning或info的警报时,只有critical警报会路由到 Alertmanager 接收器。匹配时可能会显示以下警报:ALERTS{alertname="foo", namespace="ns-1", severity="critical"} ALERTS{alertname="foo", namespace="ns-1", severity="warning"}ALERTS{alertname="foo", namespace="ns-1", severity="critical"} ALERTS{alertname="foo", namespace="ns-1", severity="warning"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 2
- 如果
source_match和target_match_re参数的值不匹配,则警报将路由到接收器:ALERTS{alertname="foo", namespace="ns-1", severity="critical"} ALERTS{alertname="foo", namespace="ns-2", severity="warning"}ALERTS{alertname="foo", namespace="ns-1", severity="critical"} ALERTS{alertname="foo", namespace="ns-2", severity="warning"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看 Red Hat Advanced Cluster Management 中的禁止的警报,请输入以下命令:
amtool alert --alertmanager.url="http://localhost:9093" --inhibited
amtool alert --alertmanager.url="http://localhost:9093" --inhibitedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.11. 自定义路由认证 复制链接链接已复制到粘贴板!
如果要自定义 OpenShift Container Platform 路由认证,则必须在 alt_names 部分添加路由。要确保 OpenShift Container Platform 路由可以访问,请添加以下信息:alertmanager.apps.<domainname>, observatorium-api.apps.<domainname>, rbac-query-proxy.apps.<domainname>。
注意 :用户负责证书轮转和更新。
1.4.11.1. 自定义用于访问对象存储的证书 复制链接链接已复制到粘贴板!
您可以自定义用于访问对象存储的证书。通过在对象存储 secret 中添加证书来编辑 http_config 部分。查看以下示例:
您必须在 open-cluster-management-observability 命名空间中提供一个 secret。secret 必须包含您在前面的 secret 示例中定义的 ca.crt。如果要启用 Mutual TLS,则需要在前面的 secret 中提供 public.crt 和 private.key。查看以下示例:
您还可以在 MultiClusterObservability CR 中配置 secret 名称,即 TLSSecretName 参数。查看以下示例,其中 secret 名称为 tls-certs-secret :
metricObjectStorage:
key: thanos.yaml
name: thanos-object-storage
tlsSecretName: tls-certs-secret
metricObjectStorage:
key: thanos.yaml
name: thanos-object-storage
tlsSecretName: tls-certs-secret
此 secret 可以挂载到需要访问对象存储的所有组件中,它包括以下组件:receiver, store, ruler, compact。
1.4.12. 查看和查找数据 复制链接链接已复制到粘贴板!
通过从 hub 集群访问 Grafana 来查看来自受管集群的数据。您可以查询特定的警报并为查询添加过滤器。
例如,对于来自单一节点集群中的 cluster_infrastructure_provider,使用以下查询表达式:cluster_infrastructure_provider{clusterType="SNO"}
注 : 如果在单一节点受管集群中启用了可观察性,则不要设置 ObservabilitySpec.resources.CPU.limits 参数。当您设置 CPU 限制时,observability pod 会计算为受管集群的容量。如需更多信息,请参阅管理工作负载分区。
1.4.12.1. 查看 etcd 表 复制链接链接已复制到粘贴板!
在 Grafana 中查看 hub 集群仪表板中的 etcd 表,以了解 etcd 作为数据存储的稳定性。
从 hub 集群中选择 Grafana 链接来查看从 hub 集群收集的 etcd 表数据。此时会显示跨受管集群的领导选举更改。
1.4.12.2. 查看 Kubernetes API 服务器仪表板的集群团队服务级别概述 复制链接链接已复制到粘贴板!
在 Grafana 中的 hub 集群仪表板中查看集群 fleet Kubernetes API 服务级别概述。
进入 Grafana 仪表板后,选择 Kubernetes > Service-Level Overview > API Server 来访问受管仪表板菜单。此时会显示 Fleet Overview 和 Top Cluster 的详情。
查看过去 7 或 30 天、终止和非关闭集群以及 API 服务器请求持续时间,超过或满足目标 service-level objective (SLO)值的集群总数。
1.4.12.3. 查看 Kubernetes API 服务器仪表板的集群服务级别概述。 复制链接链接已复制到粘贴板!
在 Grafana 中的 hub 集群仪表板中查看 Kubernetes API 服务级别概述表。
进入 Grafana 仪表板后,选择 Kubernetes > Service-Level Overview > API Server 来访问受管仪表板菜单。此时会显示 Fleet Overview 和 Top Cluster 的详情。
查看过去七或 30 天、剩余停机时间和趋势的错误预算。
1.4.13. 禁用可观察性 复制链接链接已复制到粘贴板!
您可以禁用可观察性,在 Red Hat Advanced Cluster Management hub 集群中停止数据收集。
1.4.13.1. 在所有集群中禁用可观察性 复制链接链接已复制到粘贴板!
通过删除所有受管集群中的可观察性组件来禁用可观察性。
通过将 enableMetrics 设置为 false 来更新 multicluster-observability-operator 资源。更新的资源可能类似如下:
spec:
imagePullPolicy: Always
imagePullSecret: multiclusterhub-operator-pull-secret
observabilityAddonSpec: # The ObservabilityAddonSpec defines the global settings for all managed clusters which have observability add-on enabled
enableMetrics: false #indicates the observability addon push metrics to hub server
spec:
imagePullPolicy: Always
imagePullSecret: multiclusterhub-operator-pull-secret
observabilityAddonSpec: # The ObservabilityAddonSpec defines the global settings for all managed clusters which have observability add-on enabled
enableMetrics: false #indicates the observability addon push metrics to hub server
1.4.13.2. 在单个集群中禁用可观察性 复制链接链接已复制到粘贴板!
通过删除特定受管集群中的可观察性组件来禁用可观察性。将 observability: disabled 标签添加到 managedclusters.cluster.open-cluster-management.io 自定义资源中。
在 Red Hat Advanced Cluster Management 控制台 Clusters 页面中,将 observability=disabled 标签添加到指定的集群中。
备注:当一个带有可观察性组件的受管集群被分离时,metric-collector 部署会被删除。
有关使用可观察性服务监控控制台数据的更多信息,请参阅 观察环境简介。