구성 동기화 SLI 사용

이 페이지에서는 구성 동기화 서비스 수준 지표(SLI)를 사용하는 방법을 설명합니다.

구성 동기화가 의도한 대로 작동하지 않을 때 알림을 받으려면 SLI에 따라 Prometheus 알림 규칙을 설정합니다. 각 SLI에는 알림 규칙을 만드는 방법의 예시가 포함되어 있습니다. 구성 동기화에서 Prometheus를 사용하는 방법에 대한 자세한 내용은 측정항목으로 구성 동기화 모니터링을 참조하세요.

잘못된 컨테이너 수를 가진 구성 동기화 포드

구성 동기화 포드의 컨테이너 수가 예상보다 낮은 경우 구성 동기화가 실행되고 있지 않을 수 있습니다. 이 문제를 감지하고 구성 동기화 포드를 검사하여 일부 컨테이너가 누락된 이유를 확인할 수 있습니다. 알림을 설정할 때 불필요한 알림이 발생하지 않도록 시간 간격을 5분 이상으로 설정하는 것이 좋습니다. 예를 들어 업그레이드 중에 포드의 컨테이너 수가 대상 아래로 떨어질 수 있습니다.

예상 컨테이너 수에 익숙하지 않으면 구성 동기화 배포, 포드, 컨테이너를 참조하세요.

Prometheus 알림 규칙 예시

이 섹션에는 잘못된 컨테이너 수가 있는 포드가 있을 때 알림을 전송하는 예시가 포함되어 있습니다.

  • 루트 조정 포드의 컨테이너 수가 예상보다 낮을 때 알림을 받으려면 다음 알림 규칙을 만듭니다.

    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
    
  • 네임스페이스 조정 포드의 컨테이너 수가 예상보다 낮을 때 알림을 받으려면 다음 알림 규칙을 만듭니다.

    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
    
  • 조정자 관리자 포드의 컨테이너 수가 예상보다 낮을 때 알림을 받으려면 다음 알림 규칙을 만듭니다.

    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
    

비정상 구성 동기화 컨테이너

구성 동기화 컨테이너의 재시작 횟수가 특정 임곗값에 도달하면 문제가 발생한 것입니다. 예를 들어 메모리 리소스가 부족한 루트 조정자 컨테이너는 충분한 메모리를 확보할 때까지 OOMKilled 오류와 함께 다시 시작됩니다.

Prometheus 알림 규칙 예시

구성 동기화 컨테이너가 4회 이상 다시 시작될 때 알림을 받으려면 다음 알림 규칙을 만듭니다.

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

구성 동기화에 지속적인 오류 발생

구성 동기화에 지속적인 오류가 발생하면 문제가 발생한 것입니다. 구성 동기화에 오류가 발생하면 성공할 때까지 소스의 구성을 클러스터로 동기화하려고 계속 시도합니다. 하지만 일부 오류는 재시도로 해결할 수 없으며 사용자의 개입이 필요합니다.

Prometheus 알림 규칙 예시

루트 또는 네임스페이스 조정자에 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 객체의 네임스페이스를 나타냅니다.
  • errorclass 라벨에는 1xxx, 2xxx, 9xxx의 세 가지 값이 있을 수 있습니다. 각 라벨은 서로 다른 유형의 오류에 해당합니다.

    • 1xxx 오류: 수정할 수 있는 구성 오류
    • 2xxx 오류: 해결할 수 없는 서버 측 오류
    • 9xxx 오류: 수정할 수 없는 내부 오류

구성 동기화가 동기화 단계에서 멈춤

구성 동기화의 동기화 시도는 중단할 수 없습니다. 소스의 구성이 너무 크거나 복잡하면(예: 소스에 많은 수의 구성 커넥터 리소스가 포함된 경우) 이러한 구성을 클러스터에 동기화하는 데 1시간 이상 걸릴 수 있습니다. 그러나 마지막으로 성공한 동기화 후 2시간이 지나면 문제가 발생한 것일 수도 있습니다.

RootSync 또는 RepoSync 상태를 확인하여 현재 동기화 시도가 계속 진행 중인지 확인할 수 있습니다. 현재 동기화 시도가 아직 진행 중이면 모든 정보 소스를 더 빠르게 동기화할 수 있도록 정보 소스를 분할하거나 2시간 이상으로 알림 기준을 늘릴 수 있습니다. 진행 중인 동기화 시도가 없으면 소스에서 클러스터로 구성을 성공적으로 동기화할 때까지 계속 재시도해야 하기 때문에 구성 동기화 조정자가 손상됩니다. 이 경우 Google Cloud 지원팀으로 에스컬레이션하세요.

Prometheus 알림 규칙 예시

루트 또는 네임스페이스 조정자의 마지막 동기화가 성공한 후 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

성능 회귀가 발생한 구성 동기화

구성 동기화에서는 업그레이드 후 성능 회귀가 발생할 수 있습니다. 성능 회귀는 다음과 같은 방식으로 발생할 수 있습니다.

  • RootSync 또는 RepoSync 객체 조정의 시간 오버헤드 증가
  • ResourceGroup 객체 조정의 시간 오버헤드 증가
  • 소스에서 클러스터로 구성 동기화의 시간 오버헤드 증가

RootSync 또는 RepoSync 객체 조정의 시간 오버헤드

reconciler-manager 배포는 RootSync 및 RepoSync 객체를 조정합니다. RootSync 또는 RepoSync 객체를 조정하는 데 소요된 시간 오버헤드의 90번째 백분위수를 사용하여 성능 회귀를 감지할 수 있습니다.

Prometheus 알림 규칙 예시

이 섹션에는 reconciler-manager 배포에 성능 회귀가 있을 때 알림을 제공하는 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 배포는 ResourceGroup 객체를 조정합니다. ResourceGroup 조정 시간 오버헤드의 90번째 백분위수를 사용하여 성능 회귀를 감지할 수 있습니다.

Prometheus 알림 규칙 예시

이 섹션에는 resource-group-controller-manager 배포에 성능 회귀가 발생할 때 알림을 제공하는 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
    

소스에서 클러스터로 구성 동기화의 시간 오버헤드

루트 또는 네임스페이스 조정자는 정보 소스에서 구성을 클러스터에 동기화합니다. 소스에서 클러스터로 구성을 동기화하는 데 소요되는 시간 오버헤드의 90번째 백분위수를 사용하여 성능 회귀를 감지할 수 있습니다.

Prometheus 알림 규칙 예시

이 섹션에는 루트 또는 네임스페이스 조정자 배포에 성능 회귀가 있을 때 알림을 제공하는 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