PromQL untuk Cloud Monitoring

Dokumen ini menjelaskan cara mengonfigurasi Grafana untuk membaca data metrik dari Cloud Monitoring. Kemudian, Anda dapat menggunakan PromQL untuk memvisualisasikan dan memetakan data. Grafana dan Cloud Monitoring ditautkan bersama oleh proses yang disebut penyinkron sumber data, yang memungkinkan komunikasi antara sumber data Grafana dan Cloud Monitoring. Penyinkron sumber data melakukan hal berikut:

  • Mengirim nilai konfigurasi ke sumber data Grafana.
  • Mempertahankan kredensial autentikasi untuk Trusted Cloud by S3NS akun layanan yang dapat membaca data metrik dari Cloud Monitoring.

Dokumen ini menjelaskan cara menyiapkan sinkronisasi sumber data dan memberikan informasi khusus untuk penggunaan PromQL di Cloud Monitoring. Dokumen ini mengasumsikan bahwa Anda sudah memahami Grafana.

Memberi otorisasi Grafana untuk membaca data metrik

Bagian ini menjelaskan cara menyiapkan otorisasi antara Cloud Monitoring dan Grafana menggunakan penyinkron sumber data untuk membuat dan menyinkronkan kredensial.

Menggunakan penyinkron sumber data untuk otorisasi

Trusted Cloud by S3NS Semua API memerlukan autentikasi menggunakan OAuth2; namun, Grafana tidak mendukung autentikasi OAuth2 untuk akun layanan yang digunakan dengan sumber data Prometheus. Untuk menggunakan Grafana dengan Cloud Monitoring, Anda menggunakan penyinkron sumber data untuk membuat kredensial OAuth2 bagi akun layanan Anda dan menyinkronkannya ke Grafana melalui API sumber data Grafana.

Anda harus menggunakan penyinkron sumber data untuk mengonfigurasi dan memberi otorisasi Grafana agar dapat membuat kueri data secara global. Jika Anda tidak mengikuti langkah-langkah ini, Grafana hanya mengeksekusi kueri terhadap data di server Prometheus lokal.

Penyinkron sumber data adalah alat antarmuka command line yang mengirimkan nilai konfigurasi dari jarak jauh ke sumber data Grafana Prometheus tertentu. Hal ini memastikan bahwa sumber data Grafana Anda telah dikonfigurasi dengan benar sebagai berikut:

  • Autentikasi, dilakukan dengan menyegarkan token akses OAuth2 secara berkala
  • Kumpulan Cloud Monitoring API ditetapkan sebagai URL server Prometheus
  • Metode HTTP ditetapkan ke GET
  • Jenis dan versi Prometheus ditetapkan minimal ke 2.40.x
  • Nilai waktu tunggu HTTP dan Kueri ditetapkan ke 2 menit

Penyinkron sumber data harus dijalankan berulang kali. Karena masa aktif token akses Trusted Cloud by S3NS API adalah satu jam, menjalankan sinkronisasi sumber data setiap 10 menit akan memastikan Anda memiliki koneksi yang diautentikasi tanpa gangguan antara Grafana dan Cloud Monitoring API.

Mengonfigurasi dan mengautentikasi sumber data Grafana

Anda dapat menggunakan Grafana untuk membuat kueri data metrik Cloud Monitoring dari layanan Google Kubernetes Engine atau lingkungan lainnya. Petunjuk menggunakan variabel yang dapat diedit untuk membuat perintah yang dapat dijalankan. Kami sangat menyarankan penggunaan variabel yang dapat diedit dan ikon salin-tempel yang dapat diklik yang disematkan dalam contoh kode.

GKE

