Menggunakan SLI Config Sync

Halaman ini menjelaskan cara menggunakan indikator tingkat layanan (SLI) Config Sync.

Untuk menerima notifikasi saat Config Sync tidak berfungsi sebagaimana mestinya, siapkan aturan pemberitahuan Prometheus berdasarkan SLI ini. Setiap SLI menyertakan contoh cara membuat aturan pemberitahuan. Untuk mempelajari lebih lanjut cara menggunakan Prometheus dengan Config Sync, lihat Memantau Config Sync dengan metrik.

Pod Config Sync dengan jumlah container yang salah

Jika jumlah penampung Pod Config Sync lebih rendah dari yang diharapkan, Config Sync mungkin tidak berjalan. Anda dapat menyiapkan pemberitahuan untuk mendeteksi masalah ini dan memeriksa Pod Config Sync untuk mencari tahu alasan hilangnya beberapa container. Saat menyetel pemberitahuan, sebaiknya tetapkan interval waktu ke minimal lima menit untuk menghindari notifikasi yang tidak perlu. Misalnya, selama upgrade, jumlah container Pod mungkin turun di bawah target.

Jika Anda belum mengetahui jumlah container yang diharapkan, lihat Deployment Config Sync, Pod, dan container.

Contoh aturan pemberitahuan Prometheus

Bagian ini mencakup contoh yang memberi tahu Anda saat ada Pod dengan jumlah container yang salah.

  • Untuk menerima notifikasi saat jumlah container Pod rekonsiler root di bawah jumlah yang diharapkan, buat aturan pemberitahuan berikut:

    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
    
  • Untuk menerima notifikasi saat jumlah container Pod rekonsiler namespace di bawah jumlah yang diharapkan, buat aturan pemberitahuan berikut:

    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
    
  • Untuk menerima notifikasi saat jumlah container Pod reconciler-manager di bawah jumlah yang diharapkan, buat aturan pemberitahuan berikut:

    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
    

Penampung Config Sync yang tidak responsif

Terjadi error jika jumlah mulai ulang penampung Config Sync mencapai batas tertentu. Misalnya, container rekonsiler root yang tidak memiliki resource memori yang cukup akan dimulai ulang dengan error OOMKilled sampai mendapatkan cukup memori.

Contoh aturan pemberitahuan Prometheus

Untuk menerima notifikasi saat penampung Config Sync telah dimulai ulang lebih dari tiga kali, buat aturan pemberitahuan berikut:

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

Sinkronisasi Konfigurasi mengalami error terus-menerus

Jika Config Sync mengalami error terus-menerus, berarti ada sesuatu yang salah. Saat menemukan error, Sinkronisasi Konfigurasi akan terus mencoba menyinkronkan konfigurasi dari sumber ke cluster hingga berhasil. Namun, beberapa error tidak dapat diperbaiki dengan mencoba ulang dan memerlukan intervensi Anda.

Contoh aturan pemberitahuan Prometheus

Untuk menerima notifikasi saat rekonsiler root atau namespace mengalami error persisten selama dua jam, buat aturan pemberitahuan berikut:

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

Dalam contoh ini:

  • Label configsync_sync_kind dapat memiliki nilai berikut: RootSync atau RepoSync.
  • Label configsync_sync_name menunjukkan nama objek RootSync atau RepoSync.
  • Label configsync_sync_namespace menunjukkan namespace objek RootSync atau RepoSync.
  • Label errorclass dapat memiliki tiga nilai: 1xxx, 2xxx, dan 9xxx. Setiap label sesuai dengan jenis error yang berbeda:

    • 1xxx error: error konfigurasi yang dapat Anda perbaiki
    • 2xxx error: error sisi server yang mungkin tidak dapat Anda perbaiki
    • 9xxx error: error internal yang tidak dapat Anda perbaiki

Config Sync bermasalah dalam tahap sinkronisasi

Upaya sinkronisasi di Config Sync tidak dapat terganggu. Jika konfigurasi pada sumber terlalu besar atau kompleks (misalnya, sumber Anda berisi resource Config Connector yang tinggi), perlu waktu lebih dari satu jam untuk menyelesaikan sinkronisasi konfigurasi ini ke cluster. Namun, jika dua jam telah berlalu sejak sinkronisasi terakhir berhasil, mungkin ada yang salah.

