Memantau Config Sync dengan Prometheus

Halaman ini menjelaskan cara mengirim metrik dari Config Sync ke Prometheus.

Halaman ini menjelaskan cara menggunakan Prometheus untuk melihat metrik Config Sync. Untuk cara lain untuk mengekspor metrik, lihat Memantau Config Sync dengan Cloud Monitoring atau Pantau Config Sync dengan pemantauan kustom.

Config Sync secara otomatis mengumpulkan dan mengekspor metrik ke Prometheus. Anda dapat mengonfigurasi Cloud Monitoring untuk mengambil metrik dari Prometheus. Kemudian Anda dapat melihat metrik khusus di Prometheus dan Pemantauan. Untuk informasi selengkapnya, lihat Menggunakan Prometheus di GKE dokumentasi layanan.

Mengoreksi metrik

Semua metrik Prometheus tersedia untuk penyalinan di port 8675. Sebelum Anda dapat metrik salinan, Anda harus mengonfigurasi klaster Anda untuk Prometheus di salah satu dari dua cara. Memenuhi salah satu ketentuan berikut:

  • Ikuti Dokumentasi Prometheus guna mengonfigurasi cluster Anda untuk penyalinan, atau

  • Gunakan Operator Prometheus bersama dengan manifes berikut, yang menyalin semua Config Sync metrik setiap 10 detik.

    1. Buat direktori sementara untuk menyimpan file manifes.

      mkdir config-sync-monitor
      cd config-sync-monitor
      
    2. Download manifes Prometheus Operator dari Repositori CoreOS. repositori Anda menggunakan perintah curl:

      curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
      

      Manifes ini dikonfigurasi untuk menggunakan namespace default, yang tidak direkomendasikan. Langkah berikutnya mengubah konfigurasi untuk menggunakan namespace memanggil monitoring. Untuk menggunakan namespace yang berbeda, gantilah tempat Anda melihat monitoring pada langkah yang tersisa.

    3. Buat file untuk memperbarui namespace ClusterRoleBinding di paket di atas.

      # patch-crb.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-operator
      subjects:
      - kind: ServiceAccount
        name: prometheus-operator
        namespace: monitoring # we are patching from default namespace
      
    4. Buat file kustomization.yaml yang menerapkan patch dan mengubah untuk resource lain dalam manifes.

      # kustomization.yaml
      resources:
      - bundle.yaml
      
      namespace: monitoring
      
      patchesStrategicMerge:
      - patch-crb.yaml
      
    5. Buat namespace monitoring jika tidak ada. Anda dapat menggunakan nama namespace yang berbeda, tetapi jika Anda mengubahnya, ubah juga nilainya namespace dalam manifes YAML dari langkah sebelumnya.

      kubectl create namespace monitoring
      
    6. Terapkan manifes Kustomize menggunakan perintah berikut:

      kubectl apply -k .
      
      until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \
      do date; sleep 1; echo ""; done

      Perintah kedua memblokir hingga CRD tersedia di cluster.

    7. Membuat manifes untuk resource yang diperlukan untuk mengonfigurasi Prometheus server yang menyalin metrik dari Config Sync.

      # config-sync-monitoring.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: prometheus-config-sync
        namespace: monitoring
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: prometheus-config-sync
      rules:
      - apiGroups: [""]
        resources:
        - nodes
        - services
        - endpoints
        - pods
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources:
        - configmaps
        verbs: ["get"]
      - nonResourceURLs: ["/metrics"]
        verbs: ["get"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: prometheus-config-sync
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: prometheus-config-sync
      subjects:
      - kind: ServiceAccount
        name: prometheus-config-sync
        namespace: monitoring
      ---
      apiVersion: monitoring.coreos.com/v1
      kind: Prometheus
      metadata:
        name: config-sync
        namespace: monitoring
        labels:
          prometheus: config-sync
      spec:
        replicas: 2
        serviceAccountName: prometheus-config-sync
        serviceMonitorSelector:
          matchLabels:
            prometheus: config-management
        alerting:
          alertmanagers:
          - namespace: default
            name: alertmanager
            port: web
        resources:
          requests:
            memory: 400Mi
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: prometheus-config-sync
        namespace: monitoring
        labels:
          prometheus: config-sync
      spec:
        type: NodePort
        ports:
        - name: web
          nodePort: 31900
          port: 9190
          protocol: TCP
          targetPort: web
        selector:
          prometheus: config-sync
      --- 
      --- 
      
    8. Terapkan manifes menggunakan perintah berikut:

      kubectl apply -f config-sync.yaml
      
      until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \
      do sleep 1; done
      

      Perintah kedua melakukan pemblokiran hingga Pod berjalan.

    9. Anda dapat memverifikasi penginstalan dengan meneruskan porta web dari server Prometheus ke komputer lokal Anda.

      kubectl -n monitoring port-forward svc/prometheus-config-sync 9190
      

      Anda kini dapat mengakses UI web Prometheus di http://localhost:9190.

    10. Hapus direktori sementara.

      cd ..
      rm -rf config-sync-monitor
      

Metrik Prometheus yang tersedia

Config Sync mengumpulkan metrik berikut dan menyediakannya ke Prometheus. Kolom Label mencantumkan semua label yang berlaku untuk setiap metrik. Metrik tanpa label mewakili satu pengukuran dari waktu ke waktu sementara metrik dengan label mewakili beberapa pengukuran, satu untuk setiap kombinasi nilai label.

Jika tabel ini tidak sinkron, Anda dapat memfilter metrik menurut awalan di Antarmuka pengguna Prometheus. Semua metrik dimulai dengan awalan config_sync_.

Nama Jenis Label Deskripsi
config_sync_api_duration_seconds_bucket Histogram status, operasi Distribusi latensi panggilan server API (didistribusikan ke dalam bucket berdasarkan durasi setiap siklus)
config_sync_api_duration_seconds_count Histogram status, operasi Distribusi latensi panggilan server API (mengabaikan durasi)
config_sync_api_duration_seconds_sum Histogram status, operasi Jumlah durasi semua panggilan server API
config_sync_apply_duration_seconds_bucket Histogram commit, status Distribusi latensi penerapan resource yang dideklarasikan dari sumber tepercaya ke cluster (didistribusikan ke dalam bucket berdasarkan durasi setiap siklus)
config_sync_apply_duration_seconds_count Histogram commit, status Distribusi latensi penerapan resource yang dideklarasikan dari sumber tepercaya ke cluster (mengabaikan durasi)
config_sync_apply_duration_seconds_sum Histogram commit, status Jumlah durasi semua latensi penerapan resource yang dideklarasikan dari sumber tepercaya ke cluster
config_sync_apply_operations_total Penghitung operasi, status, pengontrol Jumlah operasi yang telah dilakukan untuk menyinkronkan resource dari sumber tepercaya ke cluster
config_sync_cluster_scoped_resource_count Meteran resourcegroup Jumlah resource cakupan cluster di ResourceGroup
config_sync_crd_count Meteran resourcegroup Jumlah CRD dalam ResourceGroup
config_sync_declared_resources Meteran commit Jumlah resource yang dideklarasikan yang diuraikan dari Git
config_sync_internal_errors_total Penghitung sumber Jumlah error internal yang dipicu oleh Config Sync. Metrik mungkin tidak muncul jika tidak ada error internal
config_sync_kcc_resource_count Meteran resourcegroup Jumlah resource Config Connector dalam ResourceGroup
config_sync_last_apply_timestamp Meteran commit, status Stempel waktu operasi penerapan terbaru
config_sync_last_sync_timestamp Meteran commit, status Stempel waktu sinkronisasi terbaru dari Git
config_sync_parser_duration_seconds_bucket Histogram status, pemicu, sumber Distribusi latensi di berbagai tahap yang terlibat dalam sinkronisasi dari sumber tepercaya ke cluster
config_sync_parser_duration_seconds_count Histogram status, pemicu, sumber Distribusi latensi berbagai tahap yang terlibat dalam sinkronisasi dari sumber tepercaya ke cluster (mengabaikan durasi)
config_sync_parser_duration_seconds_sum Histogram status, pemicu, sumber Jumlah latensi berbagai tahap yang terlibat dalam sinkronisasi dari sumber tepercaya ke cluster
config_sync_pipeline_error_observed Meteran nama, rekonsiliasi, komponen Status resource kustom RootSync dan RepoSync. Nilai 1 menunjukkan kegagalan
config_sync_ready_resource_count Meteran resourcegroup Jumlah total resource siap di ResourceGroup
config_sync_reconcile_duration_seconds_bucket Histogram status Distribusi latensi peristiwa rekonsiliasi yang ditangani oleh pengelola rekonsiliasi (didistribusikan ke dalam bucket berdasarkan durasi setiap panggilan)
config_sync_reconcile_duration_seconds_count Histogram status Distribusi latensi peristiwa rekonsiliasi yang ditangani oleh pengelola rekonsiliasi (mengabaikan durasi)
config_sync_reconcile_duration_seconds_sum Histogram status Jumlah durasi semua latensi peristiwa rekonsiliasi yang ditangani oleh pengelola rekonsiliasi
config_sync_reconciler_errors Meteran komponen, kelas error Jumlah error yang ditemukan saat menyinkronkan resource dari sumber kebenaran ke cluster
config_sync_remediate_duration_seconds_bucket Histogram status Distribusi latensi peristiwa rekonsiliasi remediator (didistribusikan ke dalam bucket menurut durasi)
config_sync_remediate_duration_seconds_count Histogram status Distribusi latensi peristiwa rekonsiliasi perbaikan (mengabaikan durasi)
config_sync_remediate_duration_seconds_sum Histogram status Jumlah durasi semua latensi peristiwa rekonsiliasi remediator
config_sync_resource_count Meteran resourcegroup Jumlah resource yang dilacak oleh ResourceGroup
config_sync_resource_conflicts_total Penghitung commit Jumlah konflik resource yang disebabkan oleh ketidakcocokan antara resource yang di-cache dan resource cluster. Metrik mungkin tidak muncul jika tidak terjadi konflik resource
config_sync_resource_fights_total Penghitung Jumlah resource yang terlalu sering disinkronkan. Metrik mungkin tidak muncul jika tidak ada pertentangan resource yang terjadi
config_sync_resource_group_total Meteran Jumlah CR ResourceGroup
config_sync_resource_ns_count Meteran resourcegroup Jumlah namespace yang digunakan oleh resource dalam ResourceGroup
config_sync_rg_reconcile_duration_seconds_bucket. Histogram stallreason Distribusi waktu rekonsiliasi CR ResourceGroup (didistribusikan ke dalam bucket berdasarkan durasi)
config_sync_rg_reconcile_duration_seconds_count Histogram stallreason Distribusi waktu rekonsiliasi CR ResourceGroup (mengabaikan durasi)
config_sync_rg_reconcile_duration_seconds_sum Histogram stallreason Jumlah semua waktu merekonsiliasi CR ResourceGroup
config_sync_kustomize_build_latency_bucket Histogram Distribusi latensi dari kustomize build waktu eksekusi (didistribusikan ke dalam bucket berdasarkan durasi setiap operasi)
config_sync_kustomize_build_latency_count Histogram Distribusi latensi dari kustomize build waktu eksekusi (mengabaikan durasi)
config_sync_kustomize_build_latency_sum Histogram Jumlah semua waktu eksekusi kustomize build
config_sync_kustomize_ordered_top_tier_metrics Meteran top_tier_field Penggunaan Resource, Generator, SecretGenerator, ConfigMapGenerator, Transformer, dan Validator
config_sync_kustomize_builtin_transformers Meteran k8s_builtin_transformer Penggunaan transformer bawaan yang terkait dengan metadata objek kubernetes
config_sync_kustomize_resource_count Meteran Jumlah resource yang dihasilkan oleh kustomize build
config_sync_kustomize_field_count Meteran field_name Frekuensi kolom tertentu digunakan dalam file kustomisasi
config_sync_kustomize_patch_count Meteran patch_field Jumlah patch di kolom patches, patchesStrategicMerge, dan patchesJson6902
config_sync_kustomize_base_count Meteran base_source Jumlah basis jarak jauh dan lokal
kustomize_deprecating_field_count Meteran deprecating_field Penggunaan kolom yang mungkin tidak digunakan lagi
kustomize_simplification_adoption_count Meteran simplification_field Penggunaan gambar, replika, dan pengganti transformer penyederhanaan
kustomize_helm_inflator_count Meteran helm_inflator Penggunaan helm dalam kustomisasi, baik berdasarkan kolom bawaan maupun fungsi kustom

Contoh prosedur proses debug untuk Prometheus

Contoh berikut menggambarkan beberapa pola untuk menggunakan metrik Prometheus, status objek, dan anotasi objek untuk mendeteksi dan mendiagnosis masalah yang terkait dengan Config Sync. Contoh-contoh ini menunjukkan bagaimana Anda dapat memulai pemantauan tingkat tinggi yang mendeteksi masalah, kemudian secara bertahap pencarian untuk melihat perincian dan mendiagnosis akar penyebab masalah.

Konfigurasi kueri berdasarkan status

Proses reconciler memberikan metrik tingkat tinggi yang memberikan insight berguna tentang gambaran keseluruhan tentang cara kerja Config Sync di cluster. Anda dapat melihat apakah telah terjadi kesalahan, dan bahkan dapat menyiapkan pemberitahuan untuk mereka.

config_sync_reconciler_errors

Kueri metrik berdasarkan rekonsiliasi

Jika Anda menggunakan API Config Sync RootSync dan RepoSync, Anda dapat memantau objek RootSync dan RepoSync. RootSync dan RepoSync objek dilengkapi dengan metrik tingkat tinggi yang memberi Anda wawasan berguna tentang cara Config Sync beroperasi di cluster. Hampir semua metrik adalah diberi tag oleh nama rekonsiliasi, sehingga Anda dapat melihat apakah telah terjadi kesalahan dan dapat mengatur pemberitahuan untuk mereka di Prometheus.

Lihat daftar lengkap label metrik yang tersedia untuk pemfilteran.

Di Prometheus, Anda dapat menggunakan filter berikut untuk RootSyncs atau RepoSyncs:

# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}

# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}

Operasi impor dan sinkronisasi kueri berdasarkan status

Di Prometheus, Anda bisa menggunakan kueri berikut:

# Check for errors that occurred when sourcing configs.
config_sync_reconciler_errors{component="source"}

# Check for errors that occurred when syncing configs to the cluster.
config_sync_reconciler_errors{component="sync"}

Anda juga dapat memeriksa metrik untuk sumber dan proses sinkronisasi itu sendiri:

config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}