Untuk men-deploy dan menjalankan penyinkron sumber data di cluster Kubernetes, lakukan hal berikut:

  1. Pilih project, cluster, dan namespace untuk men-deploy sinkronisasi sumber data.

    Selanjutnya, pastikan Anda mengonfigurasi dan mengizinkan penyinkron sumber data dengan benar:

  2. Tentukan URL instance Grafana Anda, misalnya https://yourcompanyname.grafana.net untuk deployment Grafana Cloud atau http://grafana.NAMESPACE_NAME.svc:3000 untuk instance lokal yang dikonfigurasi menggunakan YAML deployment pengujian.

    Jika Anda men-deploy Grafana secara lokal dan cluster Anda dikonfigurasi untuk mengamankan semua traffic dalam cluster menggunakan TLS, Anda harus menggunakan https:// di URL dan melakukan autentikasi menggunakan salah satu opsi autentikasi TLS yang didukung.

  3. Pilih sumber data Grafana Prometheus yang ingin Anda gunakan untuk Cloud Monitoring, yang dapat berupa sumber data baru atau yang sudah ada, lalu temukan dan catat UID sumber data. UID sumber data dapat ditemukan di bagian terakhir URL saat menjelajahi atau mengonfigurasi sumber data, misalnya https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID. Jangan salin seluruh URL sumber data. Salin hanya ID unik di URL.

  4. Siapkan akun layanan Grafana dengan membuat akun layanan dan membuat token untuk digunakan akun tersebut:

    1. Di sidebar navigasi Grafana, klik Administration > Users and Access > Service Accounts.
    2. Buat akun layanan dengan mengklik Tambahkan akun layanan, beri nama, dan berikan peran "Admin" di Grafana. Jika versi Grafana Anda mengizinkan izin yang lebih terperinci, Anda dapat menggunakan peran Sumber Data > Penulis.

    3. Klik Tambahkan token akun layanan.

    4. Tetapkan masa berlaku token ke "Tidak ada masa berlaku", lalu klik Buat token, lalu salin token yang dibuat ke papan klip untuk digunakan sebagai GRAFANA_SERVICE_ACCOUNT_TOKEN di langkah berikutnya.

  5. Siapkan variabel lingkungan berikut menggunakan hasil langkah-langkah sebelumnya:

    # These values are required.
    PROJECT_ID=SCOPING_PROJECT_ID # The value from Step 1.
    GRAFANA_API_ENDPOINT=GRAFANA_INSTANCE_URL # The value from step 2. This is a URL.
    DATASOURCE_UIDS=GRAFANA_DATASOURCE_UID # The value from step 3. This is not a URL.
    GRAFANA_API_TOKEN=GRAFANA_SERVICE_ACCOUNT_TOKEN # The value from step 4.
    GCM_ENDPOINT_OVERRIDE=--gcm-endpoint-override="https://monitoring.apis-s3ns.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    
  6. Jalankan perintah berikut untuk membuat CronJob yang memuat ulang sumber data saat inisialisasi, lalu setiap 10 menit. Jika Anda menggunakan Workload Identity Federation untuk GKE, nilai NAMESPACE_NAME harus sama dengan namespace yang sebelumnya Anda ikat ke akun layanan.

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.15.3/cmd/datasource-syncer/datasource-syncer.yaml \
    | sed 's|$DATASOURCE_UIDS|'"$DATASOURCE_UIDS"'|; s|$GRAFANA_API_ENDPOINT|'"$GRAFANA_API_ENDPOINT"'|; s|$GRAFANA_API_TOKEN|'"$GRAFANA_API_TOKEN"'|; s|$PROJECT_ID|'"$PROJECT_ID"'|;' s|$GCM_ENDPOINT_OVERRIDE|'"$GCM_ENDPOINT_OVERRIDE"'|; \
    | kubectl -n NAMESPACE_NAME apply -f -
    
  7. Buka sumber data Grafana yang baru dikonfigurasi dan verifikasi bahwa nilai URL server Prometheus dimulai dengan https://monitoring.apis-s3ns.fr. Anda mungkin harus memuat ulang halaman. Setelah diverifikasi, buka bagian bawah halaman dan pilih Simpan & uji. Anda harus memilih tombol ini setidaknya sekali untuk memastikan pelengkapan otomatis label di Grafana berfungsi.

Memverifikasi kredensial akun layanan

Jika cluster Kubernetes Anda telah mengaktifkan Workload Identity Federation untuk GKE, Anda dapat melewati bagian ini.