Anda dapat memeriksa apakah upaya sinkronisasi saat ini masih berlangsung dengan memeriksa status RootSync atau RepoSync. Jika upaya sinkronisasi saat ini masih berlangsung, Anda dapat memilih untuk memecah sumber tepercaya agar setiap sumber tepercaya dapat disinkronkan lebih cepat, atau meningkatkan batas pemberitahuan dari dua jam menjadi sesuatu yang lebih lama. Jika tidak ada upaya sinkronisasi yang sedang berlangsung, rekonsiler Config Sync akan rusak karena seharusnya terus mencoba ulang hingga berhasil menyinkronkan konfigurasi dari sumber ke cluster. Jika hal ini terjadi, eskalasikan ke Dukungan Google Cloud.

Contoh aturan pemberitahuan Prometheus

Agar menerima notifikasi saat sinkronisasi terakhir yang berhasil untuk rekonsiler root atau namespace lebih dari dua jam yang lalu, buat aturan pemberitahuan:

  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 mengalami regresi performa

Config Sync mungkin mengalami regresi performa setelah diupgrade. Regresi performa dapat terjadi dengan cara berikut:

  • Peningkatan overhead waktu saat merekonsiliasi objek RootSync atau RepoSync
  • Peningkatan overhead waktu saat merekonsiliasi objek ResourceGroup
  • Peningkatan overhead waktu sinkronisasi konfigurasi dari sumber ke cluster

Overhead waktu untuk merekonsiliasi objek RootSync atau RepoSync

Deployment reconciler-manager merekonsiliasi objek RootSync dan RepoSync. Anda dapat menggunakan persentil kesembilan puluh dari overhead waktu untuk merekonsiliasi objek RootSync atau RepoSync untuk mendeteksi regresi performa.

Contoh aturan pemberitahuan Prometheus

Bagian ini mencakup contoh aturan pemberitahuan Prometheus yang memberi tahu Anda saat Deployment reconciler-manager mengalami regresi performa.

Contoh berikut mengirimi Anda notifikasi saat persentil kesembilan puluh dari overhead waktu rekonsiliasi objek RootSync atau RepoSync selama 5 jam terakhir lebih dari 0,1 detik selama 10 menit. Anda dapat membuat aturan pemberitahuan yang memantau semua cluster, atau satu cluster.

  • Buat aturan berikut untuk memantau semua cluster:

    alert: HighLatencyReconcileRootSyncAndRepoSyncOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_reconcile_duration_seconds_bucket[5h]))) > 0.1
    for: 10m
    
  • Buat aturan berikut untuk memantau satu cluster:

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

Overhead waktu saat merekonsiliasi objek ResourceGroup

Deployment resource-group-controller-manager merekonsiliasi objek ResourceGroup. Anda dapat menggunakan persentil kesembilan puluh dari overhead waktu saat merekonsiliasi ResourceGroup untuk menangkap regresi performa.

Contoh aturan pemberitahuan Prometheus

Bagian ini mencakup aturan pemberitahuan Prometheus yang memberi tahu Anda saat Deployment resource-group-controller-manager mengalami regresi performa.

Contoh berikut mengirimi Anda notifikasi saat persentil kesembilan puluh dari overhead waktu rekonsiliasi objek ResourceGroup selama 5 jam terakhir lebih dari 5 detik selama 10 menit. Anda dapat membuat aturan pemberitahuan yang memantau semua cluster, atau satu cluster.

  • Buat aturan berikut untuk memantau semua cluster:

    alert: HighLatencyReconcileResourceGroupOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_rg_reconcile_duration_seconds_bucket[5h]))) > 5
    for: 10m
    
  • Buat aturan berikut untuk memantau satu cluster:

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

Overhead waktu sinkronisasi konfigurasi dari sumber ke cluster

Rekonsiler root atau namespace menyinkronkan konfigurasi dari sumber tepercaya ke cluster. Anda dapat menggunakan persentil kesembilan puluh dari overhead waktu sinkronisasi konfigurasi dari sumber ke cluster untuk mendeteksi regresi performa.

Contoh aturan pemberitahuan Prometheus

Bagian ini mencakup aturan pemberitahuan Prometheus yang memberi tahu Anda saat Deployment rekonsiler root atau namespace mengalami regresi performa.

Contoh berikut mengirimi Anda notifikasi saat persentil kesembilan puluh dari overhead waktu sinkronisasi konfigurasi di semua cluster selama lima jam terakhir lebih dari satu jam selama lima menit.Anda dapat membuat aturan pemberitahuan yang memantau semua cluster, atau satu cluster.

  • Buat aturan berikut untuk memantau semua cluster:

    alert: HighApplyDurationOverall
    expr: histogram_quantile(0.9, sum by (le) (rate(config_sync_apply_duration_seconds_bucket[5h]))) > 3600
    for: 5m
    
  • Buat aturan berikut untuk memantau satu cluster:

    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