使用 Config Sync SLI

本页面介绍了如何使用 Config Sync 服务等级指标 (SLI)。

如需在 Config Sync 未按预期运行时收到通知,请根据这些 SLI 设置 Prometheus 提醒规则。每个 SLI 都包含如何创建提醒规则的示例。如需详细了解如何将 Prometheus 与 Config Sync 搭配使用,请参阅使用指标监控 Config Sync

Config Sync Pod 的容器数量不正确

如果 Config Sync Pod 的容器数量低于预期,则 Config Sync 可能未运行。您可以设置提醒来检测此问题,并检查 Config Sync Pod 以找出某些容器缺失的原因。设置提醒时,我们建议您将时间间隔设置为至少五分钟,以避免不必要的提醒。例如,在升级期间,Pod 的容器数量可能会低于目标。

如果您不熟悉预期的容器数量,请参阅 Config Sync 部署、Pod 和容器

Prometheus 提醒规则示例

本部分包含在 Pod 的容器计数不正确时通知您的示例。

  • 如需在根协调器 Pod 的容器计数低于预期计数时收到通知,请创建以下提醒规则:

    alert: RootReconcilerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"root-reconciler-.*"}) < 4
    # Setting the for field to 5m to avoid unnecessary alerts.
    for: 5m
    
  • 如需在命名空间协调器 Pod 的容器计数低于预期计数时收到通知,请创建以下提醒规则:

    alert: NamespaceReconcilerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"ns-reconciler-.*"}) < 4
    for: 5m
    
  • 如需在协调器管理器 Pod 的容器数量低于预期数量时收到通知,请创建以下提醒规则:

    alert: ReconcilerManagerPodMissingContainer
    expr: count by (cluster_name, pod_name) (kubernetes_io:container_uptime{namespace_name="config-management-system", pod_name=~"reconciler-manager-.*"}) < 2
    for: 5m
    

运行状况不佳的 Config Sync 容器

如果 Config Sync 容器的重启次数达到特定阈值,则表示存在问题。例如,没有足够内存资源的根协调器容器在重启时会显示 OOMKilled 错误,直到获得足够的内存为止。

Prometheus 提醒规则示例

如需在 Config Sync 容器重启超过三次时收到通知,请创建以下提醒规则:

alert: TooManyContainerRestarts
expr: kubernetes_io:container_restart_count{namespace_name=~"config-management-system|config-management-monitoring|resource-group-system"} > 3

Config Sync 遇到持续错误

如果 Config Sync 遇到持续错误,则表示存在问题。如果 Config Sync 遇到错误,它会不断重试将配置从来源同步到集群,直到成功为止。不过,有些错误无法通过重试来修复,需要您的干预。

Prometheus 提醒规则示例

如需在根或命名空间协调器遇到两个小时的永久性错误时收到通知,请创建以下提醒规则:

alert: PersistentConfigSyncErrors
expr: sum by (cluster, configsync_sync_kind, configsync_sync_name, configsync_sync_namespace, errorclass) (config_sync_reconciler_errors) > 0
for: 2h

在此示例中:

  • configsync_sync_kind 标签可以具有以下值:RootSyncRepoSync
  • configsync_sync_name 标签指示 RootSync 或 RepoSync 对象的名称。
  • configsync_sync_namespace 标签指示 RootSync 或 RepoSync 对象的命名空间。
  • errorclass 标签可能有三个值:1xxx2xxx9xxx。每个标签对应一种不同类型的错误:

    • 1xxx 个错误:您可以修正的配置错误
    • 2xxx 个错误:您可能无法修正的服务器端错误
    • 9xxx 错误:您无法修复的内部错误

Config Sync 卡在同步阶段

Config Sync 中的同步尝试是不间断的。如果来源中的配置过大或过于复杂(例如,来源包含大量 Config Connector 资源),则可能需要一个多小时才能完成将这些配置同步到集群的操作。但是,如果距离上次成功同步已经过了两个小时,则可能会出现问题。