Saat berjalan di GKE, Cloud Monitoring secara otomatis mengambil kredensial dari lingkungan berdasarkan akun layanan default Compute Engine. Akun layanan default memiliki izin yang diperlukan, monitoring.metricWriter dan monitoring.viewer, secara default. Jika Anda tidak menggunakan Workload Identity Federation untuk GKE, dan sebelumnya telah menghapus salah satu peran tersebut dari akun layanan node default, Anda harus menambahkan kembali izin yang hilang tersebut sebelum melanjutkan.

Mengonfigurasi akun layanan untuk Workload Identity Federation for GKE

Jika cluster Kubernetes Anda tidak mengaktifkan Workload Identity Federation untuk GKE, Anda dapat melewati bagian ini.

Cloud Monitoring merekam data metrik menggunakan Cloud Monitoring API. Jika cluster Anda menggunakan Workload Identity Federation for GKE, Anda harus memberikan izin akun layanan Kubernetes ke Monitoring API. Bagian ini menjelaskan hal berikut:

  • Membuat akun layananTrusted Cloud by S3NS khusus, SERVICE_ACCT_NAME.
  • Mengikat Trusted Cloud akun layanan ke akun layanan Kubernetes default di namespace pengujian, NAMESPACE_NAME.
  • Memberikan izin yang diperlukan ke akun layanan Trusted Cloud .

Buat dan ikat akun layanan

Langkah ini muncul di beberapa tempat dalam dokumentasi Cloud Monitoring. Jika Anda telah melakukan langkah ini sebagai bagian dari tugas sebelumnya, Anda tidak perlu mengulanginya. Lanjutkan ke Melakukan otorisasi akun layanan.

Urutan perintah berikut membuat akun layanan SERVICE_ACCT_NAME dan mengikatnya ke akun layanan Kubernetes default di namespace NAMESPACE_NAME:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create SERVICE_ACCT_NAME \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \
  SERVICE_ACCT_NAME@PROJECT_ID. \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  default \
  iam.gke.io/gcp-service-account=SERVICE_ACCT_NAME@PROJECT_ID.

Jika Anda menggunakan namespace atau akun layanan GKE yang berbeda, sesuaikan perintah dengan tepat.

Memberikan otorisasi akun layanan

Grup izin terkait dikumpulkan ke dalam peran, dan Anda memberikan peran tersebut kepada akun utama, dalam contoh ini, akun layanan Trusted Cloud. Untuk mengetahui informasi selengkapnya tentang peran Monitoring, lihat Kontrol akses.

Perintah berikut memberikan peran Monitoring API yang diperlukan akun layanan Trusted Cloud ,SERVICE_ACCT_NAME, untuk membaca data metrik.

Jika Anda telah memberikan peran tertentu kepada Trusted Cloud akun layanan sebagai bagian dari tugas sebelumnya, Anda tidak perlu melakukannya lagi.

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID. \
  --role=roles/monitoring.viewer \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID. \
  --role=roles/iam.serviceAccountTokenCreator

Men-debug konfigurasi Workload Identity Federation for GKE

Jika Anda mengalami masalah saat mengaktifkan Workload Identity Federation for GKE, lihat dokumentasi untuk memverifikasi penyiapan Workload Identity Federation for GKE dan panduan pemecahan masalah Workload Identity Federation for GKE.

Karena kesalahan ketik dan penyalinan-penempelan sebagian adalah sumber kesalahan paling umum saat mengonfigurasi Workload Identity Federation untuk GKE, kami sangat merekomendasikan penggunaan variabel yang dapat diedit dan ikon salin-tempel yang dapat diklik yang disematkan dalam contoh kode dalam petunjuk ini.

Workload Identity Federation for GKE di lingkungan produksi

Contoh yang dijelaskan dalam dokumen ini mengikat akun layanan Trusted Cloud ke akun layanan Kubernetes default dan memberikan semua izin yang diperlukan kepada akun layanan Trusted Clouduntuk menggunakan Monitoring API.