Memantau resource dengan Google Cloud Managed Service for Prometheus

Google Cloud Managed Service for Prometheus adalah layanan solusi multi-cloud terkelola untuk Metrik Prometheus. Mendukung dua mode untuk pengumpulan data: koleksi terkelola (mode yang direkomendasikan) atau pengumpulan data yang di-deploy sendiri. Selesaikan langkah-langkah berikut untuk menyiapkan pemantauan Config Sync dengan Google Cloud Managed Service for Prometheus dalam mode pengumpulan terkelola.

  1. Aktifkan Prometheus Terkelola pada cluster Anda dengan mengikuti petunjuk di Menyiapkan koleksi terkelola.

  2. Simpan contoh manifes berikut sebagai pod-monitoring-config-sync-monitoring.yaml. Manifes ini mengonfigurasi PodMonitoring untuk menyalin metrik Config Sync pada port 8675 Pod otel-collector-* pada namespace config-management-monitoring. Resource PodMonitoring menggunakan pemilih label Kubernetes untuk menemukan Pod otel-collector-*.

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: config-sync-monitoring
      namespace: config-management-monitoring
    spec:
      selector:
        matchLabels:
          app: opentelemetry
          component: otel-collector
      endpoints:
      - port: 8675
        interval: 10s
    
  3. Terapkan manifes ke cluster:

    kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
    

  4. Memastikan data Prometheus Anda diekspor menggunakan Cloud Monitoring Halaman Metrics Explorer di konsol Google Cloud dengan mengikuti petunjuk tentang Data Google Cloud Managed Service for Prometheus di di Cloud Monitoring.