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 penampung yang salah

Jika jumlah container 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 mengetahui alasan beberapa container tidak ada. Saat menyetel pemberitahuan, sebaiknya tetapkan interval waktu setidaknya lima menit untuk menghindari pemberitahuan yang tidak perlu. Misalnya, selama upgrade, jumlah penampung Pod dapat turun di bawah target.

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

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 root reconciler 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 penampung Pod namespace reconciler 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
    

Container Config Sync yang tidak sehat

Jika jumlah mulai ulang penampung Config Sync mencapai nilai minimum tertentu, ada yang salah. Misalnya, penampung rekonsiliasi root yang tidak memiliki resource memori yang cukup akan dimulai ulang dengan error OOMKilled hingga mendapatkan memori yang cukup.

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

Config Sync mengalami error persisten

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

Contoh aturan pemberitahuan Prometheus

Untuk menerima notifikasi saat rekonsiliator 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:

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

Config Sync macet di tahap sinkronisasi

Upaya sinkronisasi di Config Sync tidak dapat diinterupsi. Jika konfigurasi di sumber terlalu besar atau rumit (misalnya, sumber Anda berisi banyak resource Config Connector), penyelesaian sinkronisasi konfigurasi ini ke cluster dapat memerlukan waktu lebih dari satu jam. Namun, jika dua jam telah berlalu sejak sinkronisasi terakhir yang berhasil, mungkin ada masalah.

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 lebih lama. Jika tidak ada upaya sinkronisasi yang sedang berlangsung, rekonsiliasi Config Sync rusak karena seharusnya terus mencoba lagi hingga berhasil menyinkronkan konfigurasi dari sumber ke cluster. Jika hal ini terjadi, eskalasikan ke Google Cloud Dukungan.

Contoh aturan pemberitahuan Prometheus

Untuk mendapatkan notifikasi saat sinkronisasi terakhir yang berhasil dari rekonsiliasi root atau namespace terjadi 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 untuk merekonsiliasi objek RootSync atau RepoSync
  • Peningkatan overhead waktu untuk merekonsiliasi objek ResourceGroup
  • Peningkatan overhead waktu untuk menyinkronkan 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 guna 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 akan mengirimkan notifikasi saat persentil kesembilan puluh dari overhead waktu untuk menyelaraskan objek RootSync atau RepoSync selama 5 jam terakhir melebihi 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 untuk merekonsiliasi objek ResourceGroup

Deployment resource-group-controller-manager merekonsiliasi objek ResourceGroup. Anda dapat menggunakan persentil kesembilan puluh dari overhead waktu merekonsiliasi ResourceGroup untuk mendeteksi 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 akan mengirimkan notifikasi saat persentil kesembilan puluh dari overhead waktu untuk merekonsiliasi objek ResourceGroup selama 5 jam terakhir melebihi 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 untuk menyinkronkan konfigurasi dari sumber ke cluster

Penyelarasan root atau namespace menyinkronkan konfigurasi dari sumber tepercaya ke cluster. Anda dapat menggunakan persentil kesembilan puluh dari overhead waktu menyinkronkan 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 rekonsiliasi root atau namespace mengalami regresi performa.

Contoh berikut akan mengirimkan notifikasi saat persentil kesembilan puluh dari overhead waktu menyinkronkan 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