Dalam lingkungan produksi, Anda mungkin ingin menggunakan pendekatan yang lebih terperinci, dengan akun layanan untuk setiap komponen, yang masing-masing memiliki izin minimal. Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi akun layanan untuk pengelolaan workload identity, lihat Menggunakan Workload Identity Federation untuk GKE.

Di tempat lainnya

Untuk men-deploy dan menjalankan penyinkron sumber data di lingkungan selain Google Kubernetes Engine, lakukan hal berikut:

  1. Siapkan akun layanan yang akan digunakan oleh penyinkron sumber data:

    1. Tetapkan project default untuk perintah gcloud:

      gcloud config set project PROJECT_ID
      
    2. Buat akun layanan untuk digunakan oleh penyinkron sumber data:

      gcloud iam service-accounts create DS_SYNCER_SVCACCT_NAME
      
    3. Beri akun layanan izin untuk membaca data metrik:

       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID. \
       --role=roles/monitoring.viewer \
       && \
       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID. \
       --role=roles/iam.serviceAccountTokenCreator
      
    4. Buat kunci untuk akun layanan:

      gcloud iam service-accounts keys create DS_SYNCER_SVCACCT_KEYFILE_NAME.json \
      --iam-account DS_SYNCER_SVCACCT_NAME@PROJECT_ID.
      

      Jalur ke direktori ini digunakan untuk menyetel variabel lingkungan pada langkah berikutnya. Untuk mendapatkan jalur, jalankan perintah pwd dan catat nilainya:

      pwd
      DS_SYNCER_SVCACCT_KEYFILE_DIR
      
  2. Tentukan URL instance Grafana Anda, misalnya https://yourcompanyname.grafana.net untuk deployment Grafana Cloud atau https://localhost:3000 untuk instance pengujian lokal. Nilai ini digunakan dalam perintah untuk menjalankan penyinkron sumber data.

    Jika Anda men-deploy Grafana secara lokal untuk cluster Kubernetes yang dikonfigurasi untuk mengamankan semua traffic dalam cluster menggunakan TLS, Anda harus menggunakan https:// di URL dan, pada langkah berikutnya, melakukan autentikasi menggunakan salah satu opsi autentikasi TLS yang didukung.

  3. Di Grafana, tambahkan sumber data Prometheus untuk digunakan bagi Cloud Monitoring, dan catat UID sumber data:

    1. Klik Koneksi > Sumber data > Tambahkan sumber data baru. Pilih Prometheus dari daftar database deret waktu.

    2. Di kolom Prometheus server URL, masukkan nilai berikut:

      https://monitoring.apis-s3ns.fr/v1/projects/PROJECT_ID/location/global/prometheus/
      
    3. Klik Simpan dan uji

      URL di browser untuk halaman sumber data berisi UI sumber data, misalnya, https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID.

    4. Mencatat UID sumber data. Nilai ini digunakan dalam perintah untuk menjalankan penyinkron sumber data. Jangan menyalin seluruh URL sumber data. Salin hanya ID unik di URL, yang merupakan nilai seperti ee0z3woqjah34e:

      GRAFANA_DATASOURCE_UID
      
  4. Siapkan akun layanan Grafana dengan membuat akun layanan dan membuat token untuk digunakan akun layanan:

    1. Di sidebar navigasi Grafana, klik Administration > Users and Access > Service Accounts.
    2. Buat akun layanan dengan mengklik Tambahkan akun layanan, beri nama, dan berikan peran "Admin" di Grafana.

    3. Klik Tambahkan token akun layanan.

    4. Tetapkan masa berlaku token ke "Tidak ada masa berlaku", lalu klik Buat token, lalu salin token yang dibuat ke variabel yang dapat diedit berikut. Nilai ini digunakan dalam perintah untuk menjalankan penyinkron sumber data.

      GRAFANA_SERVICE_ACCOUNT_TOKEN
      
  5. Jalankan penyinkron sumber data. Anda dapat menjalankan sinkronisasi dari image container yang telah dibuat sebelumnya menggunakan Docker, atau Anda dapat mem-build kode dari sumber dan menjalankannya secara manual. Penyinkron sumber data adalah aplikasi Go, jadi Anda harus menginstal Go untuk membuat penyinkron dari sumber.

    Docker

    Jalankan penyinkron sumber data dari Docker menggunakan image container gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0. Untuk pengujian, Anda dapat menjalankan penyinkron secara manual. Setelah memverifikasi bahwa koneksi berfungsi, karena token akses memiliki masa aktif satu jam, Anda harus menggunakan mekanisme otomatis seperti tugas cron untuk menjalankan sinkronisasi sumber data setiap 10 menit guna memastikan koneksi Anda tidak terganggu.

    Gunakan perintah Docker berikut untuk menjalankan penyinkron data sumber:

    docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/DS_SYNCER_SVCACCT_KEYFILE_NAME.json" gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0
    -datasource-uids=UID_OF_GRAFANA_DATASOURCE
    -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
    -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
    -project-id=PROJECT_ID
    -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
    -gcm-endpoint-override="https://monitoring.apis-s3ns.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    

    Untuk membuat tugas cron guna menjalankan sinkronisasi sumber data, lakukan hal berikut:

    1. Edit tabel cron:

      cron -e
      
    2. Tambahkan entri yang menjalankan perintah sebelumnya setiap 10 menit:

      */10 * * * * * docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/<KEY_ID>" gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0 -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.apis-s3ns.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

    Untuk mengetahui informasi selengkapnya tentang opsi command line yang tersedia saat menjalankan penyinkron data sumber, lihat dokumen README.

    Kode sumber

    1. Untuk membuat sinkronisasi sumber data sendiri, lakukan hal berikut:

      1. Buat direktori untuk memuat kode, lalu ubah ke direktori tersebut:

        mkdir data-source-syncer-code
        
        cd data-source-syncer-code
        

        Jalur ke direktori ini digunakan untuk menyetel variabel lingkungan pada langkah berikutnya. Untuk mendapatkan jalur, jalankan perintah pwd dan catat di variabel yang dapat diedit:

        pwd
        PATH_TO_LOCAL_REPO_COPY
        
      2. Clone kode dari rilis repositori saat ini:

        git clone -b 'v0.15.3' --single-branch https://github.com/GoogleCloudPlatform/prometheus-engine
        
      3. Buka direktori datasource-syncer dan bangun kode:

        cd prometheus-engine/cmd/datasource-syncer
        
        go build main.go
        
    2. Jalankan penyinkron sumber data. Untuk pengujian, Anda dapat menjalankan sinkronisasi secara manual. Setelah memverifikasi bahwa koneksi berfungsi, karena token akses memiliki masa aktif satu jam, Anda harus menggunakan mekanisme otomatis seperti tugas cron untuk menjalankan sinkronisasi sumber data setiap 10 menit guna memastikan koneksi Anda tidak terganggu.

      Gunakan perintah berikut untuk menjalankan penyinkron data sumber secara manual:

      main -datasource-uids=UID_OF_GRAFANA_DATASOURCE
      -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
      -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
      -project-id=PROJECT_ID
      -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
      -gcm-endpoint-override="https://monitoring.apis-s3ns.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

      Untuk membuat tugas cron guna menjalankan sinkronisasi sumber data, lakukan hal berikut:

      1. Edit tabel cron:

         cron -e
        
      2. Tambahkan entri yang menjalankan perintah sebelumnya setiap 10 menit:

         */10 * * * * * main -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.apis-s3ns.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
        

      Untuk mengetahui informasi selengkapnya tentang opsi command line yang tersedia saat menjalankan penyinkron data sumber, lihat dokumen README.

  6. Buka sumber data Grafana yang baru dikonfigurasi dan pastikan nilai URL server Prometheus dimulai dengan https://monitoring.apis-s3ns.fr. Anda mungkin perlu memuat ulang halaman. Setelah diverifikasi, buka bagian bawah halaman, lalu klik Simpan & uji. Anda harus mengklik tombol ini setidaknya sekali untuk memastikan pelengkapan otomatis label di Grafana berfungsi.

