Config Sync SLI を使用する

このページでは、Config Sync のサービスレベル指標(SLI)を使用する方法について説明します。

Config Sync が意図したとおりに機能していないときに通知を受け取るには、これらの SLI に基づいて Prometheus アラートルールを設定します。各 SLI には、アラートルールの作成方法の例が含まれています。Config Sync で Prometheus を使用する方法については、指標を使用して Config Sync をモニタリングするをご覧ください。

コンテナ数が正しくない Config Sync Pod

Config Sync Pod のコンテナ数が予想より少ない場合、Config Sync が実行されていない可能性があります。この問題を検出するためのアラートを設定し、Config Sync Pod を調べて一部のコンテナが不足している理由を特定できます。アラートを設定する際は、不要なアラートを回避するために、期間を 5 分以上に設定することをおすすめします。たとえば、アップグレード中に Pod のコンテナ数がターゲットを下回ることがあります。

予想されるコンテナ数については、Config Sync の Deployment、Pod、コンテナをご覧ください。

Prometheus アラートルールの例

このセクションでは、コンテナ数が正しくない Pod がある場合に通知する例を示します。

  • Root Reconciler 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
    
  • Namespace Reconciler 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
    
  • reconciler-manager 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 コンテナの再起動回数が特定のしきい値に達した場合、問題が発生しています。たとえば、十分なメモリリソースがない Root Reconciler コンテナは、十分なメモリを取得するまで OOMKilled エラーで再起動します。

Prometheus アラートルールの例

Config Sync コンテナが 3 回以上再起動したときに通知を受け取るには、次のアラートルールを作成します。

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 アラートルールの例

Root Reconciler または Namespace Reconciler で 2 時間にわたり永続的なエラーが発生した場合に通知を受け取るには、次のアラートルールを作成します。

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 ラベルの値は RootSync または RepoSync のいずれかです。
  • configsync_sync_name ラベルは、RootSync オブジェクトまたは RepoSync オブジェクトの名前を示します。
  • configsync_sync_namespace ラベルは、RootSync オブジェクトまたは RepoSync オブジェクトの Namespace を示します。
  • errorclass ラベルには 1xxx2xxx9xxx の 3 つの値があります。各ラベルは、異なるタイプのエラーに対応しています。

    • 1xxx エラー: 修正可能な構成エラー
    • 2xxx エラー: 修正できない可能性のあるサーバー側のエラー
    • 9xxx のエラー: 修正できない内部エラー

Config Sync が同期ステージから先に進まない

Config Sync の同期試行は中断できません。ソース内の構成ファイルが大きすぎるか、複雑である場合(ソースに多数の Config Connector リソースが含まれているなど)、これらの構成ファイルとクラスタとの同期が完了するまでに 1 時間以上かかることがあります。ただし、最後に同期が完了してから 2 時間が経過した場合は、なんらかの問題が発生している可能性があります。

RootSync または RepoSync のステータスを確認することで、現在の同期が進行中かどうかを確認できます。現在の同期の試行がまだ進行中の場合は、すべての信頼できる情報源の同期を高速化できるように信頼できる情報源を分割するか、アラートのしきい値を 2 時間以上に増やすことができます。進行中の試行がない場合、Config Sync Reconciler は、ソースからクラスタに構成ファイルが正常に同期されるまで再試行を続けることになるため、失敗します。その場合は、Google Cloud サポートにエスカレーションします。

Prometheus アラートルールの例

Root Reconciler または Namespace Reconciler の最後の同期が 2 時間以上前の場合に通知を受けるには、アラートルールを作成します。

  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 アラートルールの例

このセクションでは、reconciler-manager Deployment にパフォーマンスの低下が発生したときに通知する Prometheus アラートルールの例を紹介します。

次の例では、過去 5 時間の RootSync オブジェクトまたは RepoSync オブジェクトの調整にかかる時間のオーバーヘッドの 90 パーセンタイルが、10 分間で 0.1 秒を超えた場合に通知を送信します。すべてのクラスタまたは単一クラスタをモニタリングするアラートルールを作成できます。

  • すべてのクラスタをモニタリングするには、次のルールを作成します。

    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 アラートルールの例

このセクションでは、resource-group-controller-manager Deployment にパフォーマンスの低下が発生したときに通知する Prometheus アラートルールを紹介します。

次の例では、過去 5 時間に ResourceGroup オブジェクトの調整にかかる時間のオーバーヘッドの 90 パーセンタイルが 10 分間で 5 秒を超えた場合に通知を送信します。すべてのクラスタまたは単一クラスタをモニタリングするアラートルールを作成できます。

  • すべてのクラスタをモニタリングするには、次のルールを作成します。

    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
    

ソースからクラスタに構成ファイルを同期する際のオーバーヘッド

Root Reconciler または Namespace Reconciler は、信頼できるソースからクラスタに構成ファイルを同期します。ソースからクラスタに構成ファイルを同期する時間のオーバーヘッドの 90 パーセンタイルを使用して、パフォーマンスの低下を検出できます。

Prometheus アラートルールの例

このセクションでは、Root Reconciler または Namespace Reconciler の Deployment にパフォーマンスの低下が発生したときに通知する Prometheus アラートルールを説明します。

次の例では、過去 5 時間のすべてのクラスタで構成ファイルの同期にかかる時間のオーバーヘッドの 90 パーセンタイルが、5 分間で 1 時間を超えた場合に通知を送信します。すべてのクラスタ、または単一のクラスタをモニタリングするアラートルールを作成できます。

  • すべてのクラスタをモニタリングするには、次のルールを作成します。

    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