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 配置路由。完成以下步骤以更新自定义接收器规则:

  1. alertmanager-config secret 中提取数据。运行以下命令:

    oc -n open-cluster-management-observability get secret alertmanager-config --template='{{ index .data "alertmanager.yaml" }}' |base64 -d > alertmanager.yaml
  2. 运行以下命令,编辑并保存 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-1match-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 警报时,如果在那个命名空间中还有其他包括严重性级别为 warninginfo 的警报时,只有 critical 警报会路由到 Alertmanager 接收器。匹配时可能会显示以下警报:
ALERTS{alertname="foo", namespace="ns-1", severity="critical"}
ALERTS{alertname="foo", namespace="ns-1", severity="warning"}
2
如果 source_matchtarget_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 observabilityoc 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 部分中,仅为 exprrecord 参数对输入一个值来定义查询表达式。指标作为来自受管集群的 record 参数中定义的名称来收集。返回的指标值是运行查询表达式后的结果。
  • namerules 部分是可选的。您可以使用其中一个或两个部分。

使用以下命令,在 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
optional

HTTP 客户端的高级配置。

HttpClientConfig

HttpClientConfig

Name描述模式

basic_auth
可选

用于基本身份验证的 HTTP 客户端配置。

BasicAuth

tls_config
optional

TLS 的 HTTP 客户端配置。

TLSConfig

BasicAuth

Name描述模式

username
可选

基本授权的用户名。

字符串

password
可选

基本授权的密码。

字符串

TLSConfig

Name

描述

模式

secret_name
必需

包含证书的 secret 的名称。

字符串

ca_file_key
optional

secret 中的 CA 证书的密钥(只在 insecure_skip_verify 设为 true 时才可选)。

字符串

cert_file_key
required

secret 中客户端证书的密钥。

字符串

key_file_key
required

机密中的客户端密钥的键。

字符串

insecure_skip_verify
optional

用于跳过目标证书的验证参数。

bool

1.5.7.2. 更新 MultiClusterObservability 自定义资源

创建 Kubernetes secret 后,您必须更新 MultiClusterObservability 自定义资源,以便在 spec.storageConfig 参数中添加 writeStorage。查看以下示例:

spec:
  storageConfig:
    writeStorage:
    - key: ep.yaml
      name: victoriametrics

writeStorage 的值是一个列表。当您要将指标导出到一个外部端点时,您可以在列表中添加一个项目。如果您在列表中添加多个项,则指标将导出到多个外部端点。每个项目包含两个属性:namekeyname 是包含端点访问信息的 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. 自定义用于访问对象存储的证书

完成以下步骤以自定义用于访问对象存储的证书:

  1. 通过在对象存储 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
  2. open-cluster-management-observability 命名空间中添加对象存储 secret。secret 必须包含您在前面的 secret 示例中定义的 ca.crt。如果要启用 Mutual TLS,则需要在前面的 secret 中提供 public.crtprivate.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 的证书和密钥值的路径。
  3. 通过更新 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. 查看历史数据

当您查询历史数据时,手动设置查询参数选项来控制仪表板中显示的数据量。完成以下步骤:

  1. 在 hub 集群中,选择位于控制台标头中的 Grafana 链接
  2. 选择 Edit Panel 来编辑集群仪表板。
  3. 在 Grafana 中的 Query 前端数据源中点 Query 选项卡。
  4. 选择 $datasource
  5. 如果要查看更多数据,请增加 Step 参数的值。如果 Step 参数部分为空,则会自动计算。
  6. 找到 Custom query parameters 字段,然后选择 max_source_resolution=auto
  7. 要验证是否显示数据,请刷新 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 OverviewTop 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 OverviewTop 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 文档。有关使用可观察性服务监控控制台数据的更多信息,请参阅 观察环境简介

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.