Melihat metrik di Grafana

Untuk melihat metrik dari Trusted Cloud project Anda di Grafana, lakukan hal berikut:

  1. Klik Jelajahi di panel navigasi atau di halaman Sumber Data.

  2. Di kolom Metrik, gunakan menu drop-down untuk memilih metrik. Anda juga dapat memilih Metrics Explorer untuk menelusuri metrik tertentu. Jika metrik dikaitkan dengan lebih dari satu resource yang dipantau, Anda harus menambahkan filter label monitored_resource ke kueri dan memilih jenis resource.

  3. Tambahkan filter dan operasi label tambahan untuk membuat kueri.

Untuk mengetahui informasi tentang cara membuat visualisasi dan dasbor di Grafana, lihat Panel dan visualisasi.

Membuat kueri metrik Cloud Monitoring menggunakan PromQL

Metrik Cloud Monitoring dapat dikueri menggunakan spesifikasi UTF-8 untuk PromQL. Nama metrik UTF-8 harus diapit tanda kutip dan dipindahkan ke dalam tanda kurung kurawal. Nama label juga harus diapit tanda petik jika berisi karakter yang tidak kompatibel dengan versi lama. Untuk metrik Cloud Monitoring kubernetes.io/container/cpu/limit_utilization, kueri berikut setara:

  • {"kubernetes.io/container/cpu/limit_utilization", pod_name="foo"}
  • {__name__="kubernetes.io/container/cpu/limit_utilization", pod_name="foo"}.
  • {"__name__"="kubernetes.io/container/cpu/limit_utilization", "pod_name"="foo"}.