您可以通过检查 RootSync 或 RepoSync 状态来检查当前的同步尝试是否仍在进行。如果当前的同步尝试仍在进行,您可以选择拆分可信来源,以便更快地同步每个可信来源,也可以将提醒阈值从两小时增加到更长的时间。如果没有正在进行的同步尝试,则 Config Sync 协调器会中断,因为它应该不断重试,直到成功地将配置从来源同步到集群。如果发生这种情况,请上报到 Google Cloud 支持团队

Prometheus 提醒规则示例

如需在距上次成功同步根协调器或命名空间协调器的时间超过两个小时时收到通知,请创建提醒规则:

  alert: OldLastSyncTimestamp
  # The status label indicates whether the last sync succeeded or not.
  # Possible values: success, error.
  expr: time() - topk by (cluster, configsync_sync_kind, configsync_sync_name, configsync_sync_namespace) (1, config_sync_last_sync_timestamp{status="success"}) > 7200

Config Sync 性能下降

升级后,Config Sync 性能可能会下降。性能下降的情况可能如下:

  • 协调 RootSync 或 RepoSync 对象的时间开销增加
  • 协调 ResourceGroup 对象的时间开销增加
  • 增加了将配置从来源同步到集群的时间开销

协调 RootSync 或 RepoSync 对象的时间开销

reconciler-manager Deployment 会协调 RootSync 和 RepoSync 对象。您可以使用协调 RootSync 或 RepoSync 对象的时间开销的第 90 百分位来检测性能下降情况。

Prometheus 提醒规则示例

本部分包含 Prometheus 提醒规则示例,这些示例会在 reconciler-manager Deployment 性能下降时通知您。

以下示例会在过去 5 小时内协调 RootSync 或 RepoSync 对象的时间开销第 90 百分位超过 0.1 秒且持续 10 分钟时通知您。您可以创建提醒规则来监控所有集群或单个集群。

  • 创建以下规则以监控所有集群:

    alert: HighLatencyReconcileRootSyncAndRepoSyncOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    
  • 创建以下规则以监控单个集群:

    alert: HighLatencyReconcileRootSyncAndRepoSyncClusterLevel
    expr: histogram_quantile(0.9, sum by (cluster, le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    

协调 ResourceGroup 对象的时间开销

resource-group-controller-manager Deployment 会协调 ResourceGroup 对象。您可以使用协调 ResourceGroup 的第 90 百分位时间开销来捕获性能下降。

Prometheus 提醒规则示例

本部分介绍了 Prometheus 提醒规则,这些规则会在 resource-group-controller-manager Deployment 出现性能下降时通知您。

以下示例会在过去 5 小时内协调 ResourceGroup 对象的时间开销的第 90 百分位超过 5 秒且持续 10 分钟时通知您。您可以创建提醒规则来监控所有集群或单个集群。

  • 创建以下规则以监控所有集群:

    alert: HighLatencyReconcileResourceGroupOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    
  • 创建以下规则以监控单个集群:

    alert: HighLatencyReconcileResourceGroupClusterLevel
    expr: histogram_quantile(0.9, sum by (cluster, le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    

将配置从来源同步到集群的时间开销

根或命名空间协调器将配置从可信来源同步到集群。您可使用将配置从来源同步到集群的时间开销的第 90 百分位来检测性能下降情况。

Prometheus 提醒规则示例

本部分包含 Prometheus 提醒规则,可在根或命名空间协调器 Deployment 性能下降时通知您。

以下示例会在过去 5 小时内在所有集群中同步配置的时间开销的第 90 百分位超过 1 小时且持续 5 分钟时通知您。您可以创建监控所有集群或单个集群的提醒规则。

  • 创建以下规则以监控所有集群:

    alert: HighApplyDurationOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m
    
  • 创建以下规则以监控单个集群:

    alert: HighApplyDurationRootSyncRepoSyncLevel
    expr: histogram_quantile(0.9, sum by (cluster, configsync_sync_kind,configsync_sync_name, configsync_sync_namespace, le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m