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
Managed Service for Prometheus menyediakan komponen evaluator aturan yang memungkinkan Anda menulis aturan dengan aman dalam konteks backend Prometheus global, sehingga Anda tidak mengganggu data pengguna lain di organisasi yang lebih besar. Komponen di-deploy secara otomatis sebagai bagian dari koleksi terkelola saat berjalan di cluster Kubernetes.
Anda dapat menulis aturan dan pemberitahuan pada metrik 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
Prometheus upstream. Aturan pemberitahuan dan perekaman yang ditentukan di Rules
dicakup untuk project_id
, cluster
, dan namespace
resource. Misalnya, aturan job:up:sum
dalam resource di atas
secara efektif membuat kueri
sum without(instance) (up{project_id="test-project", cluster="test-cluster", namespace="NAMESPACE_NAME"})
.
Jaminan ini memastikan bahwa aturan pemberitahuan atau perekaman tidak secara tidak sengaja
mengevaluasi metrik dari aplikasi yang 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.13.0/examples/rules.yaml
Setelah beberapa menit, metrik job:up:sum
akan tersedia.
Pemberitahuan AlwaysFiring
juga mulai diaktifkan. Untuk informasi tentang cara mengirim pemberitahuan ke Alertmanager, lihat Konfigurasi Alertmanager.
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
, dan 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 untuk memberikan jalur migrasi yang lancar guna menggabungkan aturan yang ada ke dalam evaluasi aturan terkelola. Anda dapat menyertakan aturan yang ada dalam resource Aturan. Misalnya, berikut 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 Managed Service for Prometheus di semua project dalam 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 dicakup dalam ruang nama 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 Managed Service for Prometheus, sebaiknya gunakan
GlobalRules hanya untuk kasus penggunaan yang jarang terjadi saat pemberitahuan mungkin memerlukan data di
semua cluster sekaligus. Untuk metrik setiap deployment, gunakan resource Rules atau
ClusterRules untuk keandalan yang lebih tinggi dan untuk memastikan bahwa evaluasi
tidak menyertakan data yang tidak diinginkan. Sebaiknya pertahankan label cluster
dan namespace
dalam hasil evaluasi aturan, kecuali jika tujuan aturan
adalah menggabungkan label tersebut. Jika tidak, performa kueri mungkin menurun dan
Anda mungkin mengalami batas kardinalitas. Sebaiknya jangan menghapus kedua label.
Evaluasi aturan multi-project dan global
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 di 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 di node) sehingga akun layanan dapat membaca dari project cakupan dan menulis ke semua project yang dipantau dalam cakupan metrik.
Jika cakupan metrik Anda berisi semua project, aturan Anda akan dievaluasi secara global. Untuk informasi selengkapnya, lihat Cakupan metrik.
Pemberitahuan menggunakan metrik Cloud Monitoring
Anda dapat menggunakan resource GlobalRules untuk mendapatkan pemberitahuan tentang metrik sistem Google Cloud menggunakan PromQL. Untuk mengetahui petunjuk cara membuat kueri yang valid, lihat PromQL untuk metrik Cloud Monitoring.
Mengonfigurasi aturan dan pemberitahuan menggunakan Terraform
Anda dapat mengotomatiskan pembuatan dan pengelolaan resource Rules, ClusterRules, dan
GlobalRules menggunakan kubernetes_manifest
jenis resource Terraform atau kubectl_manifest
jenis resource Terraform, yang mana saja
memungkinkan Anda menentukan resource kustom arbitrer.
Untuk informasi umum tentang penggunaan Google Cloud dengan Terraform, lihat Terraform dengan Google Cloud.
Memberikan kredensial secara eksplisit
Saat berjalan di GKE, evaluator aturan akan otomatis mengambil kredensial dari lingkungan berdasarkan akun layanan node. Di cluster Kubernetes non-GKE, kredensial harus disediakan 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:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:gmp-test-sa@PROJECT_ID. \ --role=roles/monitoring.viewer \ && \ gcloud projects add-iam-policy-binding PROJECT_ID\ --member=serviceAccount:gmp-test-sa@PROJECT_ID. \ --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.
Tambahkan file kunci sebagai secret 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 cetak tebal ke resource:
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 pengumpulan terkelola berfungsi.Simpan file dan tutup editor. Setelah perubahan diterapkan, pod akan dibuat ulang dan mulai mengautentikasi ke backend metrik dengan akun layanan yang diberikan.
Menskalakan evaluasi aturan
Evaluator aturan berjalan sebagai Deployment replika tunggal dengan permintaan dan batas resource tetap. Anda mungkin melihat gangguan pada beban kerja, seperti OOMKilled saat mengevaluasi sejumlah besar aturan. Untuk mengurangi hal ini, Anda dapat men-deploy
VerticalPodAutoscaler
untuk menskalakan deployment secara vertikal. Pertama, pastikan Penskalaan Otomatis Pod Vertikal diaktifkan di cluster Kubernetes Anda. Kemudian, terapkan resourceVerticalPodAutoscaler
seperti berikut:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: rule-evaluator namespace: gmp-system spec: resourcePolicy: containerPolicies: - containerName: evaluator controlledResources: - memory maxAllowed: memory: 4Gi minAllowed: memory: 16Mi mode: Auto targetRef: apiVersion: apps/v1 kind: Deployment name: rule-evaluator updatePolicy: updateMode: Auto
Anda dapat memverifikasi bahwa autoscaler berfungsi dengan memeriksa status autoscaler:
kubectl get vpa --namespace gmp-system rule-evaluator
Jika berfungsi, autoscaler akan melaporkan bahwa autoscaler telah menghitung rekomendasi resource untuk workload di kolom "PROVIDED":
NAME MODE CPU MEM PROVIDED AGE rule-evaluator Auto 2m 11534336 True 30m
Mengompresi konfigurasi
Jika memiliki banyak resource Aturan, Anda mungkin kehabisan ruang ConfigMap. Untuk memperbaikinya, aktifkan kompresi
gzip
di resource OperatorConfig:apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config features: config: compression: gzip
Konfigurasi Alertmanager
Anda dapat menggunakan resource OperatorConfig untuk mengonfigurasi evaluator aturan terkelola guna mengirim pemberitahuan ke Alertmanager Prometheus. Anda dapat mengirim pemberitahuan ke Alertmanager terkelola yang di-deploy secara otomatis, selain Alertmanager yang di-deploy sendiri.
Alertmanager Terkelola
Managed Service for Prometheus men-deploy instance Alertmanager terkelola, yang evaluator aturannya dikonfigurasi secara otomatis untuk meneruskan pemberitahuan. Secara default, konfigurasi ini ditetapkan dengan Secret Kubernetes yang diberi nama 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 Anda (lihat contoh template konfigurasi):
touch alertmanager.yaml
Perbarui file dengan setelan Alertmanager yang diinginkan dan buat Secret bernama
alertmanager
di namespacegmp-public
:kubectl create secret generic alertmanager \ -n gmp-public \ --from-file=alertmanager.yaml
Setelah beberapa saat, Managed Service for Prometheus akan mengambil Secret konfigurasi baru dan mengaktifkan Alertmanager terkelola dengan setelan Anda.
Menyesuaikan nama Secret konfigurasi
Alertmanager terkelola juga mendukung nama Secret kustom untuk memuat konfigurasi. Kemampuan ini berguna jika Anda memiliki beberapa Secret konfigurasi dan ingin instance Alertmanager beralih antar-konfigurasi yang sesuai. Misalnya, Anda mungkin ingin mengubah saluran notifikasi pemberitahuan berdasarkan rotasi shift piket, atau Anda mungkin ingin mengganti konfigurasi Alertmanager eksperimental untuk menguji rute pemberitahuan baru.
Untuk menentukan nama Secret non-default menggunakan resource OperatorConfig, lakukan langkah berikut:
Buat Secret dari file konfigurasi Alertmanager lokal Anda:
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.
Menyesuaikan URL eksternal
Anda dapat mengonfigurasi URL eksternal untuk Alertmanager terkelola sehingga notifikasi pemberitahuan dapat memberikan link callback ke UI pemberitahuan Anda. Hal ini setara dengan menggunakan flag
--web.external-url
Prometheus Alertmanager upstream.apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config managedAlertmanager: externalURL: EXTERNAL_URL
Alertmanager yang di-deploy sendiri
Untuk mengonfigurasi evaluator aturan untuk Alertmanager yang di-deploy sendiri, lakukan hal berikut:
Buka resource OperatorConfig untuk mengedit:
kubectl -n gmp-public edit operatorconfig config
Konfigurasikan resource untuk mengirim pemberitahuan ke layanan Alertmanager Anda:
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 Anda menyatakan bahwa endpoint Alertmanager dapat ditemukan di objek Endpoints
ns=alertmanager/name=alertmanager
, Anda dapat membuat objek ini secara manual atau terprogram sendiri dan mengisinya dengan IP yang dapat dijangkau dari cluster lain. Bagian konfigurasi AlertmanagerEndpoints menyediakan opsi untuk konfigurasi otorisasi jika diperlukan.