Metrik bernilai distribusi Cloud Monitoring dapat dikueri seperti histogram Prometheus, dengan akhiran _count, _sum, atau _bucket ditambahkan ke nama metrik.

Diagram dan dasbor yang dibuat sebelum kueri kompatibilitas UTF-8 Cloud Monitoring menggunakan metrik dengan mengonversi namanya menjadi yang setara dan kompatibel dengan PromQL lama. Untuk mengetahui informasi selengkapnya tentang aturan konversi PromQL lama, lihat Memetakan metrik Cloud Monitoring ke PromQL lama.

Mempelajari PromQL

Untuk mempelajari dasar-dasar penggunaan PromQL, sebaiknya lihat dokumentasi open source. Referensi berikut dapat membantu Anda memulai:

Menentukan jenis resource yang dimonitor

Jika metrik Cloud Monitoring hanya dikaitkan dengan satu jenis resource yang dipantau Cloud Monitoring, kueri PromQL akan berfungsi tanpa perlu menentukan jenis resource secara manual. Namun, beberapa metrik dalam Cloud Monitoring, termasuk beberapa metrik sistem, dipetakan ke lebih dari satu jenis resource.

Anda dapat melihat jenis resource yang dimonitor yang dipetakan ke metrik dengan melihat daftar metrikTrusted Cloud by S3NS . Setiap entri dalam dokumentasi mencantumkan jenis resource yang dimonitor terkait di kolom pertama setiap entri di bawah jenis. Jika tidak ada jenis resource yang dimonitor yang tercantum, metrik dapat dikaitkan dengan jenis apa pun.

Jika metrik dikaitkan dengan lebih dari satu jenis resource, Anda harus menentukan jenis resource dalam kueri PromQL. Ada label khusus, monitored_resource, yang dapat Anda gunakan untuk memilih jenis resource.

Jenis resource yang dipantau sebagian besar berupa string pendek, seperti gce_instance, tetapi terkadang muncul sebagai URI lengkap, seperti monitoring.googleapis.com/MetricIngestionAttribution. Kueri PromQL yang disusun dengan benar mungkin terlihat seperti berikut:

  • logging_googleapis_com:byte_count{monitored_resource="k8s_container"}
  • loadbalancing_googleapis_com:l3_external_egress_bytes_count{monitored_resource="loadbalancing.googleapis.com/ExternalNetworkLoadBalancerRule"}

Jika Anda tidak menggunakan label monitored_resource saat diperlukan, Anda akan menerima error berikut:

