Google Cloud Managed Service for Prometheus mendukung evaluasi dan pemberitahuan aturan yang kompatibel dengan Prometheus. Dokumen ini menjelaskan cara menyiapkan evaluasi aturan terkelola.
Evaluasi aturan
Google Cloud Managed Service for Prometheus menyediakan komponen evaluator aturan yang memungkinkan Anda menulis aturan dengan aman dalam konteks backend Prometheus global, sehingga mencegah Anda mengganggu data pengguna lain di organisasi yang lebih besar. Komponen ini secara otomatis di-deploy sebagai bagian dari koleksi terkelola saat berjalan di cluster Kubernetes.
Anda dapat menulis aturan dan pemberitahuan pada metrik Google Cloud Managed Service for Prometheus dan metrik Cloud Monitoring. Anda harus menggunakan resource GlobalRules saat menulis aturan untuk metrik Cloud Monitoring.
Aturan
Evaluasi aturan terkelola menggunakan resource Aturan untuk mengonfigurasi aturan perekaman dan pemberitahuan. Berikut adalah contoh resource Aturan:
apiVersion: monitoring.googleapis.com/v1 kind: Rules metadata: namespace: NAMESPACE_NAME name: example-rules spec: groups: - name: example interval: 30s rules: - record: job:up:sum expr: sum without(instance) (up) - alert: AlwaysFiring expr: vector(1)
Format elemen .spec.groups
identik dengan array rule_group
upstream Prometheus. Aturan pemberitahuan dan pencatatan
yang ditentukan dalam Rules
dicakupkan ke project_id
, cluster
, dan namespace
resource. Misalnya, aturan job:up:sum
dalam resource di atas
secara efektif mengkueri
sum without(instance) (up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"})
.
Jaminan ini memastikan bahwa aturan pemberitahuan atau pencatatan tidak mengevaluasi metrik secara tidak sengaja dari aplikasi yang bahkan mungkin tidak Anda ketahui.
Untuk menerapkan contoh aturan ke cluster Anda, jalankan perintah berikut:
kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.8.2/examples/rules.yaml
Setelah beberapa menit, metrik job:up:sum
akan tersedia.
Notifikasi AlwaysFiring
juga mulai diaktifkan. Untuk mengetahui informasi tentang cara mengirim pemberitahuan ke Alertmanager, lihat Konfigurasi Alerts.
Resource ClusterRules dan
GlobalRules menyediakan antarmuka
yang sama dengan resource Rules
, tetapi menerapkan aturan ke cakupan yang lebih luas.
ClusterRules memilih data menggunakan label project_id
dan cluster
, lalu GlobalRules memilih semua data dalam cakupan metrik yang dikueri tanpa membatasi label.
Untuk dokumentasi referensi tentang semua resource kustom Managed Service for Prometheus, lihat referensi prometheus-engine/doc/api.
Mengonversi dari aturan Prometheus ke Aturan
Resource Aturan menyediakan antarmuka yang kompatibel dengan aturan Prometheus guna menyediakan jalur migrasi yang lancar untuk menggabungkan aturan yang sudah ada ke dalam evaluasi aturan terkelola. Anda dapat menyertakan aturan yang sudah ada dalam resource Aturan. Misalnya, berikut ini adalah aturan Prometheus:
groups: - name: example interval: 30s rules: - record: job:up:sum expr: sum without(instance) (up) - alert: AlwaysFiring expr: vector(1)
Resource Aturan yang sesuai, dengan aturan Prometheus asli dalam huruf tebal, adalah sebagai berikut:
apiVersion: monitoring.googleapis.com/v1 kind: Rules metadata: namespace: NAMESPACE_NAME name: example-rules spec: groups: - name: example interval: 30s rules: - record: job:up:sum expr: sum without(instance) (up) - alert: AlwaysFiring expr: vector(1)
ClusterRules
Anda dapat menggunakan resource ClusterRules untuk mengonfigurasi aturan perekaman dan pemberitahuan yang dapat mengevaluasi semua deret waktu yang dikirim ke Managed Service for Prometheus dari semua namespace di cluster tertentu.
Spesifikasinya sama dengan Rules
. Contoh aturan Prometheus sebelumnya menjadi resource ClusterRules
berikut:
apiVersion: monitoring.googleapis.com/v1 kind: ClusterRules metadata: name: example-clusterrules spec: groups: - name: example interval: 30s rules: - record: job:up:sum expr: sum without(instance) (up) - alert: AlwaysFiring expr: vector(1)
Sebaiknya gunakan resource ClusterRules hanya pada metrik horizontal, seperti yang dihasilkan oleh mesh layanan. Untuk metrik setiap deployment, gunakan resource Aturan untuk memastikan bahwa evaluasi tidak menyertakan data yang tidak diinginkan.
GlobalRules
Anda dapat menggunakan resource GlobalRules untuk mengonfigurasi aturan perekaman dan pemberitahuan yang dapat mengevaluasi semua deret waktu yang dikirim ke Google Cloud Managed Service for Prometheus di seluruh project dalam sebuah cakupan metrik.
Spesifikasinya sama dengan Rules
. Contoh aturan Prometheus sebelumnya menjadi resource GlobalRules
berikut:
apiVersion: monitoring.googleapis.com/v1 kind: GlobalRules metadata: name: example-globalrules spec: groups: - name: example interval: 30s rules: - record: job:up:sum expr: sum without(instance) (up) - alert: AlwaysFiring expr: vector(1)
Karena metrik Cloud Monitoring tidak dicakupkan ke namespace atau cluster, Anda harus menggunakan resource GlobalRules saat menulis aturan atau pemberitahuan untuk metrik Cloud Monitoring. Penggunaan GlobalRules juga diperlukan saat memberikan pemberitahuan tentang metrik sistem Google Kubernetes Engine.
Jika aturan Anda tidak mempertahankan label project_id
atau location
, label tersebut akan ditetapkan secara default ke nilai cluster.
Untuk metrik Google Cloud Managed Service for Prometheus, sebaiknya gunakan GlobalRules hanya untuk kasus penggunaan yang jarang terjadi ketika pemberitahuan mungkin memerlukan data di semua cluster sekaligus. Untuk metrik setiap deployment, gunakan resource Aturan atau ClusterRules untuk keandalan yang lebih tinggi dan untuk memastikan evaluasi tidak menyertakan data yang tidak diinginkan. Sebaiknya pertahankan label cluster
dan namespace
dalam hasil evaluasi aturan kecuali jika tujuan aturan tersebut adalah untuk menggabungkan label-label tersebut. Jika tidak, performa kueri dapat menurun dan Anda mungkin akan mencapai batas kardinalitas. Sangat tidak disarankan untuk
menghapus kedua label.
Evaluasi aturan global dan multi-project
Saat di-deploy di Google Kubernetes Engine, evaluator aturan menggunakan project Google Cloud yang terkait dengan cluster, yang otomatis terdeteksi oleh evaluator aturan. Untuk mengevaluasi aturan yang mencakup project, Anda harus mengonfigurasi evaluator aturan yang menjalankan resource GlobalRules untuk menggunakan project dengan cakupan metrik multi-project. Anda dapat melakukannya dengan dua cara:
- Tempatkan resource GlobalRules Anda dalam project yang memiliki cakupan metrik multi-project.
- Tetapkan kolom
queryProjectID
dalam OperatorConfig untuk menggunakan project dengan cakupan metrik multi-project.
Anda juga harus memperbarui izin akun layanan yang digunakan oleh evaluator aturan (yang biasanya merupakan akun layanan default pada node) agar akun layanan dapat membaca dari project pencakupan dan menulis ke semua project yang dipantau dalam cakupan metrik.
Jika cakupan metrik berisi semua project Anda, aturan Anda akan dievaluasi secara global. Untuk mengetahui informasi selengkapnya, lihat Cakupan Metrik.
Pemberitahuan menggunakan metrik Cloud Monitoring
Anda dapat menggunakan resource GlobalRules untuk memberi tahu tentang metrik sistem Google Cloud menggunakan PromQL. Untuk mengetahui petunjuk cara membuat kueri yang valid, lihat MQL untuk metrik Cloud Monitoring.
Mengonfigurasi aturan dan pemberitahuan menggunakan Terraform
Anda dapat mengotomatiskan pembuatan dan pengelolaan resource Aturan, ClusterRules, dan
GlobalRules dengan menggunakan jenis resource Terraform kubernetes_manifest
atau jenis resource Terraform kubectl_manifest
. Anda juga dapat menentukan resource kustom arbitrer.
Untuk mengetahui informasi umum tentang penggunaan Google Cloud dengan Terraform, baca artikel Terraform dengan Google Cloud.
Memberikan kredensial secara eksplisit
Saat berjalan di GKE, evaluator aturan akan otomatis mengambil kredensial dari lingkungan berdasarkan akun layanan node tersebut. Dalam cluster Kubernetes non-GKE, kredensial harus diberikan secara eksplisit melalui resource OperatorConfig di namespace gmp-public.
Tetapkan konteks ke project target Anda:
gcloud config set project PROJECT_ID
Buat akun layanan:
gcloud iam service-accounts create gmp-test-sa
Berikan izin yang diperlukan ke akun layanan tersebut:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer \ && \ gcloud projects add-iam-policy-binding PROJECT_ID\ --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter
Buat dan download kunci untuk akun layanan:
gcloud iam service-accounts keys create gmp-test-sa-key.json \ --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
Tambahkan file kunci sebagai rahasia ke cluster non-GKE Anda:
kubectl -n gmp-public create secret generic gmp-test-sa \ --from-file=key.json=gmp-test-sa-key.json
Buka resource OperatorConfig untuk mengedit:
kubectl -n gmp-public edit operatorconfig config
Tambahkan teks yang ditampilkan dalam huruf tebal ke referensi:
Pastikan Anda juga menambahkan kredensial ini ke bagianapiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config rules: credentials: name: gmp-test-sa key: key.json
collection
agar koleksi terkelola berfungsi.Simpan file dan tutup editor. Setelah perubahan diterapkan, pod dibuat ulang dan mulai mengautentikasi ke backend metrik dengan akun layanan yang diberikan.
Konfigurasi Alertmanager
Anda dapat menggunakan resource OperatorConfig untuk mengonfigurasi evaluator aturan terkelola untuk mengirim pemberitahuan ke Alertmanager Prometheus. Anda dapat mengirim pemberitahuan ke Alertmanager terkelola yang di-deploy secara otomatis selain Alertmanager yang di-deploy sendiri.
Pengelola Notifikasi Terkelola
Managed Service for Prometheus men-deploy instance Alertmanager terkelola, yang menjadi tujuan konfigurasi evaluator aturan secara otomatis untuk meneruskan pemberitahuan. Secara default, konfigurasi ini disetel dengan Secret Kubernetes bernama khusus yang berisi file konfigurasi Alertmanager.
Untuk mengaktifkan dan mengonfigurasi pelaporan ke instance Alertmanager yang di-deploy, lakukan hal berikut:
Buat file konfigurasi lokal yang berisi setelan Alertmanager (lihat contoh template konfigurasi):
touch alertmanager.yaml
Perbarui file dengan setelan Alertmanager yang Anda inginkan dan buat Secret bernama
alertmanager
dalam namespacegmp-public
:kubectl create secret generic alertmanager \ -n gmp-public \ --from-file=alertmanager.yaml
Setelah beberapa saat, Google Cloud Managed Service for Prometheus akan mengambil konfigurasi baru Secret dan mengaktifkan Alertmanager terkelola dengan setelan Anda.
Menyesuaikan nama Secret konfigurasi
Alertmanager terkelola juga mendukung nama Secret kustom untuk memuat konfigurasi. Kemampuan ini berguna saat Anda memiliki beberapa Secret konfigurasi dan Anda ingin instance Alertmanager beralih di antara konfigurasi yang sesuai. Misalnya, Anda mungkin ingin mengubah saluran notifikasi pemberitahuan berdasarkan shift on-call yang dirotasi, atau Anda ingin menukar konfigurasi Alertmanager eksperimental untuk menguji rute pemberitahuan baru.
Untuk menentukan nama Secret non-default dengan menggunakan resource OperatorConfig, lakukan hal berikut:
Buat Secret dari file konfigurasi Alertmanager lokal:
kubectl create secret generic SECRET_NAME \ -n gmp-public \ --from-file=FILE_NAME
Buka resource OperatorConfig untuk mengedit:
kubectl -n gmp-public edit operatorconfig config
Untuk mengaktifkan pelaporan Alertmanager terkelola, edit resource dengan mengubah bagian
managedAlertmanager
seperti yang ditunjukkan dalam teks tebal berikut:apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config managedAlertmanager: configSecret: name: SECRET_NAME key: FILE_NAME
Jika perlu melakukan perubahan pada konfigurasi Alertmanager, Anda dapat mengedit konfigurasi untuk Alertmanager ini dengan memperbarui Secret yang Anda buat sebelumnya.
Alertmanager yang di-deploy sendiri
Untuk mengonfigurasi evaluator aturan bagi Alertmanager yang di-deploy sendiri, lakukan tindakan berikut:
Buka resource OperatorConfig untuk mengedit:
kubectl -n gmp-public edit operatorconfig config
Konfigurasi resource untuk mengirim pemberitahuan ke layanan Alertmanager:
apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config rules: alerting: alertmanagers: - name: SERVICE_NAME namespace: SERVICE_NAMESPACE port: PORT_NAME
Jika Alertmanager berada di cluster yang berbeda dengan evaluator aturan, Anda mungkin perlu menyiapkan Resource endpoint. Misalnya, jika OperatorConfig menyatakan bahwa endpoint Alertmanager dapat ditemukan di objek Endpoint
ns=alertmanager/name=alertmanager
, Anda dapat membuat objek ini sendiri secara manual atau terprogram dan mengisinya dengan IP yang dapat dijangkau dari cluster lain. Bagian konfigurasi AlertsmanagerEndpoints menyediakan opsi untuk konfigurasi otorisasi jika diperlukan.