1.5. 定制可观察性
以下部分介绍了对可观察性服务所收集的数据进行自定义、管理和查看的信息。
使用 must-gather
命令收集有关为可观察性资源创建的新信息的日志。如需更多信息,请参阅故障排除文档中的 Must-gather 部分。
1.5.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-rules
ConfigMap 中定义。例如,您可以创建一个自定义警报规则,在 CPU 使用量超过了您定义的值时通知您。您的 YAML 可能类似以下内容:
data: custom_rules.yaml: | groups: - name: cluster-health rules: - alert: ClusterCPUHealth-jb annotations: summary: Notify when CPU utilization on a cluster is greater than the defined utilization limit description: "The cluster has a high CPU usage: {{ $value }} core for {{ $labels.cluster }} {{ $labels.clusterID }}." expr: | max(cluster:cpu_usage_cores:sum) by (clusterID, cluster, prometheus) > 0 for: 5s labels: cluster: "{{ $labels.cluster }}" prometheus: "{{ $labels.prometheus }}" severity: critical
您还可以在
thanos-ruler-custom-rules
ConfigMap 中创建自定义记录规则。例如,您可以创建一个记录规则,让您可以获取 pod 的容器内存缓存的总和。您的 YAML 可能类似以下内容:
data: custom_rules.yaml: | groups: - name: container-memory recording_rules: - record: pod:container_memory_cache:sum expr: sum(container_memory_cache{pod!=""}) BY (pod, container)
注:如果这是第一个新的自定义规则,它会立即创建。对于 ConfigMap 的更改,会自动重新加载配置。由于
observability-thanos-ruler
sidecar 中的config-reload
,所以会重新载入配置。
要验证警报规则是否正常工作,启动 Grafana 仪表板,进入 Explore 页面并查询 ALERTS
。只有启动警报时,Grafana 才会在 Grafana 中提供警报。
1.5.2. 配置 AlertManager
集成外部消息工具,如 email、Slack 和 PagerDuty 以接收来自 AlertManager 的通知。您必须覆盖 open-cluster-management-observability
命名空间中的 alertmanager-config
secret 来添加集成,并为 AlertManager 配置路由。完成以下步骤以更新自定义接收器规则:
从
alertmanager-config
secret 中提取数据。运行以下命令:oc -n open-cluster-management-observability get secret alertmanager-config --template='{{ index .data "alertmanager.yaml" }}' |base64 -d > alertmanager.yaml
运行以下命令,编辑并保存
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=-
更新的 secret 可能与以下类似:
global smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' smtp_auth_username: 'alertmanager' smtp_auth_password: 'password' templates: - '/etc/alertmanager/template/*.tmpl' route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-X-mails routes: - match_re: service: ^(foo1|foo2|baz)$ receiver: team-X-mails
您的更改会在修改后立即生效。如需 AlertManager 的示例,请参阅 prometheus/alertmanager。
1.5.3. 转发警报
启用可观察性后,来自 OpenShift Container Platform 受管集群的警报会自动发送到 hub 集群。您可以使用 alertmanager-config
YAML 文件,为警报配置外部通知系统。
查看 alertmanager-config
YAML 文件示例:
global: slack_api_url: '<slack_webhook_url>' route: receiver: 'slack-notifications' group_by: [alertname, datacenter, app] receivers: - name: 'slack-notifications' slack_configs: - channel: '#alerts' text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'
如果要配置代理进行警报转发,请在 alertmanager-config
YAML 文件中添加以下 global
条目:
global: slack_api_url: '<slack_webhook_url>' http_config: proxy_url: http://****
1.5.3.1. 为受管集群禁用转发警报
禁用受管集群的警报转发。在 MultiClusterObservability
自定义资源中添加以下注解:
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.5.4. 静默警报
添加您不想接收的警报。您可以根据警报名称、匹配标签或持续时间来静默警报。添加要静默的警报后,会创建一个 ID。您的静默警报的 ID 可能类似以下字符串 d839aca9-ed46-40be-84c4-dca8773671da
。
继续读取静默警报的方法:
要静默 Red Hat Advanced Cluster Management 警报,您必须有权访问
open-cluster-management-observability
命名空间中的alertmanager-main
pod。例如,在 pod 终端中输入以下命令来静默SampleAlert
:amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" alertname="SampleAlert"
通过使用多个匹配标签静默警报。以下命令使用
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>
如果要在特定时间段内静默警报,请使用
--duration
标志。运行以下命令,以静默一个小时的SampleAlert
:amtool silence add --alertmanager.url="http://localhost:9093" --author="user" --comment="Silencing sample alert" --duration="1h" alertname="SampleAlert"
您还可以为静默的警报指定开始或结束时间。输入以下命令在特定开始时静默
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 --alertmanager.url="http://localhost:9093"
如果您不再需要静默警报,请运行以下命令终止警报:
amtool silence expire --alertmanager.url="http://localhost:9093" "d839aca9-ed46-40be-84c4-dca8773671da"
要结束所有警报的静默,请运行以下命令:
amtool silence expire --alertmanager.url="http://localhost:9093" $(amtool silence query --alertmanager.url="http://localhost:9093" -q)
1.5.5. 阻止警报
在全局范围内限制 Red Hat Advanced Cluster Management 警报,这不太严重。通过在 open-cluster-management-observability
命名空间中定义 alertmanager-config
中的禁止规则来限制警报。
当一组与另一组现有匹配者匹配的一组参数时,禁止规则会静默警报。为了让规则生效,目标和源警报必须具有 equal
列表中标签名称相同的标签值。您的 inhibit_rules
可能类似以下:
global: resolve_timeout: 1h inhibit_rules:1 - equal: - namespace source_match:2 severity: critical target_match_re: severity: warning|info
- 1
- 定义了
inhibit_rules
参数部分,以查找同一命名空间中的警报。当一个命名空间中出现了一个critical
警报时,如果在那个命名空间中还有其他包括严重性级别为warning
或info
的警报时,只有critical
警报会路由到 Alertmanager 接收器。匹配时可能会显示以下警报:ALERTS{alertname="foo", namespace="ns-1", severity="critical"} ALERTS{alertname="foo", namespace="ns-1", severity="warning"}
- 2
- 如果
source_match
和target_match_re
参数的值不匹配,则警报将路由到接收器:ALERTS{alertname="foo", namespace="ns-1", severity="critical"} ALERTS{alertname="foo", namespace="ns-2", severity="warning"}
要查看 Red Hat Advanced Cluster Management 中的禁止的警报,请输入以下命令:
amtool alert --alertmanager.url="http://localhost:9093" --inhibited
1.5.6. 添加自定义指标
将指标添加到 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 可能类似以下内容:
kind: ConfigMap apiVersion: v1 metadata: name: observability-metrics-custom-allowlist data: metrics_list.yaml: | names: - node_memory_MemTotal_bytes rules: - record: apiserver_request_duration_seconds:histogram_quantile_90 expr: histogram_quantile(0.90,sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\", verb!=\"WATCH\"}[5m])) by (verb,le))
对于用户工作负载指标,请参阅添加用户工作负载指标部分。
-
在
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.5.6.1. 添加用户工作负载指标
您可以从 OpenShift Container Platform 中的工作负载收集 OpenShift Container Platform 用户定义的指标。您必须启用监控,请参阅为用户定义的项目启用监控。
如果您有一个为用户定义的工作负载启用监控的受管集群,用户工作负载位于 test
命名空间中,并生成指标。Prometheus 从 OpenShift Container Platform 用户工作负载收集这些指标。
通过在 test
命名空间中创建一个名为 observability-metrics-custom-allowlist
的 ConfigMap,从用户工作负载收集指标。查看以下示例:
kind: ConfigMap apiVersion: v1 metadata: name: observability-metrics-custom-allowlist namespace: test data: uwl_metrics_list.yaml: | names: - sample_metrics
-
uwl_metrics_list.yaml
是 ConfigMap 数据的密钥。 -
ConfigMap 数据的值采用 YAML 格式。
name
部分包含您要从test
命名空间收集的指标名称列表。创建 ConfigMap 后,由可观察收集器收集目标命名空间中的指定指标并推送到 hub 集群。
1.5.6.2. 删除默认指标
如果您不需要收集管理集群中的特定指标数据,从 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.5.7. 将指标导出到外部端点
您可以自定义可观察性,将指标导出到外部端点,该端点实时支持 Prometheus Remote-Write 规格。如需更多信息,请参阅 Prometheus Remote-Write 规格。
1.5.7.1. 为外部端点创建 Kubernetes secret
您必须使用 open-cluster-management-observability
命名空间中外部端点的访问信息创建一个 Kubernetes secret。查看以下示例 secret:
apiVersion: v1 kind: Secret metadata: name: victoriametrics namespace: open-cluster-management-observability type: Opaque stringData: ep.yaml: | url: http://victoriametrics:8428/api/v1/write http_client_config: basic_auth: username: test password: test
ep.yaml
是内容的密钥,在下一步中 MultiClusterObservability
自定义资源中使用。目前,可观察性支持在不进行安全检查的情况下将指标导出到端点,以及基本身份验证或 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.5.7.2. 更新 MultiClusterObservability 自定义资源
创建 Kubernetes secret 后,您必须更新 MultiClusterObservability
自定义资源,以便在 spec.storageConfig
参数中添加 writeStorage
。查看以下示例:
spec: storageConfig: writeStorage: - key: ep.yaml name: victoriametrics
writeStorage
的值是一个列表。当您要将指标导出到一个外部端点时,您可以在列表中添加一个项目。如果您在列表中添加多个项,则指标将导出到多个外部端点。每个项目包含两个属性:name 和 key。name 是包含端点访问信息的 Kubernetes secret 的名称,key 是 secret 中内容的密钥。查看以下描述表
1.5.7.3. 查看指标导出的状态
启用指标导出后,您可以通过检查 acm_remote_write_requests_total
指标来查看指标导出的状态。在 hub 集群的 OpenShift 控制台中点 Observe 部分中的 Metrics 进入 Metrics 页面。
然后查询 acm_remote_write_requests_total
指标。该指标的值是在一个 observatorium API 实例上具有特定响应的请求总数。name
标签是外部端点的名称。code
标签是指标导出的 HTTP 请求的返回代码。
1.5.8. 添加高级配置
添加 advanced
配置部分,以根据您的需要更新每个可观察性组件的保留。
编辑 MultiClusterObservability
自定义资源,并使用以下命令添加 advanced
部分: oc edit mco observability -o yaml
。您的 YAML 文件可能类似以下内容:
spec: advanced: retentionConfig: blockDuration: 2h deleteDelay: 48h retentionInLocal: 24h retentionResolutionRaw: 30d retentionResolution5m: 180d retentionResolution1h: 0d receive: resources: limits: memory: 4096Gi replicas: 3
有关可添加到高级
配置中的所有参数的描述,请参阅 Observability API。
1.5.9. 从控制台更新 MultiClusterObservability 自定义资源副本
如果工作负载增加,增加可观察 pod 的副本数。从您的 hub 集群中进入到 Red Hat OpenShift Container Platform 控制台。找到 MultiClusterObservability
自定义资源,并更新您要更改副本的组件的 replicas
参数值。更新的 YAML 可能类似以下内容:
spec: advanced: receive: replicas: 6
有关 mco observability
自定义资源中的参数的更多信息,请参阅 Observability API。
1.5.10. 自定义路由认证
如果要自定义 OpenShift Container Platform 路由认证,则必须在 alt_names
部分添加路由。要确保 OpenShift Container Platform 路由可以访问,请添加以下信息:alertmanager.apps.<domainname>
, observatorium-api.apps.<domainname>
, rbac-query-proxy.apps.<domainname>
。
注意 :用户负责证书轮转和更新。
1.5.11. 自定义用于访问对象存储的证书
完成以下步骤以自定义用于访问对象存储的证书:
通过在对象存储 secret 中添加证书来编辑
http_config
部分。查看以下示例:thanos.yaml: | type: s3 config: bucket: "thanos" endpoint: "minio:9000" insecure: false access_key: "minio" secret_key: "minio123" http_config: tls_config: ca_file: /etc/minio/certs/ca.crt insecure_skip_verify: false
在
open-cluster-management-observability
命名空间中添加对象存储 secret。secret 必须包含您在前面的 secret 示例中定义的ca.crt
。如果要启用 Mutual TLS,则需要在前面的 secret 中提供public.crt
和private.key
。查看以下示例:thanos.yaml: | type: s3 config: ... http_config: tls_config: ca_file: /etc/minio/certs/ca.crt 1 cert_file: /etc/minio/certs/public.crt key_file: /etc/minio/certs/private.key insecure_skip_verify: false
- 1
thanos-object-storage
secret 的证书和密钥值的路径。
通过更新
MultiClusterObservability
自定义资源中的TLSSecretName
参数来配置 secret 名称。查看以下示例,其中 secret 名称为tls-certs-secret
:metricObjectStorage: key: thanos.yaml name: thanos-object-storage tlsSecretName: tls-certs-secret
此 secret 可以挂载到需要访问对象存储的所有组件的 tlsSecretMountPath
资源中,它包括以下组件: receiver
,store
,ruler
,compact
。
1.5.12. 查看和查找数据
通过从 hub 集群访问 Grafana 来查看来自受管集群的数据。您可以查询特定的警报并为查询添加过滤器。
例如,对于来自单一节点集群中的 cluster_infrastructure_provider,使用以下查询表达式:cluster_infrastructure_provider{clusterType="SNO"}
备注:
-
如果在单一节点受管集群中启用了可观察性,则不要设置
ObservabilitySpec.resources.CPU.limits
参数。当您设置 CPU 限制时,observability pod 会计算为受管集群的容量。如需更多信息,请参阅管理工作负载分区。
1.5.12.1. 查看历史数据
当您查询历史数据时,手动设置查询参数选项来控制仪表板中显示的数据量。完成以下步骤:
- 在 hub 集群中,选择位于控制台标头中的 Grafana 链接。
- 选择 Edit Panel 来编辑集群仪表板。
- 在 Grafana 中的 Query 前端数据源中点 Query 选项卡。
-
选择
$datasource
。 - 如果要查看更多数据,请增加 Step 参数的值。如果 Step 参数部分为空,则会自动计算。
-
找到 Custom query parameters 字段,然后选择
max_source_resolution=auto
。 - 要验证是否显示数据,请刷新 Grafana 页面。
您的查询数据会出现在 Grafana 仪表板中。
1.5.12.2. 查看 etcd 表
在 Grafana 中查看 hub 集群仪表板中的 etcd 表,以了解 etcd 作为数据存储的稳定性。
从 hub 集群中选择 Grafana 链接来查看从 hub 集群收集的 etcd 表数据。此时会显示跨受管集群的领导选举更改。
1.5.12.3. 查看 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.5.12.4. 查看 Kubernetes API 服务器仪表板的集群服务级别概述。
在 Grafana 中的 hub 集群仪表板中查看 Kubernetes API 服务级别概述表。
进入 Grafana 仪表板后,选择 Kubernetes > Service-Level Overview > API Server 来访问受管仪表板菜单。此时会显示 Fleet Overview 和 Top Cluster 的详情。
查看过去七或 30 天、剩余停机时间和趋势的错误预算。
1.5.13. 禁用可观察性
您可以禁用可观察性,在 Red Hat Advanced Cluster Management hub 集群中停止数据收集。
1.5.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
1.5.13.2. 在单个集群中禁用可观察性
通过删除特定受管集群中的可观察性组件来禁用可观察性。将 observability: disabled
标签添加到 managedclusters.cluster.open-cluster-management.io
自定义资源中。
在 Red Hat Advanced Cluster Management 控制台 Clusters 页面中,将 observability=disabled
标签添加到指定的集群中。
备注:当一个带有可观察性组件的受管集群被分离时,metric-collector
部署会被删除。
要了解更多有关警报转发的信息,请参阅 Prometheus AlertManager 文档。有关使用可观察性服务监控控制台数据的更多信息,请参阅 观察环境简介。