metric is configured to be used with more than one monitored resource type; series selector must specify a label matcher on monitored resource name

Menyelesaikan konflik label

Di Cloud Monitoring, label dapat termasuk dalam metrik atau resource. Jika label metrik memiliki nama kunci yang sama dengan label resource, Anda dapat merujuk ke label metrik secara khusus dengan menambahkan awalan metric_ ke nama kunci label dalam kueri Anda.

Misalnya, anggaplah Anda memiliki label resource dan label metrik yang keduanya bernama pod_name dalam metrik example.googleapis.com/user/widget_count.

  • Untuk memfilter nilai label resource, gunakan
    example_googleapis_com:user_widget_count{pod_name="RESOURCE_LABEL_VALUE"}

  • Untuk memfilter nilai label metrik, gunakan
    example_googleapis_com:user_widget_count{metric_pod_name="METRIC_LABEL_VALUE"}

Memetakan nama metrik Cloud Monitoring ke PromQL lama

Nama metrik Cloud Monitoring mencakup dua komponen, yaitu domain (seperti compute.googleapis.com/) dan jalur (seperti instance/disk/max_read_ops_count). Karena PromQL lama hanya mendukung karakter khusus : dan _, Anda harus menerapkan aturan berikut agar nama metrik Monitoring kompatibel dengan PromQL lama:

  • Ganti / pertama dengan :.
  • Ganti semua karakter khusus lainnya (termasuk . dan karakter / lainnya) dengan _.

Tabel berikut mencantumkan beberapa nama metrik dan PromQL lama yang setara:

Nama metrik Cloud Monitoring Nama metrik PromQL lama
compute.googleapis.com/instance/cpu/utilization compute_googleapis_com:instance_cpu_utilization
logging.googleapis.com/log_entry_count logging_googleapis_com:log_entry_count

Metrik bernilai distribusi Cloud Monitoring dapat dikueri seperti histogram Prometheus, dengan akhiran _count, _sum, atau _bucket ditambahkan ke nama metrik:

Nama metrik Cloud Monitoring Nama metrik PromQL lama
networking.googleapis.com/vm_flow/rtt networking_googleapis_com:vm_flow_rtt_sum
networking_googleapis_com:vm_flow_rtt_count
networking_googleapis_com:vm_flow_rtt_bucket

Kompatibilitas PromQL

PromQL untuk Cloud Monitoring mungkin berfungsi sedikit berbeda dengan PromQL upstream.

Kueri PromQL di Cloud Monitoring dievaluasi sebagian di backend Monarch menggunakan bahasa kueri internal, dan ada beberapa perbedaan yang diketahui dalam hasil kueri. Selain perbedaan yang tercantum di bagian ini, PromQL di Cloud Monitoring setara dengan PromQL yang tersedia di Prometheus versi 2.44.

Fungsi PromQL yang ditambahkan setelah Prometheus versi 2.44 mungkin tidak didukung.

Dukungan UTF-8

PromQL untuk Cloud Monitoring mendukung kueri UTF-8.

Jika nama metrik Prometheus Anda hanya terdiri dari karakter alfanumerik ditambah karakter _ atau :, dan jika kunci label Anda hanya terdiri dari karakter alfanumerik ditambah karakter _, Anda dapat membuat kueri menggunakan sintaksis PromQL tradisional. Misalnya, kueri yang valid mungkin terlihat seperti job:my_metric:sum{label_key="label_value"}.

Namun, jika nama metrik Prometheus Anda menggunakan karakter khusus kecuali karakter _ atau :, atau jika kunci label Anda menggunakan karakter khusus kecuali karakter _, maka Anda harus membuat kueri sesuai dengan spesifikasi UTF-8 untuk PromQL.

