Observability(可观察性)
Observability(可观察性)
摘要
第 1 章 观察(Observability)服务
Observability 可帮助您识别和评估性能问题,而无需额外的测试和支持。Red Hat Advanced Cluster Management for Kubernetes observability 组件是一个服务,可以用来了解集群的健康状态与利用率,以及跨团队的工作负载。通过使用可观察性服务,您可以自动化和管理可观察性中的组件。
Observability 服务使用来自开源社区的现有和广泛采用的可观察工具。默认情况下,在安装 Red Hat Advanced Cluster Management 的过程中会启用多集群可观察性 Operator。Thanos 在 hub 集群中部署,用于长期指标存储。observability-endpoint-operator
会自动部署到每个导入或创建的受管集群。此控制器启动一个指标收集器,从 Red Hat OpenShift Container Platform Prometheus 收集数据,然后将数据发送到 Red Hat Advanced Cluster Management hub 集群。
有关可观察性组件的详情,请参阅以下文档:
1.1. Observability 架构
multiclusterhub-operator
默认启用 multicluster-observability-operator
pod。您必须配置 multicluster-observability-operator
pod。
1.1.1. Observability 开源组件
Observability 服务使用来自社区的开源观察工具。查看以下与产品可观察性服务相关的工具描述:
- Thanos: 可用于在多个 Prometheus 实例之间执行全局查询的组件工具包。对于 Prometheus 数据的长期存储,请将其保留在任何 S3 兼容存储中。您还可以编写一个高可用性和可扩展的指标系统。
- Prometheus: 一个监控和警报工具,可用于从应用程序收集指标,并将这些指标存储为时间序列数据。在本地存储所有提取的示例,运行规则来聚合并记录现有数据的新时间序列,并生成警报。
- Alertmanager: 一个从 Prometheus 管理并接收警报的工具。去除重复数据、组和将警报路由到您的集成,如电子邮件、Slack 和 PagerDuty。将 Alertmanager 配置为静默并禁止特定的警报。
1.1.2. Observability 架构图
下图显示了可观察性的组件:
可观察性架构的组件包括以下项目:
-
multicluster hub operator (也称为
multiclusterhub-operator
pod)会部署multicluster-observability-operator
pod。它将 hub 集群数据发送到受管集群。 - Observability 附加组件控制器 是自动更新受管集群的日志的 API 服务器。
Thanos 基础架构包括 Thanos Compactor,它由
multicluster-observability-operator
pod 部署。Thanos Compactor 通过使用保留配置确保查询运行良好,并压缩存储中的数据。要在 Thanos Compactor 遇到问题时识别,请使用监控其健康状况的四个默认警报。阅读以下默认警报表:
表 1.1. 默认 Thanos 警报表 警报 重要性 描述 ACMThanosCompactHalted
critical
当紧凑器停止时,会发送警报。
ACMThanosCompactHighCompactionFailures
warning
当压缩失败率大于 5% 时发送警报。
ACMThanosCompactBucketHighOperationFailures
warning
当存储桶操作失败率大于 5% 时,会发送警报。
ACMThanosCompactHasNotRun
warning
当紧凑器没有上 24 小时内上传任何内容时,会发送警报。
- Observability 组件部署一个 Grafana 实例,通过仪表板(静态)或数据探索启用数据视觉化。Red Hat Advanced Cluster Management 支持 Grafana 的版本 8.5.20。您还可以设计自己的 Grafana 仪表板。如需更多信息,请参阅指定 Grafana 仪表板。
- Prometheus Alertmanager 可让警报通过第三方应用程序转发。您可以通过创建自定义记录规则或警报规则来自定义可观察性服务。Red Hat Advanced Cluster Management 支持 Prometheus Alertmanager 的版本 0.25。
1.1.3. Observability 服务中使用的持久性存储
重要:不要使用本地存储 Operator 或将本地卷用于持久性存储的存储类。如果 pod 重启后在不同节点上重启,则可能会丢失数据。发生这种情况时,pod 无法访问节点上的本地存储。确保您可以访问 receive
和 rules
pod 的持久性卷,以避免数据丢失。
安装 Red Hat Advanced Cluster Management 时,必须创建以下持久性卷(PV),以便 PVC 可以自动附加到 PVC。请注意,当没有指定默认存储类或想要使用非默认存储类来托管 PV 时,您必须在 MultiClusterObservability
自定义资源中定义存储类。建议您使用 Block Storage,类似于 Prometheus 使用存储。另外,alertmanager
、thanos-compactor
、thanos-ruler
、thanos-receive-default
和 thanos-store-shard
的每个副本必须具有自己的 PV。查看下表:
组件名称 | 目的 |
alertmanager |
Alertmanager 将 |
observability-thanos-compactor | 紧凑器需要本地磁盘空间来存储用于处理的中间数据,以及 bucket 状态缓存。所需空间取决于基础块的大小。紧凑器必须有足够的空间下载所有源块,然后在磁盘上构建紧凑块。磁盘上的数据可以安全地在重新启动之间删除,并且应该是首次尝试使崩溃循环解压器。不过,建议为紧凑器永久磁盘提供压缩器持久磁盘,以便在重启期间高效地使用存储桶状态缓存。 |
observability-thanos-rule |
thanos 标尺通过以固定间隔发出查询来评估 Prometheus 记录和警报规则。规则结果以 Prometheus 2.0 存储格式写回磁盘。在这个有状态集合中保留的数据量在 API 版本 |
observability-thanos-receive-default |
Thanos 接收器接受传入数据(Prometheus 远程写入请求),并将这些数据写入 Prometheus TSDB 的一个本地实例。TSDB 块定期(每 2 小时)上传到对象存储,以进行长期存储和压缩。在这个有状态集合中保留的小时数或天数。有状态集合作为一个本地的缓存,它在 API 版本 |
observability-thanos-store-shard | 它主要充当一个 API 网关,因此不需要大量的本地磁盘空间。它在启动时加入 Thanos 集群,并公告它可以访问的数据。它在本地磁盘上保留少量的、与所有远程块相关的信息,并与存储桶保持同步。这些数据通常在重启时会被安全地删除,这会增加启动时间。 |
注意 :时间序列历史数据存储在对象存储中。Thanos 使用对象存储作为指标和与其相关的元数据的主存储。有关对象存储和降级的详情,请参阅启用可观察性服务。
1.1.4. 其他资源
要了解更多有关可观察性和集成组件的信息,请参阅以下主题:
- 请参阅 Observability 服务
- 请参阅 Observability 配置
- 请参阅启用可观察性服务
- 请参阅 Thanos 文档。
- 请参阅 Prometheus 概述。
- 请参阅 Alertmanager 文档。
1.2. Observability 配置
当启用 observability 服务时,hub 集群始终配置为收集并发送指标到配置的 Thanos 实例,无论是否启用 hub 自助管理。当 hub 集群是自我管理时,disableHubSelfManagement
参数设置为 false
,这是默认设置。multiclusterhub-operator
默认启用 multicluster-observability-operator
pod。您必须配置 multicluster-observability-operator
pod。
hub 集群的指标和警报会出现在 local-cluster
命名空间中。只有启用了 hub 自助管理时,local-cluster
才可用。您可以在 Grafana explorer 中查询 local-cluster
指标。继续阅读以了解您可以使用可观察性组件收集的指标数据,以及可观察性 pod 容量的信息。
1.2.1. 指标类型
默认情况下,OpenShift Container Platform 使用 Telemetry 服务向红帽发送指标数据。acm_managed_cluster_info
由 Red Hat Advanced Cluster Management 提供,包含在 Telemetry 中,但不会显示在 Red Hat Advanced Cluster Management Observe 环境概述 仪表板中。
查看框架支持的指标类型表:
指标名称 | 指标类型 | 标签/标签 | Status |
---|---|---|---|
| 量表 |
| 稳定 |
| Histogram | None | 稳定。如需更多详细信息,请参阅监管指标。 |
| Histogram | None | 稳定。如需了解更多详细信息,请参阅监管指标。 |
| Histogram | None | 稳定。如需更多详细信息,请参阅监管指标。 |
| 量表 |
| 稳定。查看 监管指标 以了解更多详细信息。 |
| 量表 |
| 稳定。有关更多详细信息,请阅读管理 Insights _PolicyReports_。 |
| 计数 | None | 稳定。请参阅 控制台 文档中的 搜索组件 部分。 |
| Histogram | None | 稳定。请参阅 控制台 文档中的 搜索组件 部分。 |
| Histogram | None | 稳定。请参阅 控制台 文档中的 搜索组件 部分。 |
| 计数 | None | 稳定。请参阅 控制台 文档中的 搜索组件 部分。 |
| Histogram | None | 稳定。请参阅 控制台 文档中的 搜索组件 部分。 |
| 量表 | None | 稳定。请参阅 控制台 文档中的 搜索组件 部分。 |
| Histogram | None | 稳定。请参阅 控制台 文档中的 搜索组件 部分。 |
1.2.2. Observability pod 容量请求
Observability 组件需要 2701mCPU 和 11972Mi 内存来安装可观察性服务。下表是启用了 observability-addons
的五个受管集群的 pod 容量请求列表:
Deployment 或 StatefulSet | 容器名称 | CPU(mCPU) | 内存(Mi) | Replicas | Pod 总计 CPU | Pod 内存总量 |
---|---|---|---|---|---|---|
observability-alertmanager | alertmanager | 4 | 200 | 3 | 12 | 600 |
config-reloader | 4 | 25 | 3 | 12 | 75 | |
alertmanager-proxy | 1 | 20 | 3 | 3 | 60 | |
observability-grafana | grafana | 4 | 100 | 2 | 8 | 200 |
grafana-dashboard-loader | 4 | 50 | 2 | 8 | 100 | |
observability-observatorium-api | observatorium-api | 20 | 128 | 2 | 40 | 256 |
observability-observatorium-operator | observatorium-operator | 100 | 100 | 1 | 10 | 50 |
observability-rbac-query-proxy | rbac-query-proxy | 20 | 100 | 2 | 40 | 200 |
oauth-proxy | 1 | 20 | 2 | 2 | 40 | |
observability-thanos-compact | thanos-compact | 500 | 1024 | 1 | 100 | 512 |
observability-thanos-query | thanos-query | 300 | 1024 | 2 | 600 | 2048 |
observability-thanos-query-frontend | thanos-query-frontend | 100 | 256 | 2 | 200 | 512 |
observability-thanos-query-frontend-memcached | memcached | 45 | 128 | 3 | 135 | 384 |
exporter | 5 | 50 | 3 | 15 | 150 | |
observability-thanos-receive-controller | thanos-receive-controller | 4 | 32 | 1 | 4 | 32 |
observability-thanos-receive-default | thanos-receive | 300 | 512 | 3 | 900 | 1536 |
observability-thanos-rule | thanos-rule | 50 | 512 | 3 | 150 | 1536 |
configmap-reloader | 4 | 25 | 3 | 12 | 75 | |
observability-thanos-store-memcached | memcached | 45 | 128 | 3 | 135 | 384 |
exporter | 5 | 50 | 3 | 15 | 150 | |
observability-thanos-store-shard | thanos-store | 100 | 1024 | 3 | 300 | 3072 |
1.2.3. 其他资源
- 有关启用可观察性的更多信息 ,请参阅启用可观察性服务。
- 阅读 自定义可观察性,了解如何自定义可观察性服务、查看指标和其他数据。
- 使用 Grafana 仪表板读取。
- 从 OpenShift Container Platform 文档中了解使用遥测来收集并发送哪些指标类型。如需更多信息,请参阅 Telemetry 收集的信息。
- 详情请参阅监管指标。
- 请参阅 Prometheus 记录规则。
- 另请参阅 Prometheus 警报规则。
1.3. 启用 Observability 服务
当您在 hub 集群上启用 Observability 服务时,multicluster-observability-operator
会监视新的受管集群,并将指标和警报集合服务自动部署到受管集群。您可以使用指标并配置 Grafana 仪表板,使集群资源信息可见,帮助您保存成本并防止服务中断。
使用 Observability 组件监控受管集群的状态,也称为 multicluster-observability-operator
pod。
需要的访问权限: 集群管理员、open-cluster-management:cluster-manager-admin
角色或 S3 管理员。
1.3.1. 先决条件
- 您必须安装 Red Hat Advanced Cluster Management for Kubernetes。如需更多信息,请参阅在线安装。
-
如果没有指定默认存储类,则必须在
MultiClusterObservability
自定义资源中定义存储类。 - 需要直接网络访问 hub 集群。不支持对负载均衡器和代理的网络访问。如需更多信息,请参阅网络。
您必须配置对象存储来创建存储解决方案。
- 重要:当您配置对象存储时,请确保满足敏感数据持久时所需的加密要求。Observability 服务使用 Thanos 支持、稳定的对象存储。您可能无法通过多个 Red Hat Advanced Cluster Management Observability 安装共享对象存储存储桶。因此,为每个安装提供单独的对象存储存储桶。
Red Hat Advanced Cluster Management 支持带有稳定对象存储的以下云供应商:
- Amazon Web Services S3 (AWS S3)
- Red Hat Ceph (S3 compatible API)
- Google Cloud Storage
- Azure 存储
- Red Hat OpenShift Data Foundation,以前称为 Red Hat OpenShift Container Storage
- Red Hat OpenShift on IBM (ROKS)
1.3.2. 使用命令行界面启用 Observability
通过创建 MultiClusterObservability
自定义资源实例来启用 Observability 服务。在启用 Observability 前,请参阅 Observability pod 容量请求 以了解更多信息。
备注:
-
当在由 Red Hat Advanced Cluster Management 管理的 OpenShift Container Platform 受管集群上启用或禁用 Observability 时,observability 端点 Operator 会添加额外的
alertmanager
配置来自动重启本地 Prometheus 来更新cluster-monitoring-config
配置映射。 -
Observability 端点 Operator 通过添加自动重启本地 Prometheus 的额外
alertmanager
配置来更新cluster-monitoring-config
配置映射。当您在 OpenShift Container Platform 受管集群中插入alertmanager
配置时,配置会删除与 Prometheus 指标的 retention 字段相关的设置。
完成以下步骤以启用 Observability 服务:
- 登录到您的 Red Hat Advanced Cluster Management hub 集群。
使用以下命令为 Observability 服务创建一个命名空间:
oc create namespace open-cluster-management-observability
生成 pull-secret。如果在
open-cluster-management
命名空间中安装了 Red Hat Advanced Cluster Management,请运行以下命令:DOCKER_CONFIG_JSON=`oc extract secret/multiclusterhub-operator-pull-secret -n open-cluster-management --to=-`
如果命名空间中没有定义
multiclusterhub-operator-pull-secret
,请运行以下命令将openshift-config
命名空间中的pull-secret
复制到open-cluster-management-observability
命名空间中:DOCKER_CONFIG_JSON=`oc extract secret/pull-secret -n openshift-config --to=-`
运行以下命令,在
open-cluster-management-observability
命名空间中创建 pull-secret:oc create secret generic multiclusterhub-operator-pull-secret \ -n open-cluster-management-observability \ --from-literal=.dockerconfigjson="$DOCKER_CONFIG_JSON" \ --type=kubernetes.io/dockerconfigjson
重要: 如果您使用 OpenShift Container Platform 文档修改集群的全局 pull secret,请务必更新 Observability 命名空间中的全局 pull secret。如需了解更多详细信息 ,请参阅更新全局 pull secret。
为您的云供应商的对象存储创建 secret。您的 secret 必须包含存储解决方案的凭证。例如,运行以下命令:
oc create -f thanos-object-storage.yaml -n open-cluster-management-observability
查看以下受支持对象存储的 secret 示例:
对于 Amazon S3 或 S3 兼容,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: YOUR_S3_BUCKET endpoint: YOUR_S3_ENDPOINT 1 insecure: true access_key: YOUR_ACCESS_KEY secret_key: YOUR_SECRET_KEY
- 1
- 输入没有协议部分的 URL。输入您可能类似以下 URL 的 Amazon S3 端点 URL:
s3.us-east-1.amazonaws.com
。
如需了解更多详细信息,请参阅 Amazon Simple Storage Service 用户指南。
对于 Google Cloud Platform,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: GCS config: bucket: YOUR_GCS_BUCKET service_account: YOUR_SERVICE_ACCOUNT
如需了解更多详细信息,请参阅 Google Cloud Storage。
对于 Azure,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: AZURE config: storage_account: YOUR_STORAGE_ACCT storage_account_key: YOUR_STORAGE_KEY container: YOUR_CONTAINER endpoint: blob.core.windows.net 1 max_retries: 0
- 1
- 如果使用
msi_resource
路径,则端点身份验证通过使用 system-assigned 受管身份完成。您的值必须类似以下端点:https://<storage-account-name>.blob.core.windows.net
。
如果您使用
user_assigned_id
路径,则端点身份验证通过使用用户分配的受管身份完成。当您使用user_assigned_id
时,msi_resource
端点的默认值为https:<storage_account>.<endpoint>
。如需了解更多详细信息,请参阅 Azure Storage 文档。注 :如果您将 Azure 用作 Red Hat OpenShift Container Platform 集群的对象存储,则不支持与集群关联的存储帐户。您必须创建新存储帐户。
对于 Red Hat OpenShift Data Foundation,您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: YOUR_RH_DATA_FOUNDATION_BUCKET endpoint: YOUR_RH_DATA_FOUNDATION_ENDPOINT 1 insecure: false access_key: YOUR_RH_DATA_FOUNDATION_ACCESS_KEY secret_key: YOUR_RH_DATA_FOUNDATION_SECRET_KEY
- 1
- 输入没有协议部分的 URL。输入您的 Red Hat OpenShift Data Foundation 端点的 URL,它可能类似以下 URL:
example.redhat.com:443
。
如需了解更多详细信息,请参阅 Red Hat OpenShift Data Foundation。
- 对于 IBM 上的 Red Hat OpenShift (ROKS),您的 secret 可能类似以下文件:
apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: YOUR_ROKS_S3_BUCKET endpoint: YOUR_ROKS_S3_ENDPOINT 1 insecure: true access_key: YOUR_ROKS_ACCESS_KEY secret_key: YOUR_ROKS_SECRET_KEY
- 1
- 输入没有协议部分的 URL。输入您的 Red Hat OpenShift Data Foundation 端点的 URL,它可能类似以下 URL:
example.redhat.com:443
。如需了解更多详细信息,请参阅 IBM 云文档 Cloud Object Storage。务必使用服务凭据来连接对象存储。如需了解更多详细信息,请参阅 IBM Cloud 文档,云对象存储和服务凭证。
1.3.2.1. 为 AWS 安全令牌服务配置存储
对于 Amazon S3 或 S3 兼容存储,您还可以使用由 AWS 安全令牌服务(AWS STS)生成的简短的、有有限权限的凭证。如需了解更多详细信息,请参阅 AWS 安全令牌服务 文档。
使用 AWS 安全服务生成访问密钥需要以下额外步骤:
- 创建一个 IAM 策略,限制对 S3 存储桶的访问。
- 使用信任策略创建 IAM 角色,为 OpenShift Container Platform 服务帐户生成 JWT 令牌
- 为需要访问 S3 存储桶的 Observability 服务帐户指定注解。您可以在 Set 环境 步骤中找到如何使用 Red Hat OpenShift Service on AWS (ROSA)集群中的 Observability 的示例。如需了解更多详细信息,请参阅 Red Hat OpenShift Service on AWS (ROSA),以及 ROSA with STS explained 了解有关使用 STS 令牌的要求和设置的信息。
1.3.2.2. 使用 AWS 安全服务生成访问密钥
完成以下步骤,使用 AWS 安全服务生成访问密钥:
设置 AWS 环境。运行以下命令:
export POLICY_VERSION=$(date +"%m-%d-%y") export TRUST_POLICY_VERSION=$(date +"%m-%d-%y") export CLUSTER_NAME=<my-cluster> export S3_BUCKET=$CLUSTER_NAME-acm-observability export REGION=us-east-2 export NAMESPACE=open-cluster-management-observability export SA=tbd export SCRATCH_DIR=/tmp/scratch export OIDC_PROVIDER=$(oc get authentication.config.openshift.io cluster -o json | jq -r .spec.serviceAccountIssuer| sed -e "s/^https:\/\///") export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) export AWS_PAGER="" rm -rf $SCRATCH_DIR mkdir -p $SCRATCH_DIR
使用以下命令创建 S3 存储桶:
aws s3 mb s3://$S3_BUCKET
创建一个
s3-policy
JSON 文件来访问 S3 存储桶。运行以下命令:{ "Version": "$POLICY_VERSION", "Statement": [ { "Sid": "Statement", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:DeleteObject", "s3:PutObject", "s3:PutObjectAcl", "s3:CreateBucket", "s3:DeleteBucket" ], "Resource": [ "arn:aws:s3:::$S3_BUCKET/*", "arn:aws:s3:::$S3_BUCKET" ] } ] }
使用以下命令应用策略:
S3_POLICY=$(aws iam create-policy --policy-name $CLUSTER_NAME-acm-obs \ --policy-document file://$SCRATCH_DIR/s3-policy.json \ --query 'Policy.Arn' --output text) echo $S3_POLICY
创建
TrustPolicy
JSON 文件。运行以下命令:{ "Version": "$TRUST_POLICY_VERSION", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": [ "system:serviceaccount:${NAMESPACE}:observability-thanos-query", "system:serviceaccount:${NAMESPACE}:observability-thanos-store-shard", "system:serviceaccount:${NAMESPACE}:observability-thanos-compact" "system:serviceaccount:${NAMESPACE}:observability-thanos-rule", "system:serviceaccount:${NAMESPACE}:observability-thanos-receive", ] } } } ] }
使用以下命令,为 AWS Prometheus 和 CloudWatch 创建角色:
S3_ROLE=$(aws iam create-role \ --role-name "$CLUSTER_NAME-acm-obs-s3" \ --assume-role-policy-document file://$SCRATCH_DIR/TrustPolicy.json \ --query "Role.Arn" --output text) echo $S3_ROLE
将策略附加到角色。运行以下命令:
aws iam attach-role-policy \ --role-name "$CLUSTER_NAME-acm-obs-s3" \ --policy-arn $S3_POLICY
您的 secret 可能类似以下文件:
config
部分指定signature_version2: false
,且不指定access_key
和secret_key
:apiVersion: v1 kind: Secret metadata: name: thanos-object-storage namespace: open-cluster-management-observability type: Opaque stringData: thanos.yaml: | type: s3 config: bucket: $S3_BUCKET endpoint: s3.$REGION.amazonaws.com signature_version2: false
-
指定
MultiClusterObservability
自定义资源中的服务帐户注解,如 创建 MultiClusterObservability 自定义资源 部分所述。 使用以下命令,检索云供应商的 S3 access key 和 secret key。您必须在 secret 中对
base64
字符串进行解码、编辑和编码:要为云供应商编辑和解码 S3 访问密钥,请运行以下命令:
YOUR_CLOUD_PROVIDER_ACCESS_KEY=$(oc -n open-cluster-management-observability get secret <object-storage-secret> -o jsonpath="{.data.thanos\.yaml}" | base64 --decode | grep access_key | awk '{print $2}')
要查看云供应商的访问密钥,请运行以下命令:
echo $YOUR_CLOUD_PROVIDER_ACCESS_KEY
要为云供应商编辑和解码 secret 密钥,请运行以下命令:
YOUR_CLOUD_PROVIDER_SECRET_KEY=$(oc -n open-cluster-management-observability get secret <object-storage-secret> -o jsonpath="{.data.thanos\.yaml}" | base64 --decode | grep secret_key | awk '{print $2}')
- 运行以下命令,以查看云供应商的 secret 密钥:
echo $YOUR_CLOUD_PROVIDER_SECRET_KEY
通过检查以下部署和有状态集的 pod 来验证是否启用了 Observability。您可能会收到以下信息:
observability-thanos-query (deployment) observability-thanos-compact (statefulset) observability-thanos-receive-default (statefulset) observability-thanos-rule (statefulset) observability-thanos-store-shard-x (statefulsets)
1.3.2.3. 创建 MultiClusterObservability 自定义资源
使用 MultiClusterObservability
自定义资源为各种组件指定持久性卷存储大小。您必须在初始创建 MultiClusterObservability
自定义资源时设置存储大小。当您部署后更新存储大小值时,只有在存储类支持动态卷扩展时,更改才会生效。如需更多信息,请参阅 Red Hat OpenShift Container Platform 文档中的扩展持久性卷。
完成以下步骤,在 hub 集群中创建 MultiClusterObservability
自定义资源:
创建名为
multiclusterobservability_cr.yaml
的MultiClusterObservability
自定义资源 YAML 文件。查看以下默认 YAML 文件以查看可观察性:
apiVersion: observability.open-cluster-management.io/v1beta2 kind: MultiClusterObservability metadata: name: observability spec: observabilityAddonSpec: {} storageConfig: metricObjectStorage: name: thanos-object-storage key: thanos.yaml
您可能需要修改
advanced
部分中的retentionConfig
参数的值。如需更多信息,请参阅 Thanos Downsampling 分辨率和保留时间。根据受管集群的数量,您可能需要为有状态的集合更新存储量。如果您的 S3 存储桶被配置为使用 STS 令牌,请给服务帐户通过 S3 角色使用 STS。查看以下配置:spec: advanced: compact: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE store: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE rule: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE receive: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE query: serviceAccountAnnotations: eks.amazonaws.com/role-arn: $S3_ROLE
如需更多信息,请参阅 Observability API。
要在基础架构机器集上部署,您必须通过更新
MultiClusterObservability
YAML 中的nodeSelector
来为设置设置一个标签。您的 YAML 可能类似以下内容:nodeSelector: node-role.kubernetes.io/infra: ""
如需更多信息,请参阅 创建基础架构机器集。
运行以下命令,将 Observability YAML 应用到集群:
oc apply -f multiclusterobservability_cr.yaml
用于 Thanos、Grafana 和 Alertmanager 的所有 pod 在
open-cluster-management-observability
命名空间中创建。所有连接到 Red Hat Advanced Cluster Management hub 集群的受管集群都会被启用,以将指标数据发送回 Red Hat Advanced Cluster Management Observability 服务。- 通过启动 Grafana 仪表板来验证 Observability 服务是否已启用,并且数据是否填充。
- 在控制台 Overview 页面或 Clusters 页面点击位于控制台标头旁的 Grafana 链接。
访问
multicluster-observability-operator
部署,验证multicluster-observability-operator
pod 正在被multiclusterhub-operator
部署进行部署。运行以下命令:oc get deploy multicluster-observability-operator -n open-cluster-management --show-labels
您可能会收到以下结果:
NAME READY UP-TO-DATE AVAILABLE AGE LABELS multicluster-observability-operator 1/1 1 1 35m installer.name=multiclusterhub,installer.namespace=open-cluster-management
查看
multicluster-observability-operator
部署的labels
部分,以了解与资源关联的标签。labels
部分可能包含以下详情:labels: installer.name: multiclusterhub installer.namespace: open-cluster-management
-
可选: 如果要排除特定的受管集群收集 Observability 数据,请在集群中添加以下集群标签:
observability: disabled
。
Observability 服务被启用。启用 Observability 服务后,会启动以下功能:
- 所有来自受管集群的警报管理器都转发到 Red Hat Advanced Cluster Management hub 集群。
所有连接到 Red Hat Advanced Cluster Management hub 集群的受管集群都会被启用,以将警报发回到 Red Hat Advanced Cluster Management Observability 服务。您可以配置 Red Hat Advanced Cluster Management Alertmanager 来处理重复数据删除、分组和将警报路由到正确的接收器集成,如电子邮件、PagerDuty 或 OpsGenie。您还可以处理静默和禁止警报。
注: 只有受支持的 OpenShift Container Platform 版本上的受管集群支持将警报转发到 Red Hat Advanced Cluster Management hub 集群功能。安装启用了 Observability 的 Red Hat Advanced Cluster Management 后,警报会自动转发到 hub 集群。请参阅转发警报以了解更多信息。
1.3.3. 从 Red Hat OpenShift Container Platform 控制台启用可观察性
另外,您还可以从 Red Hat OpenShift Container Platform 控制台启用 Observability,创建一个名为 open-cluster-management-observability
的项目。完成以下步骤:
-
在
open-cluster-management-observability
项目中创建名为multiclusterhub-operator-pull-secret
的镜像 pull-secret。 -
在
open-cluster-management-observability
项目中创建名为thanos-object-storage
的对象存储 secret, 。 - 输入对象存储 secret 详细信息,然后单击 Create。请参阅 Enabling Observability 部分的第 4 步来查看 secret 的示例。
-
创建
MultiClusterObservability
自定义资源实例。当您收到以下信息时,Observability 服务会从 OpenShift Container Platform 中成功启用:Observability components are deployed and running
。
1.3.3.1. 验证 Thanos 版本
在集群中部署 Thanos 后,从命令行界面(CLI)验证 Thanos 版本。
登录到 hub 集群后,在 Observability pod 中运行以下命令以接收 Thanos 版本:
thanos --version
此时会显示 Thanos 版本。
1.3.4. 禁用 Observability
您可以禁用 Observability,这会在 Red Hat Advanced Cluster Management hub 集群中停止数据收集。
1.3.4.1. 在所有集群中禁用 Observability
通过删除所有受管集群中的 Observability 组件来禁用 Observability。
通过将 enableMetrics
设置为 false
来更新 multicluster-observability-operator
资源。更新的资源可能类似如下:
spec: imagePullPolicy: Always imagePullSecret: multiclusterhub-operator-pull-secret observabilityAddonSpec: 1 enableMetrics: false 2 workers: 3
1.3.4.2. 在单个集群中禁用 Observability
通过删除特定受管集群中的 Observability 组件来禁用 Observability。完成以下步骤:
-
将
observability: disabled
标签添加到managedclusters.cluster.open-cluster-management.io
自定义资源中。 在 Red Hat Advanced Cluster Management 控制台 Clusters 页面中,将
observability=disabled
标签添加到指定的集群中。注: 当一个带有 Observability 组件的受管集群被分离时,metric
-collector
部署会被删除。
1.3.5. 删除 Observability
当删除 MultiClusterObservability
自定义资源时,您要禁用并卸载 Observability 服务。在 OpenShift Container Platform 控制台导航中,选择 Operators > Installed Operators > Advanced Cluster Manager for Kubernetes。删除 MultiClusterObservability
自定义资源。
1.3.6. 其他资源
对象存储信息的云供应商文档链接:
- 请参阅使用 Observability。
- 要了解更多有关自定义 Observability 服务的信息,请参阅自定义 Observability。
- 如需更多相关主题,返回到 Observability 服务。
1.4. 定制可观察性配置
启用可观察性后,根据环境的具体需求自定义可观察性配置。管理并查看可观察性服务收集的集群团队数据。
需要的访问权限:集群管理员
1.4.1. 创建自定义规则
通过在可观察性资源中添加 Prometheus 记录规则和 警报规则,为可观察性安装创建自定义规则。
要预先计算昂贵的表达式,请使用带有 Prometheus 的记录规则功能来创建警报条件,并根据您要将警报发送到外部服务来发送通知。结果保存为一组新的时间序列。查看以下示例,以便在 observability-thanos-rule-custom-rules
配置映射中创建自定义警报规则:
要获得当 CPU 用量 paases 您定义的值的通知,请创建以下自定义警报规则:
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
备注:
-
当您更新自定义规则时,
observability-thanos-rule
pod 会自动重启。 - 您可以在配置中创建多个规则。
-
默认警报规则位于
open-cluster-management-observability
命名空间的observability-thanos-rule-default-rules
配置映射中。
-
当您更新自定义规则时,
要创建自定义记录规则以获取 pod 的容器内存缓存总和,请创建以下自定义规则:
data: custom_rules.yaml: | groups: - name: container-memory rules: - record: pod:container_memory_cache:sum expr: sum(container_memory_cache{pod!=""}) BY (pod, container)
注: 在修改了配置映射后,配置会自动重新加载。由于
observability-thanos-rule
sidecar 中的config-reload
,所以配置会重新加载。
要验证警报规则是否正常工作,请进入 Grafana 仪表板,选择 Explore 页面并查询 ALERTS
。只有在创建了警报时,Grafana 中才有警报。
1.4.2. 添加自定义指标
将指标添加到 metrics_list.yaml
文件中,以从受管集群收集。完成以下步骤:
在添加自定义指标前,使用以下命令验证
mco observability
是否已启用:oc get mco observability -o yaml
检查
status.conditions.message
部分中的以下信息:Observability components are deployed and running
使用以下命令在
open-cluster-management-observability
命名空间中创建observability-metrics-custom-allowlist
配置映射:oc apply -n open-cluster-management-observability -f observability-metrics-custom-allowlist.yaml
将自定义指标名称添加到
metrics_list.yaml
参数。配置映射的 YAML 可能类似以下内容:kind: ConfigMap apiVersion: v1 metadata: name: observability-metrics-custom-allowlist data: metrics_list.yaml: | names: 1 - node_memory_MemTotal_bytes rules: 2 - 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))
您可以使用其中一个或两个部分。对于用户工作负载指标,请参阅添加用户工作负载指标部分。
注: 您还可以在自定义 metrics allowlist 中单独自定义每个受管集群,而不是在整个团队中应用它。您可以直接在受管集群中创建相同的 YAML 来自定义它。
- 通过从 Grafana 仪表板 Explore 页面查询指标,从自定义指标验证数据收集。您也可以在您自己的仪表板中使用自定义指标。
1.4.2.1. 添加用户工作负载指标
从 OpenShift Container Platform 中的工作负载收集 OpenShift Container Platform 用户定义的指标,以显示 Grafana 仪表板中的指标。完成以下步骤:
在 OpenShift Container Platform 集群上启用监控。请参阅附加资源部分 的为用户定义的项目启用监控。
如果您有一个为用户定义的工作负载启用监控的受管集群,用户工作负载位于
test
命名空间中,并生成指标。Prometheus 从 OpenShift Container Platform 用户工作负载收集这些指标。将用户工作负载指标添加到
observability-metrics-custom-allowlist
配置映射中,以收集test
命名空间中的指标。查看以下示例:kind: ConfigMap apiVersion: v1 metadata: name: observability-metrics-custom-allowlist namespace: test data: uwl_metrics_list.yaml: 1 names: 2 - sample_metrics
1.4.2.2. 删除默认指标
如果您不想从受管集群收集特定指标的数据,请从 observability-metrics-custom-allowlist.yaml
文件中删除指标。当您删除指标时,不会从受管集群收集指标数据。完成以下步骤以删除默认指标:
使用以下命令验证
mco observability
是否已启用:oc get mco observability -o yaml
您可以在 metrics 名称的开头使用连字符
-
将默认指标名称添加到metrics_list.yaml
参数中。查看以下指标示例:-cluster_infrastructure_provider
使用以下命令在
open-cluster-management-observability
命名空间中创建observability-metrics-custom-allowlist
配置映射:oc apply -n open-cluster-management-observability -f observability-metrics-custom-allowlist.yaml
- 验证 observability 服务是否没有从受管集群收集特定指标。当您从 Grafana 仪表板查询指标时,指标不会显示。
1.4.3. 为保留添加高级配置
要根据您的需要更新每个可观察性组件的保留,请添加 advanced
configuration 部分。完成以下步骤:
使用以下命令编辑
MultiClusterObservability
自定义资源:oc edit mco observability -o yaml
将
advanced
部分添加到 文件。您的 YAML 文件可能类似以下内容:spec: advanced: retentionConfig: blockDuration: 2h deleteDelay: 48h retentionInLocal: 24h retentionResolutionRaw: 365d retentionResolution5m: 365d retentionResolution1h: 365d receive: resources: limits: memory: 4096Gi replicas: 3
备注:
-
有关可添加到
高级配置
中的所有参数的描述,请参阅 Observability API 文档。 -
保留所有分辨率级别的默认保留(如
retentionResolutionRaw
、retentionResolution5m
或retentionResolution1h
)是 365 天(365d
)。您必须在MultiClusterObservability
spec.advanced.retentionConfig
参数中为解析保留设置一个显式值。
-
有关可添加到
如果您从早期版本升级并希望保留该版本保留配置,请添加前面提到的配置。完成以下步骤:
运行以下命令来进入
MultiClusterObservability
资源:edit mco observability
-
在
spec.advanced.retentionConfig
参数中,应用以下配置:
spec: advanced: retentionConfig: retentionResolutionRaw: 365d retentionResolution5m: 365d retentionResolution1h: 365d
1.4.4. 单节点 OpenShift 集群的动态指标
动态指标收集根据特定条件支持自动指标收集。默认情况下,单节点 OpenShift 集群不会收集 pod 和容器资源指标。当单节点 OpenShift 集群达到特定级别的资源消耗后,会动态收集定义的粒度指标。当集群资源消耗在一段时间内持续低于阈值时,细致的指标集合会停止。
这些指标会根据由集合规则指定的受管集群上的条件动态收集。由于这些指标是动态收集的,所以以下 Red Hat Advanced Cluster Management Grafana 仪表板不会显示任何数据。激活集合规则并收集相应指标时,以下面板会在启动集合规则的时间里显示数据:
- Kubernetes/Compute Resources/Namespace (Pods)
- Kubernetes/Compute Resources/Namespace (Workloads)
- Kubernetes/Compute Resources/Nodes (Pods)
- Kubernetes/Compute Resources/Pod
- Kubernetes/Compute Resources/Workload A collection 规则包括以下条件:
- 动态收集的一组指标。
- 使用 PromQL 表达式定义的条件。
-
集合的间隔,该集合必须设为
true
。 - 一个匹配表达式,用于选择需要评估收集规则的集群。
默认情况下,集合规则每 30 秒或以特定时间间隔在受管集群上持续评估。集合间隔和时间间隔中的最低值具有高优先权。当收集规则条件在 for
属性指定的持续时间内保留后,收集规则将启动,由规则指定的指标会在受管集群上自动收集。指标集合会在受管集群上不再存在集合规则条件后自动停止,至少有 15 分钟。
集合规则分组为名为 gather_rules
的参数部分,该部分可启用或禁用作为组。Red Hat Advanced Cluster Management 安装包含集合规则组 SNOResourceUsage
,它有两个默认集合规则: HighCPUUsage
和 HighMemoryUsage
。HighCPUUsage
集合规则从节点 CPU 使用率超过 70% 时开始。如果单节点 OpenShift 集群的总内存使用率超过可用节点内存的 70%,则 HighMemoryUsage
集合规则开始。目前,前面提到的阈值是固定的,且无法更改。当集合规则开始超过 for
属性指定的间隔时,系统会自动开始收集 dynamic_metrics
中指定的指标。
在以下 YAML 文件中查看 collect_rules
部分的动态指标列表:
collect_rules: - group: SNOResourceUsage annotations: description: > By default, a {sno} cluster does not collect pod and container resource metrics. Once a {sno} cluster reaches a level of resource consumption, these granular metrics are collected dynamically. When the cluster resource consumption is consistently less than the threshold for a period of time, collection of the granular metrics stops. selector: matchExpressions: - key: clusterType operator: In values: ["{sno}"] rules: - collect: SNOHighCPUUsage annotations: description: > Collects the dynamic metrics specified if the cluster cpu usage is constantly more than 70% for 2 minutes expr: (1 - avg(rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))) * 100 > 70 for: 2m dynamic_metrics: names: - container_cpu_cfs_periods_total - container_cpu_cfs_throttled_periods_total - kube_pod_container_resource_limits - kube_pod_container_resource_requests - namespace_workload_pod:kube_pod_owner:relabel - node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate - node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate - collect: SNOHighMemoryUsage annotations: description: > Collects the dynamic metrics specified if the cluster memory usage is constantly more than 70% for 2 minutes expr: (1 - sum(:node_memory_MemAvailable_bytes:sum) / sum(kube_node_status_allocatable{resource=\"memory\"})) * 100 > 70 for: 2m dynamic_metrics: names: - kube_pod_container_resource_limits - kube_pod_container_resource_requests - namespace_workload_pod:kube_pod_owner:relabel matches: - __name__="container_memory_cache",container!="" - __name__="container_memory_rss",container!="" - __name__="container_memory_swap",container!="" - __name__="container_memory_working_set_bytes",container!=""
可以在 custom-allowlist
中禁用 collect_rules.group
,如下例所示。当 collect_rules.group
禁用时,指标集合会恢复到之前的行为。这些指标定期收集,指定间隔:
collect_rules: - group: -SNOResourceUsage
只有在启动规则时,数据才会在 Grafana 中显示。
1.4.5. 从控制台更新 MultiClusterObservability 自定义资源副本
如果工作负载增加,增加可观察 pod 的副本数。从您的 hub 集群中进入到 Red Hat OpenShift Container Platform 控制台。找到 MultiClusterObservability
自定义资源,并更新您要更改副本的组件的 replicas
参数值。更新的 YAML 可能类似以下内容:
spec: advanced: receive: replicas: 6
有关 mco observability
自定义资源中的参数的更多信息,请参阅 Observability API 文档。
1.4.6. 增加并减少持久性卷和持久性卷声明
增加并减少持久性卷和持久性卷声明,以更改存储类中的存储量。完成以下步骤:
-
要增大持久性卷的大小,如果存储类支持扩展卷,请更新
MultiClusterObservability
自定义资源。 要缩小持久性卷的大小,请使用持久性卷移除 pod,请删除持久性卷并重新创建它们。您可能会遇到持久性卷中的数据丢失。完成以下步骤:
-
通过在
MultiClusterObservability
自定义资源中添加注解mco-pause: "true"
来暂停MultiClusterObservability
operator。 查找所需组件的有状态集或部署。将其副本数更改为
0。
这会启动关闭,它会在适用于避免数据丢失时上传本地数据。例如,ThanosReceive
stateful 集名为observability-thanos-receive-default
,默认有三个副本。因此,您要查找以下持久性卷声明:-
data-observability-thanos-receive-default-0
-
data-observability-thanos-receive-default-1
-
data-observability-thanos-receive-default-2
-
- 删除所需组件所使用的持久性卷和持久性卷声明。
-
在
MultiClusterObservability
自定义资源中,将组件的存储大小编辑为 storage size 字段中所需的数量。带有组件名称的前缀。 -
通过删除之前添加的注解来取消暂停
MultiClusterObservability
Operator。 -
要在 Operator 暂停后启动协调,请删除
multicluster-observability-operator
和observatorium-operator
pod。pod 会被立即重新创建并协调。
-
通过在
-
通过检查
MultiClusterObservability
自定义资源来验证持久性卷和卷声明是否已更新。
1.4.7. 自定义路由证书
如果要自定义 OpenShift Container Platform 路由认证,则必须在 alt_names
部分添加路由。要确保 OpenShift Container Platform 路由可以访问,请添加以下信息:alertmanager.apps.<domainname>
, observatorium-api.apps.<domainname>
, rbac-query-proxy.apps.<domainname>
。
如需了解更多详细信息,请参阅监管文档中的 alertmanager 路由证书。
注意 :用户负责证书轮转和更新。
1.4.8. 自定义用于访问对象存储的证书
您可以通过创建一个包含证书颁发机构并配置 MultiClusterObservability
自定义资源的 Secret
资源来配置与 observability 对象存储的安全连接。完成以下步骤:
要验证对象存储连接,请使用以下命令在包含证书颁发机构的文件中创建
Secret
对象:oc create secret generic <tls_secret_name> --from-file=ca.crt=<path_to_file> -n open-cluster-management-observability
- 另外,您可以应用以下 YAML 来创建 secret:
apiVersion: v1 kind: Secret metadata: name: <tls_secret_name> namespace: open-cluster-management-observability type: Opaque data: ca.crt: <base64_encoded_ca_certificate>
可选: 如果要启用 mutual TLS,则需要在上一个 secret 中添加
public.crt
和private.key
密钥。使用以下命令在
metricObjectStorage
部分添加 TLS secret 详情:oc edit mco observability -o yaml
您的文件可能类似以下 YAML:
metricObjectStorage: key: thanos.yaml name: thanos-object-storage tlsSecretName: tls-certs-secret 1 tlsSecretMountPath: /etc/minio/certs 2
使用证书详情添加
http_config.tls_config
部分,更新thanos-object-storage
secret 中的thanos.yaml
定义。查看以下示例:thanos.yaml: | type: s3 config: bucket: "thanos" endpoint: "minio:9000" insecure: false 1 access_key: "minio" secret_key: "minio123" http_config: tls_config: ca_file: /etc/minio/certs/ca.crt 2 insecure_skip_verify: false
可选: 如果要启用 mutual TLS,您需要将
cert_file
和key_file
密钥添加到tls_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 1 cert_file: /etc/minio/certs/public.crt key_file: /etc/minio/certs/private.key insecure_skip_verify: false
- 1
ca_file
、cert_file
和key_file
的路径必须与MultiClusterObservability
自定义资源的tlsSecretMountPath
匹配。ca.crt
、public.crt
和private.crt
必须与tls_secret_name
>Secret
资源中的对应密钥匹配。
要验证您可以访问对象存储,请检查是否部署了 pod。运行以下命令:
oc -n open-cluster-management-observability get pods -l app.kubernetes.io/name=thanos-store
1.4.9. 为可观察性附加组件配置代理设置
配置代理设置,以允许受管集群的通信通过 HTTP 和 HTTPS 代理服务器访问 hub 集群。通常,附加组件不需要任何特殊配置来支持 hub 集群和受管集群之间的 HTTP 和 HTTPS 代理服务器。但是,如果启用了 observability 附加组件,则必须完成代理配置。
1.4.10. 前提条件
- 您有一个 hub 集群。
- 您已启用了 hub 集群和受管集群之间的代理设置。
完成以下步骤,为可观察性附加组件配置代理设置:
- 进入 hub 集群上的集群命名空间。
通过添加
spec.proxyConfig
参数,使用代理设置创建AddOnDeploymentConfig
资源。查看以下 YAML 示例:apiVersion: addon.open-cluster-management.io/v1alpha1 kind: AddOnDeploymentConfig metadata: name: <addon-deploy-config-name> namespace: <managed-cluster-name> spec: agentInstallNamespace: open-cluster-managment-addon-observability proxyConfig: httpsProxy: "http://<username>:<password>@<ip>:<port>" 1 noProxy: ".cluster.local,.svc,172.30.0.1" 2
要获取 IP 地址,请在受管集群中运行以下命令:
oc -n default describe svc kubernetes | grep IP:
进入
ManagedClusterAddOn
资源,并通过引用您所做的AddOnDeploymentConfig
资源来更新它。查看以下 YAML 示例:apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: observability-controller namespace: <managed-cluster-name> spec: installNamespace: open-cluster-managment-addon-observability configs: - group: addon.open-cluster-management.io resource: AddonDeploymentConfig name: <addon-deploy-config-name> namespace: <managed-cluster-name>
验证代理设置。如果您成功配置了代理设置,则由受管集群中的可观察性附加组件代理部署的指标收集器将数据发送到 hub 集群。完成以下步骤:
- 进入 hub 集群,然后在 Grafana 仪表板上显示受管集群。
- 查看代理设置的指标。
1.4.11. 禁用可观察性附加组件的代理设置
如果您的开发需要更改,您可能需要为 hub 集群和受管集群禁用您配置的可观察附加组件的代理设置。您可以随时禁用 observability 附加组件的代理设置。完成以下步骤:
-
进入
ManagedClusterAddOn
资源。 -
删除引用的
AddOnDeploymentConfig
资源。
1.4.12. 自定义受管集群 Observatorium API 和 Alertmanager URL (技术预览)
在使用负载均衡器或保留代理时,您可以自定义受管集群用来与 hub 集群通信的 Observatorium API 和 Alertmanager URL,以维护所有 Red Hat Advanced Cluster Management 功能。要自定义 URL,请完成以下步骤:
-
将您的 URL 添加到
MultiClusterObservability
spec
的advanced
部分。请参见以下示例:
spec: advanced: customObservabilityHubURL: <yourURL> customAlertmanagerHubURL: <yourURL>
备注:
-
仅支持 HTTPS URL。如果您没有在 URL 中添加
https://
,则方案会自动添加。 -
您可以在
customObservabilityHubURL
spec
中包含 Remote Write API 的标准路径/api/metrics/v1/default/api/v1/receive
。如果没有包括该路径,Observability 服务会在运行时自动添加路径。 任何用于自定义 Observability hub 集群 URL 的中间组件都无法使用 TLS 终止,因为组件依赖于 MTLS 身份验证。自定义 Alertmanager hub 集群 URL 支持使用您自己的现有证书指令的中间组件 TLS 终止。
-
如果您使用自定义ObservabilityHubURL
,请使用以下模板创建一个路由对象。将<intermediate_component_url&
gt; 替换为中间组件 URL:
-
apiVersion: route.openshift.io/v1 kind: Route metadata: name: proxy-observatorium-api namespace: open-cluster-management-observability spec: host: <intermediate_component_url> port: targetPort: public tls: insecureEdgeTerminationPolicy: None termination: passthrough to: kind: Service name: observability-observatorium-api weight: 100 wildcardPolicy: None
-
如果您使用
customAlertmanagerHubURL
,请使用以下模板创建路由对象。将<intermediate_component_url&
gt; 替换为中间组件 URL:
apiVersion: route.openshift.io/v1 kind: Route metadata: name: alertmanager-proxy namespace: open-cluster-management-observability spec: host: <intermediate_component_url> path: /api/v2 port: targetPort: oauth-proxy tls: insecureEdgeTerminationPolicy: Redirect termination: reencrypt to: kind: Service name: alertmanager weight: 100 wildcardPolicy: None
1.4.13. 配置细粒度 RBAC (技术预览)
要限制对集群中特定命名空间的指标访问,请使用精细的访问控制(RBAC)。使用精细 RBAC,您可以允许应用程序团队只查看授予它们访问权限的命名空间的指标。
您必须为该 hub 集群的用户在 hub 集群上配置指标访问控制。在这个 hub 集群中,ManagedCluster
自定义资源代表每个受管集群。要配置 RBAC 并选择允许的命名空间,请使用 ManagedCluster
自定义资源中指定的规则和操作操作动词。
例如,有一个名为 my-awesome-app
的应用程序,此应用程序位于两个不同的受管集群 devcluster1
和 devcluster2
中。两个集群都位于 AwesomeAppNS
命名空间中。您有一个名为 my-awesome-app-admins
的 admin
用户组,您希望将此用户组只能从 hub 集群上的这两个命名空间中访问指标。
在本例中,要使用精细的 RBAC 来限制用户组访问,请完成以下步骤:
定义具有访问指标的权限的
ClusterRole
资源。您的资源可能类似以下 YAML:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: awesome-app-metrics-role rules: - apiGroups: - "cluster.open-cluster-management.io" resources: - managedclusters: 1 resourceNames: 2 - devcluster1 - devcluster2 verbs: 3 - metrics/AwesomeAppNS
定义
ClusterRoleBinding
资源,它将组my-awesome-app-admins
绑定到awesome-app-metrics-role
的ClusterRole
资源。您的资源可能类似以下 YAML:kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: awesome-app-metrics-role-binding subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: my-awesome-app-admins roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: awesome-app-metrics-role
完成这些步骤后,当 my-awesome-app-admins
中的用户登录到 Grafana 控制台时,它们有以下限制:
- 用户不会看到用于汇总机级数据的仪表板的数据。
-
用户只能选择
ClusterRole
资源中指定的受管集群和命名空间。
要设置不同类型的用户访问,请定义单独的 ClusterRole
和 ClusterRoleBindings
资源来代表命名空间中的不同受管集群。
1.4.14. 其他资源
- 如需更多信息,请参阅 Prometheus 配置。有关记录规则和警报规则的更多信息,请参阅 Prometheus 文档中的 记录规则和警报规则。
- 有关查看仪表板的更多信息,请参阅使用 Grafana 仪表板。
- 请参阅 将指标导出到外部端点。
- 请参阅 为用户定义的项目启用监控。
- 请参阅 Observability API。
- 有关为 alertmanager 路由更新证书的详情,请参考 替换 alertmanager 的证书。
- 有关可观察警报的详情,请参阅 Observability 警报
- 如需了解更多有关警报转发的信息,请参阅 Prometheus Alertmanager 文档。
- 如需更多信息,请参阅 Observability 警报。
- 有关可观察性服务的更多主题,请参阅 Observability 服务。
- 如需更多信息,请参阅管理工作负载分区。
1.5. 使用可观察性
使用 observability 服务查看跨团队的集群利用率。
1.5.1. 使用 observability API 查询指标
Observability 提供了一个外部 API,用于通过 OpenShift 路由(rbac-query-proxy
)查询指标。请参见以下选项以获取对 rbac-query-proxy
路由的查询:
您可以使用以下命令获取路由的详情:
oc get route rbac-query-proxy -n open-cluster-management-observability
-
您还可以使用 OpenShift OAuth 访问令牌访问
rbac-query-proxy
路由。该令牌应当与用户或服务帐户关联,该帐户有权获取命名空间。如需更多信息,请参阅管理用户拥有的 OAuth 访问令牌。
完成以下步骤,为可观察性创建 proxy-byo-cert
secret:
获取默认 CA 证书,并将密钥
tls.crt
的内容存储在本地文件中。运行以下命令:oc -n openshift-ingress get secret router-certs-default -o jsonpath="{.data.tls\.crt}" | base64 -d > ca.crt
运行以下命令以查询指标:
curl --cacert ./ca.crt -H "Authorization: Bearer {TOKEN}" https://{PROXY_ROUTE_URL}/api/v1/query?query={QUERY_EXPRESSION}
注:
QUERY_EXPRESSION
是标准的 Prometheus 查询表达式。例如,通过将前面提到的命令中的 URL 替换为以下 URL:https://{PROXY_ROUTE_URL}/api/v1/query?query=cluster_infrastructure_provider
来查询指标cluster_infrastructure_provider
。如需了解更多详细信息,请参阅查询 Prometheus。运行以下命令,使用生成的证书创建
proxy-byo-ca
secret:oc -n open-cluster-management-observability create secret tls proxy-byo-ca --cert ./ca.crt --key ./ca.key
使用以下命令,使用生成的证书创建
proxy-byo-cert
secret:oc -n open-cluster-management-observability create secret tls proxy-byo-cert --cert ./ingress.crt --key ./ingress.key
1.5.2. 将指标导出到外部端点
将指标导出到外部端点,实时支持 Prometheus 远程写入规格。完成以下步骤,将指标导出到外部端点:
使用
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
optionalHTTP 客户端的高级配置。
HttpClientConfig
Name 描述 模式 basic_auth
可选用于基本身份验证的 HTTP 客户端配置。
tls_config
optionalTLS 的 HTTP 客户端配置。
BasicAuth
Name 描述 模式 username
可选基本授权的用户名。
字符串
password
可选基本授权的密码。
字符串
TLSConfig
Name
描述
模式
secret_name
必需包含证书的 secret 的名称。
字符串
ca_file_key
optionalsecret 中的 CA 证书的密钥(只在 insecure_skip_verify 设为 true 时才为可选)。
字符串
cert_file_key
requiredsecret 中客户端证书的密钥。
字符串
key_file_key
required机密中的客户端密钥的键。
字符串
insecure_skip_verify
optional用于跳过目标证书的验证参数。
bool
将
writeStorage
参数添加到MultiClusterObservability
自定义资源中,以添加您要导出的外部端点列表。查看以下示例:spec: storageConfig: writeStorage: 1 - key: ep.yaml name: victoriametrics
- 1
- 每个项目包含两个属性:name 和 key。name 是包含端点访问信息的 Kubernetes secret 的名称,key 是 secret 中内容的密钥。如果您在列表中添加多个项,则指标将导出到多个外部端点。
通过检查
acm_remote_write_requests_total
指标,在指标导出被启用后查看指标导出的状态。- 在 hub 集群的 OpenShift Container Platform 控制台中点 Observe 部分中的 Metrics 进入 Metrics 页面。
-
然后查询
acm_remote_write_requests_total
指标。该指标的值是在一个 observatorium API 实例上具有特定响应的请求总数。name
标签是外部端点的名称。code
标签是指标导出的 HTTP 请求的返回代码。
1.5.3. 使用仪表板查看和查找数据
通过从 hub 集群访问 Grafana 来查看来自受管集群的数据。您可以查询特定的警报并为查询添加过滤器。
例如,若要从单节点 OpenShift 集群探索 cluster_infrastructure_provider 警报,请使用以下查询表达式: cluster_infrastructure_provider{clusterType="SNO"}
注: 如果在单一节点受管集群中启用了可观察性,请不要设置 ObservabilitySpec.resources.CPU.limits
参数。当您设置 CPU 限制时,observability pod 会计算为受管集群的容量。请参阅附加资源部分中的管理工作负载分区。
1.5.3.1. 查看历史数据
当您查询历史数据时,手动设置查询参数选项来控制从仪表板显示的数据量。完成以下步骤:
- 在 hub 集群中,选择控制台标头中的 Grafana 链接。
- 选择 Edit Panel 来编辑集群仪表板。
- 在 Grafana 中的 Query 前端数据源中,点 Query 选项卡。
-
选择
$datasource
。 - 如果要查看更多数据,请增加 Step 参数部分的值。如果 Step parameter 部分为空,它会被自动计算。
-
找到 Custom query parameters 字段,然后选择
max_source_resolution=auto
。 - 要验证是否显示数据,请刷新 Grafana 页面。
您的查询数据会出现在 Grafana 仪表板中。
1.5.3.2. 查看 Red Hat Advanced Cluster Management 仪表板
当您启用 Red Hat Advanced Cluster Management observability 服务时,会提供三个仪表板。以下仪表板描述如下:
- Alert Analysis :正在在受管集群中生成的警报的概述仪表板。
- Clusters by Alert:警报仪表板,您可以根据警报名称过滤。
- Alerts by Cluster: 警报仪表板,您可以按集群过滤,并查看在集群环境中启动或待处理的警报的实时数据。
1.5.3.3. 查看 etcd 表
您还可以在 Grafana 中的 hub 集群仪表板中查看 etcd 表,以了解 etcd 作为数据存储的稳定性。从 hub 集群中选择 Grafana 链接来查看从 hub 集群收集的 etcd 表数据。此时会显示跨受管集群的领导选举更改。
1.5.3.4. 查看 Kubernetes API 服务器仪表板
查看以下选项以查看 Kubernetes API 服务器仪表板:
在 Grafana 中的 hub 集群仪表板中查看集群 fleet Kubernetes API 服务级别概述。
- 进入到 Grafana 仪表板。
选择 Kubernetes > Service-Level Overview > API Server 来访问受管仪表板菜单。此时会显示 Fleet Overview 和 Top Cluster 的详情。
在过去 7 或 30 天期间,超过 或满足目标服务级别目标 (SLO)值的集群总数,关闭和非关闭集群,并显示 API Server Request Duration。
在 Grafana 中的 hub 集群仪表板中查看 Kubernetes API 服务级别概述表。
- 从 hub 集群中进入到 Grafana 仪表板。
选择 Kubernetes > Service-Level Overview > API Server 来访问受管仪表板菜单。此时会显示 Fleet Overview 和 Top Cluster 的详情。
显示过去七或 30 天的错误预算,剩余停机时间和趋势。
1.5.3.5. 查看 OpenShift Virtualization 仪表板
您可以查看 Red Hat OpenShift Virtualization 仪表板,以查看安装 OpenShift Virtualization Operator 的每个集群的全面见解。此时会显示 Operator 的状态,它由活跃的 OpenShift Virtualization 警报和 Hyperconverged Cluster Operator 的条件决定。另外,您可以查看正在运行的虚拟机数量和每个集群的 operator 版本。
仪表板还列出影响 Operator 健康的警报,并单独包括所有 OpenShift Virtualization 警报,甚至不会影响 Operator 健康的警报。您可以根据集群名称、Operator 健康警报、警报健康影响和警报严重性过滤仪表板。
1.5.4. 其他资源
- 如需更多信息,请参阅 Prometheus Remote-Write 规格。
- 读取 启用可观察服务。
- 如需更多主题,请返回到 Observability 服务。
1.5.5. 使用 Grafana 仪表板
使用 Grafana 仪表板查看 hub 集群和受管集群指标。Grafana 警报仪表板中显示的数据依赖于来自受管集群的 警报
指标。警报
指标不会影响将警报转发到 hub 集群上的 Red Hat Advanced Cluster Management 警报管理器。因此,指标和警报有不同的传播机制,并遵循单独的代码路径。
即使在 Grafana 警报仪表板中看到数据,这无法保证受管集群警报成功转发到 Red Hat Advanced Cluster Management hub 集群警报管理器。如果从受管集群传播指标,您可以查看 Grafana 警报仪表板中显示的数据。
要将 Grafana 仪表板用于您的开发需求,请完成以下操作:
1.5.5.1. 设置 Grafana 开发人员实例
您可以通过创建一个 grafana-dev
实例来设计 Grafana 仪表板。确保使用最当前的 grafana-dev
实例。
完成以下步骤以设置 Grafana 开发人员实例:
-
克隆
open-cluster-management/multicluster-observability-operator/
存储库,以便您可以运行tools
文件夹中的脚本。 运行
setup-grafana-dev.sh
来设置 Grafana 实例。运行脚本时,会创建以下资源:secret/grafana-dev-config
、deployment.apps/grafana-dev
、service/grafana-dev
、ingress.extensions/grafana-dev
、persistentvolumeclaim/grafana-dev
:./setup-grafana-dev.sh --deploy secret/grafana-dev-config created deployment.apps/grafana-dev created service/grafana-dev created serviceaccount/grafana-dev created clusterrolebinding.rbac.authorization.k8s.io/open-cluster-management:grafana-crb-dev created route.route.openshift.io/grafana-dev created persistentvolumeclaim/grafana-dev created oauthclient.oauth.openshift.io/grafana-proxy-client-dev created deployment.apps/grafana-dev patched service/grafana-dev patched route.route.openshift.io/grafana-dev patched oauthclient.oauth.openshift.io/grafana-proxy-client-dev patched clusterrolebinding.rbac.authorization.k8s.io/open-cluster-management:grafana-crb-dev patched
使用
switch-to-grafana-admin.sh
脚本将用户角色切换到 Grafana 管理员。-
选择 Grafana URL
https:grafana-dev-open-cluster-management-observability.{OPENSHIFT_INGRESS_DOMAIN}
,并登录。 然后,运行以下命令来添加切换的用户作为 Grafana 管理员。例如,在使用
kubeadmin
登录后,运行以下命令:./switch-to-grafana-admin.sh kube:admin User <kube:admin> switched to be grafana admin
-
选择 Grafana URL
Grafana 开发人员实例已设置。
1.5.5.1.1. 验证 Grafana 版本
使用命令行界面(CLI)或者从 Grafana 用户界面验证 Grafana 版本。
登录到 hub 集群后,访问 observabilty-grafana
pod 终端。运行以下命令:
grafana-cli
当前在集群环境中部署的 Grafana 版本会被显示。
另外,您还可以导航到 Grafana 仪表板中的 Manage 选项卡。滚动到页面的末尾,其中列出了版本。
1.5.5.2. 设计您的 Grafana 仪表板
设置 Grafana 实例后,您可以设计仪表板。完成以下步骤以刷新 Grafana 控制台并设计您的仪表板:
- 在 Grafana 控制台中,通过在导航面板中选择 Create 图标来创建仪表板。选择 Dashboard,然后单击 Add new panel。
- 在 New Dashboard/Edit Panel 视图中导航到 Query 选项卡。
-
从数据源选择器中选择
Observatorium
并输入 PromQL 查询来配置查询。 - 在 Grafana 仪表板标头中点击仪表板标头中的 Save 图标。
- 添加一个描述性名称并点 Save。
1.5.5.2.1. 使用 ConfigMap 设计 Grafana 仪表板
使用 ConfigMap 设计 Grafana 仪表板。您可以使用 generate-dashboard-configmap-yaml.sh
脚本在本地生成仪表板 ConfigMap,并在本地保存 ConfigMap:
./generate-dashboard-configmap-yaml.sh "Your Dashboard Name" Save dashboard <your-dashboard-name> to ./your-dashboard-name.yaml
如果您没有运行上述脚本的权限,请完成以下步骤:
- 选择一个仪表板并点 Dashboard settings 图标。
- 在导航框中,点 JSON Model 图标。
-
复制仪表板 JSON 数据,并将它粘贴到
data
部分。 修改
name
并替换$your-dashboard-name
。在data.$your-dashboard-name.json.$$your_dashboard_json
的uid
项中输入一个 UUID(universally unique identifier)。您可以使用 uuidegen 等程序来创建 UUID。ConfigMap 可能类似以下文件:kind: ConfigMap apiVersion: v1 metadata: name: $your-dashboard-name namespace: open-cluster-management-observability labels: grafana-custom-dashboard: "true" data: $your-dashboard-name.json: |- $your_dashboard_json
备注:
如果在
grafana-dev
实例中创建了仪表板,您可以使用仪表板的名称,并在脚本中将其作为参数传递。例如,在grafana-dev
实例中创建一个名为 Demo Dashboard 的仪表板。通过 CLI,您可以运行以下脚本:./generate-dashboard-configmap-yaml.sh "Demo Dashboard"
运行脚本后,您可能会收到以下信息:
Save dashboard <demo-dashboard> to ./demo-dashboard.yaml
如果您的仪表板不在 General 文件夹中,您可以在此 ConfigMap 的
annotations
部分中指定文件夹名称:annotations: observability.open-cluster-management.io/dashboard-folder: Custom
完成 ConfigMap 的更新后,您可以安装它,将仪表板导入到 Grafana 实例。
通过 CLI 或 OpenShift Container Platform 控制台应用 YAML 文件来验证是否已创建 YAML 文件。创建 open-cluster-management-observability
命名空间中的 ConfigMap。通过 CLI 运行以下命令:
oc apply -f demo-dashboard.yaml
在 OpenShift Container Platform 控制台中,使用 demo-dashboard.yaml
文件创建 ConfigMap。控制面板位于 Custom 文件夹中。
1.5.5.3. 卸载 Grafana 开发者实例
卸载实例时,相关资源也会被删除。运行以下命令:
./setup-grafana-dev.sh --clean secret "grafana-dev-config" deleted deployment.apps "grafana-dev" deleted serviceaccount "grafana-dev" deleted route.route.openshift.io "grafana-dev" deleted persistentvolumeclaim "grafana-dev" deleted oauthclient.oauth.openshift.io "grafana-proxy-client-dev" deleted clusterrolebinding.rbac.authorization.k8s.io "open-cluster-management:grafana-crb-dev" deleted
1.5.5.4. 其他资源
- 请参阅 将指标导出到外部端点。
- 有关创建 UUID 的说明,请参阅 uuidegen。
- 如需了解更多详细信息,请参阅在 Grafana 中使用受管集群标签。
- 返回到使用 Grafana 仪表板页的开头。
- 有关主题,请参阅 Observing 环境介绍。
1.5.6. 在 Grafana 中使用受管集群标签
启用受管集群标签,将它们用于 Grafana 仪表板。当在 hub 集群中启用可观察性时,observability-managed-cluster-label-allowlist
ConfigMap 会在 open-cluster-management-observability
命名空间中创建。ConfigMap 包含由 observabilty-rbac-query-proxy
pod 维护的受管集群标签列表,用于在 ACM - Cluster Overview Grafana 仪表板中填充要过滤的标签名称列表。默认情况下,可观察性会忽略 observability-managed-cluster-label-allowlist
ConfigMap 中的标签子集。
当集群导入到受管集群团队或修改时,observability-rbac-query-proxy
pod 会监视对受管集群标签的任何更改,并自动更新 observability-managed-cluster-label-allowlist
ConfigMap 以反映更改。ConfigMap 仅包含唯一的标签名称,这些名称包含在 ignore_labels
或 labels
列表中。您的 observability-managed-cluster-label-allowlist
ConfigMap 可能类似以下 YAML 文件:
data: managed_cluster.yaml: | ignore_labels: 1 - clusterID - cluster.open-cluster-management.io/clusterset - feature.open-cluster-management.io/addon-application-manager - feature.open-cluster-management.io/addon-cert-policy-controller - feature.open-cluster-management.io/addon-cluster-proxy - feature.open-cluster-management.io/addon-config-policy-controller - feature.open-cluster-management.io/addon-governance-policy-framework - feature.open-cluster-management.io/addon-iam-policy-controller - feature.open-cluster-management.io/addon-observability-controller - feature.open-cluster-management.io/addon-search-collector - feature.open-cluster-management.io/addon-work-manager - installer.name - installer.namespace - local-cluster - name labels: 2 - cloud - vendor
+ <1> 任何 ConfigMap 的 ignore_labels
keylist 中列出的标签已从 ACM - Clusters Overview Grafana 仪表板上的下拉列表中删除。<2> 在 ACM - Clusters Overview Grafana 仪表板的下拉列表中显示启用的标签。值来自 acm_managed_cluster_labels
指标,具体取决于所选 label
键值。
继续阅读如何在 Grafana 中使用受管集群标签:
1.5.6.1. 添加受管集群标签
当您向 observability-managed-cluster-label-allowlist
ConfigMap 中添加受管集群标签时,标签将作为 Grafana 中的过滤器选项提供。为 hub 集群或与受管集群团队关联的受管集群对象添加唯一标签。例如,如果您将标签 department=finance
添加到受管集群,则 ConfigMap 会被更新,并可能类似以下更改:
data: managed_cluster.yaml: | ignore_labels: - clusterID - cluster.open-cluster-management.io/clusterset - feature.open-cluster-management.io/addon-application-manager - feature.open-cluster-management.io/addon-cert-policy-controller - feature.open-cluster-management.io/addon-cluster-proxy - feature.open-cluster-management.io/addon-config-policy-controller - feature.open-cluster-management.io/addon-governance-policy-framework - feature.open-cluster-management.io/addon-iam-policy-controller - feature.open-cluster-management.io/addon-observability-controller - feature.open-cluster-management.io/addon-search-collector - feature.open-cluster-management.io/addon-work-manager - installer.name - installer.namespace - local-cluster - name labels: - cloud - department - vendor
1.5.6.2. 启用受管集群标签
通过从 observability-managed-cluster-label-allowlist
ConfigMap 中的 ignore_labels
列表中删除标签来启用已禁用的受管集群标签。
例如,启用 local-cluster
和 name
标签。您的 observability-managed-cluster-label-allowlist
ConfigMap 可能类似以下内容:
data: managed_cluster.yaml: | ignore_labels: - clusterID - installer.name - installer.namespace labels: - cloud - vendor - local-cluster - name
ConfigMap 在 30 秒后重新同步,以确保更新了集群标签。更新 ConfigMap 后,检查 open-cluster-management-observability
命名空间中的 observability-rbac-query-proxy
pod 日志,以验证列出标签的位置。pod 日志中可能会显示以下信息:
enabled managedcluster labels: <label>
在 Grafana 仪表板中,验证标签是否在 Label 下拉菜单中选择。
1.5.6.3. 禁用受管集群标签
从 Label 下拉菜单过滤器中列出的受管集群标签排除受管集群标签。将标签名称添加到 ignore_labels
列表中。例如,如果您将 local-cluster
和 name
重新添加到 ignore_labels
列表中,您的 YAML 可能类似以下文件:
data: managed_cluster.yaml: | ignore_labels: - clusterID - installer.name - installer.namespace - local-cluster - name labels: - cloud - vendor
检查 open-cluster-management-observability
命名空间中的 observability-rbac-query-proxy
pod 日志,以验证列出标签的位置。pod 日志中可能会显示以下信息:
disabled managedcluster label: <label>
1.5.6.4. 其他资源
- 请参阅使用 Grafana 仪表板。
- 返回到页面的开头,在 Grafana 中使用受管集群标签。
1.6. 管理警报
接收并定义可观察服务的警报,以通知 hub 集群和受管集群更改。
1.6.1. 先决条件
- 您必须在 hub 集群中启用可观察性。
-
您必须在
open-cluster-management-observability
命名空间中具有 secret 资源的 create 权限。 -
您必须对
MultiClusterObservability
资源具有编辑权限。
1.6.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.6.2.1. 在 Alertmanager pod 中挂载 secret
您可以使用任意内容创建 Secret
资源,这些资源可在 alertmanager
pod 中挂载,以访问授权凭证。
要在 Alertmanager 配置中引用 secret,请在 open-cluster-management-observability
命名空间内添加 Secret
资源内容,并在 alertmanager
pod 中挂载内容。例如,要创建和挂载 tls
secret,请完成以下步骤:
要使用 TLS 证书创建
tls
secret,请运行以下命令:oc create secret tls tls --cert=</path/to/cert.crt> --key=</path/to/cert.key> -n open-cluster-management-observability
要将
tls
secret 挂载到MultiClusterObservability
资源,将其添加到advanced
部分。您的资源可能类似以下内容:... advanced: alertmanager: secrets: ['tls']
要在 Alertmanager 配置中添加
tls
secret 的引用,请将 secret 的路径添加到配置中。您的资源可能类似以下配置:tls_config: cert_file: '/etc/alertmanager/secrets/tls/tls.crt' key_file: '/etc/alertmanager/secrets/tls/tls.key'
要验证 secret 是否在
alertmanager
pod 中,请运行以下命令:oc -n open-cluster-management-observability get secret alertmanager-config --template='{{ index .data "alertmanager.yaml" }}' |base64 -d > alertmanager.yaml
您的 YAML 可能类似以下内容:
"global": "http_config": "tls_config": "cert_file": "/etc/alertmanager/secrets/storyverify/tls.crt" "key_file": "/etc/alertmanager/secrets/storyverify/tls.key"
要在
alertmanager-config
secret 中保存alertmanager.yaml
配置,请运行以下命令:oc -n open-cluster-management-observability create secret generic alertmanager-config --from-file=alertmanager.yaml --dry-run -o=yaml
要将之前的 secret 替换为新 secret,请运行以下命令:
oc -n open-cluster-management-observability replace secret --filename=-
1.6.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.6.3.1. 禁用受管集群的警报转发
要禁用受管集群的警报转发,请在 MultiClusterObservability
自定义资源中添加以下注解:
metadata: annotations: mco-disable-alerting: "true"
设置注解时,受管集群上的警报转发配置会被恢复。对 openshift-monitoring
命名空间中的 ocp-monitoring-config
配置映射所做的任何更改也会被恢复。设置注解可确保 ocp-monitoring-config
配置映射不再由 observability operator 端点管理或更新。更新配置后,受管集群中的 Prometheus 实例会重启。
重要: 如果您有一个带有指标数据的 Prometheus 实例,且 Prometheus 实例重启了 Prometheus 实例,则受管集群上的指标将会丢失。hub 集群中的指标不会受到影响。
恢复更改后,在 open-cluster-management-addon-observability
命名空间中会创建一个名为 cluster-monitoring-reverted
的 ConfigMap。任何新的、手动添加的警报转发配置都不会从 ConfigMap 恢复。
验证 hub 集群警报管理器不再将受管集群警报传播到第三方消息传递工具。请参阅上一节,配置 Alertmanager。
1.6.4. 静默警报
添加您不想接收的警报。您可以根据警报名称、匹配标签或持续时间来静默警报。添加要静默的警报后,会创建一个 ID。您的静默警报的 ID 可能类似以下字符串 d839aca9-ed46-40be-84c4-dca8773671da
。
继续读取静默警报的方法:
要静默 Red Hat Advanced Cluster Management 警报,您必须有权访问
open-cluster-management-observability
命名空间中的alertmanager
pod。例如,在observability-alertmanager-0
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.6.4.1. 迁移可观察存储
如果使用警报静默程序,您可以在从之前的状态中保留静默时迁移可观察性存储。要做到这一点,请通过使用您选择的 StorageClass
资源创建新 StatefulSets
和 PersistentVolume (PV)资源来
迁移您的 Red Hat Advanced Cluster Management observability 存储。
注: PV 的存储与用于存储从集群收集指标的对象存储不同。
当您使用 StatefulSets
和 PV 将可观察性数据迁移到新存储时,它会存储以下数据组件:
- observatorium 或 Thanos: Receives 数据,然后将其上传到对象存储。其一些组件在 PV 中存储数据。对于这个数据,Observatorium 或 Thanos 会在启动时自动重新生成对象存储,因此当您丢失此数据时不会有后果。
- Alertmanager : 仅存储静默的警报。如果要保留这些静默的警报,您必须将这些数据迁移到新 PV。
要迁移您的可观察性存储,请完成以下步骤:
-
在
MultiClusterObservability
中,将.spec.storageConfig.storageClass
字段设置为新的存储类。 -
为确保之前
PersistentVolume
的数据被保留,即使您删除PersistentVolumeClaim
,请转至所有现有PersistentVolume
。 -
将
reclaimPolicy
改为"Retain": 'oc patch pv <your-pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
。 - 可选: 要避免丢失数据,请参阅 OCP 4 中的将持久数据迁移到 DG 8 Operator 中的另一个存储类。
在以下
StatefulSet
情况下删除StatefulSet
和PersistentVolumeClaim
:-
alertmanager-db-observability-alertmanager-<REPLICA_NUMBER>
-
data-observability-thanos-<COMPONENT_NAME>
-
data-observability-thanos-receive-default
-
data-observability-thanos-store-shard
-
重要: 您可能需要删除,然后重新创建
MultiClusterObservability
operator pod,以便您可以创建新StatefulSet
。
-
-
重新创建名称相同的新
PersistentVolumeClaim
,但正确的StorageClass
。 -
创建一个新的
PersistentVolumeClaim
,引用旧的PersistentVolume
。 -
验证新的
StatefulSet
和PersistentVolume
是否使用您选择的新StorageClass
。
1.6.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 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 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.6.6. 其他资源
- 如需了解更多详细信息,请参阅自定义可观察性。
- 有关更多可观察性主题,请参阅 Observability 服务。
第 2 章 在 Red Hat Insights 中使用可观察性
Red Hat Insights 与 Red Hat Advanced Cluster Management observability 集成,并被启用来帮助识别集群中的现有或潜在问题。Red Hat Insights 可帮助您识别、确定和解决稳定性、性能、网络和安全风险。Red Hat OpenShift Container Platform 通过 Red Hat OpenShift Cluster Manager 提供集群健康监控。Red Hat OpenShift Cluster Manager 会收集有关集群健康、使用和大小的匿名信息。如需更多信息,请参阅 Red Hat Insights 产品文档。
当您创建或导入 OpenShift 集群时,受管集群中的匿名数据会自动发送到红帽。这些信息用于创建提供集群健康信息的智能分析工具。Red Hat Advanced Cluster Management 管理员可以使用这个健康信息根据严重性创建警报。
需要的访问权限: 集群管理员
2.1. 先决条件
- 确保启用了 Red Hat Insights。如需更多信息,请参阅 修改全局集群 pull secret 以禁用远程健康报告。
- 安装 OpenShift Container Platform 版本 4.0 或更高版本。
- hub 集群用户注册到 Red Hat OpenShift Cluster Manager,必须能够管理 Red Hat OpenShift Cluster Manager 中的所有 Red Hat Advanced Cluster Management 受管集群。
2.2. 管理 Insights PolicyReports
Red Hat Advanced Cluster Management for Kubernetes PolicyReports
是 insights-client
生成的违反情况。PolicyReports
用于定义和配置发送到事件管理系统的警报。出现违反情况时,来自 PolicyReport
的警报将发送到事件管理系统。
2.2.1. 搜索 insight 策略报告
您可以在受管集群中搜索具有冲突的特定 Insights PolicyReport
。完成以下步骤:
- 登录到您的 Red Hat Advanced Cluster Management hub 集群。
- 从导航菜单中选择 Search。
输入以下查询:
kind:PolicyReport
。注:
PolicyReport
名称与集群名称匹配。-
您可以使用 insight 策略违反和类别指定查询。当您选择一个
PolicyReport
名称时,您会被重定向到关联的集群的 Details 页面。Insights 侧栏会自动显示。 如果禁用了搜索服务,且您要搜索洞察信息,请在 hub 集群中运行以下命令:
oc get policyreport --all-namespaces
2.2.2. 从控制台查看发现的问题
您可以查看特定集群中确定的问题。完成以下步骤:
- 登录您的 Red Hat Advanced Cluster Management 集群。
- 从导航菜单中选择 Overview。
-
检查集群 问题 概述卡。选择一个严重性链接来查看与该严重性关联的
PolicyReports
。在 Search 页面中显示集群问题的详情和严重性。策略报告与严重性关联,并显示一个或多个问题。 - 从 Clusters 页面选择策略报告来查看集群详情。Status 卡显示有关节点、应用程序、策略违规和识别出的问题的信息。
选择 发现的问题数量 来查看详情。Identified issues 卡包括了 Red Hat insights 中的信息。Identified issues 状态按严重性显示问题的数量。问题严重性的分类级别如下:Critical、Major、Low 和 Warning
- 另外,您还可以从导航菜单中选择 Clusters。
- 从表中选择一个受管集群来查看更多详细信息。
- 在 Status 卡中查看确定的问题数量。
- 选择潜在问题的数量来查看严重性图表,以及推荐的在 Potential issue 侧面面板中解决问题的补救方法。您还可以使用搜索功能搜索推荐的补救方法。补救选项显示漏洞的 Description、与漏洞关联的 Category,以及 Total risk。
点漏洞的链接来查看与漏洞相关的 How to remediate 和 Reason 信息。
注: 当您解决这个问题时,每 30 分钟收到一次 Red Hat Insights,Red Hat Insights 每两小时更新一次。
务必验证从
PolicyReport
发送警报消息的组件。-
进入到 Governance 页面,再选择特定的
PolicyReport
。 -
选择 Status 选项卡,再单击 View details 链接来查看
PolicyReport
YAML 文件。 -
找到
source
参数,该参数会通知您发送违反情况的组件。值选项为grc
和insights
。
-
进入到 Governance 页面,再选择特定的
2.2.3. 查看更新风险预测
查看更新受管集群的潜在风险。完成以下步骤:
- 登录到受管集群。
- 进入 Overview 页面。
- 在 Insights 的 Powered by Insights 部分中,您可以查看预计风险的集群百分比,这些风险按严重性列出。
- 从 Clusters 页面选择严重性数来查看集群列表。
- 选择您想要的集群,然后点 Actions 下拉菜单。
- 点 Upgrade cluster 查看 upgdate 的风险。
- 在 Upgrade clusters 模态中,找到 Upgrade risk 列,点链接来查看 Hybrid Cloud 控制台中的信息。
2.3. 其他资源
-
了解如何为
PolicyReports
创建自定义警报规则,如需更多信息,请参阅 配置 Alertmanager。 - 请参阅 Observability 服务。