Nama metrik UTF-8 harus diapit tanda petik dan dipindahkan ke dalam tanda kurung. Nama label juga harus diapit tanda petik jika berisi karakter yang tidak kompatibel dengan versi lama. Contoh kueri valid berikut semuanya setara:

  • {"my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {__name__="my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {"__name__"="my.domain.com/metric/name_bucket", "label.key"="label.value"}

Mencocokkan nama metrik

Hanya pencocokan persis pada nama metrik yang didukung. Anda harus menyertakan kecocokan persis pada nama metrik dalam kueri Anda.

Sebaiknya gunakan solusi berikut untuk skenario umum yang menggunakan pencocokan ekspresi reguler pada label __name__:

  • Konfigurasi adaptor Prometheus sering menggunakan operator =~ untuk mencocokkan beberapa nama metrik. Untuk memperbaiki penggunaan ini, perluas konfigurasi untuk menggunakan kebijakan terpisah untuk setiap metrik dan beri nama setiap metrik secara eksplisit. Hal ini juga mencegah Anda melakukan penskalaan otomatis secara tidak sengaja pada metrik yang tidak terduga.
  • Ekspresi reguler sering digunakan untuk membuat grafik beberapa metrik non-dimensi pada diagram yang sama. Misalnya, jika Anda memiliki metrik seperti cpu_servicename_usage, Anda dapat menggunakan karakter pengganti untuk membuat grafik semua layanan Anda secara bersamaan. Menggunakan metrik non-dimensi seperti ini adalah praktik yang sangat buruk di Cloud Monitoring, dan praktik ini menyebabkan performa kueri yang sangat buruk. Untuk memperbaiki penggunaan ini, pindahkan semua dimensi ke dalam label metrik, bukan menyematkan dimensi dalam nama metrik.
  • Kueri untuk beberapa metrik sering digunakan untuk melihat metrik yang tersedia untuk dikueri. Sebaiknya gunakan panggilan /labels/__name__/values untuk menemukan metrik.

Tidak berlaku

Keterlambatan tidak didukung di backend Monarch.

Penghitungan irate

Jika periode lihat balik untuk fungsi irate kurang dari ukuran langkah, kami akan memperbesar periode menjadi ukuran langkah. Monarch memerlukan perubahan ini untuk memastikan bahwa tidak ada data input yang sepenuhnya diabaikan dalam output. Perbedaan ini juga berlaku untuk penghitungan rate.

Penghitungan rate dan increase

Jika periode lihat balik untuk fungsi rate kurang dari ukuran langkah, kami akan memperbesar periode menjadi ukuran langkah. Monarch memerlukan perubahan ini untuk memastikan bahwa tidak ada data input yang diabaikan sepenuhnya dalam output. Perbedaan ini juga berlaku untuk penghitungan irate.

Ada perbedaan dalam penghitungan interpolasi dan ekstrapolasi. Monarch menggunakan algoritma interpolasi yang berbeda dengan Prometheus, dan perbedaan ini dapat menyebabkan hasil yang sedikit berbeda. Misalnya, sampel penghitung Monarch disimpan dengan rentang waktu, bukan stempel waktu tunggal yang digunakan Prometheus. Oleh karena itu, contoh penghitung di Monarch dapat disertakan dalam penghitungan rasio meskipun stempel waktu Prometheus akan mengecualikannya. Hal ini umumnya menghasilkan hasil tarif yang lebih akurat, terutama saat membuat kueri di awal atau akhir deret waktu pokok.

Penghitungan histogram_quantile

Penghitungan histogram_quantile PromQL pada histogram tanpa sampel menghasilkan nilai NaN. Penghitungan bahasa kueri internal tidak menghasilkan nilai; titik pada stempel waktu akan dihilangkan.

Perbedaan perhitungan tarif juga dapat memengaruhi input ke kueri histogram_quantile.

Fungsi khusus jenis pada metrik dengan jenis yang berbeda

Meskipun Prometheus upstream diketik secara lemah, Monarch diketik secara kuat. Artinya, menjalankan fungsi khusus untuk satu jenis pada metrik dengan jenis yang berbeda (misalnya, menjalankan rate() pada metrik GAUGE atau histogram_quantile() pada metrik COUNTER atau metrik tanpa jenis) tidak berfungsi di Cloud Monitoring, meskipun fungsi ini berfungsi di Prometheus upstream.