Kemampuan observasi aplikasi dengan Prometheus di GKE


Tutorial ini menunjukkan cara menyiapkan pemeriksaan keaktifan microservice aplikasi yang di-deploy ke Google Kubernetes Engine (GKE) menggunakan Prometheus open source.

Tutorial ini menggunakan Prometheus open source. Namun, setiap cluster Autopilot GKE secara otomatis men-deploy Layanan Terkelola untuk Prometheus, solusi lintas project multi-cloud yang terkelola sepenuhnya dari Google Cloud untuk metrik Prometheus. Layanan Terkelola untuk Prometheus memungkinkan Anda memantau dan membuat pemberitahuan secara global tentang workload Anda menggunakan Prometheus, tanpa harus mengelola dan mengoperasikan Prometheus secara manual dalam skala besar.

Anda juga dapat menggunakan alat open source seperti Grafana untuk memvisualisasikan metrik yang dikumpulkan oleh Prometheus.

Tujuan

  • Membuat cluster.
  • Men-deploy Prometheus.
  • Men-deploy aplikasi contoh, Bank of Anthos.
  • Mengonfigurasi pemeriksaan keaktifan Prometheus.
  • Mengonfigurasi pemberitahuan Prometheus.
  • Konfigurasikan Alertmanager untuk mendapatkan notifikasi di saluran Slack.
  • Menyimulasikan pemadaman layanan untuk menguji Prometheus.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, klik Buat project untuk mulai membuat project Google Cloud baru.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API GKE.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, klik Buat project untuk mulai membuat project Google Cloud baru.

    Buka pemilih project

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Aktifkan API GKE.

    Mengaktifkan API

  8. Menginstal Helm API

Menyiapkan lingkungan

Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud.

  1. Tetapkan variabel lingkungan default:

    gcloud config set project PROJECT_ID
    gcloud config set compute/region COMPUTE_REGION
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Google Cloud Anda.
    • PROJECT_ID: region Compute Engine untuk cluster. Untuk tutorial ini, region-nya adalah us-central1. Biasanya, Anda ingin region yang dekat dengan Anda.
  2. Clone contoh repositori yang digunakan dalam tutorial ini:

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    cd bank-of-anthos/
    
  3. Membuat cluster:

    gcloud container clusters create-auto CLUSTER_NAME \
        --release-channel=CHANNEL_NAME \
        --region=COMPUTE_REGION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama untuk cluster baru.
    • CHANNEL_NAME: nama saluran rilis.

Men-deploy Prometheus

Instal Prometheus menggunakan contoh chart Helm:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install tutorial bitnami/kube-prometheus \
    --version 8.2.2 \
    --values extras/prometheus/oss/values.yaml \
    --wait

Perintah ini menginstal Prometheus dengan komponen berikut:

  • Operator Prometheus: cara yang populer untuk men-deploy dan mengonfigurasi Prometheus open source.
  • Alertmanager: menangani pemberitahuan yang dikirim oleh server Prometheus dan mengarahkannya ke aplikasi, seperti Slack.
  • Blackbox exporter: memungkinkan Prometheus memeriksa endpoint menggunakan HTTP, HTTPS, DNS, TCP, ICMP, dan gRPC.

Men-deploy Bank of Anthos

Men-deploy aplikasi contoh Bank of Anthos:

kubectl apply -f extras/jwt/jwt-secret.yaml
kubectl apply -f kubernetes-manifests

Notifikasi Slack

Untuk menyiapkan notifikasi Slack, Anda harus membuat aplikasi Slack, mengaktifkan Webhook Masuk untuk aplikasi, dan menginstal aplikasi ke ruang kerja Slack.

Membuat aplikasi Slack

  1. Bergabung ke ruang kerja Slack, dengan mendaftar menggunakan email Anda atau menggunakan undangan yang dikirim oleh Admin Workspace.

  2. Login ke Slack menggunakan nama ruang kerja dan kredensial akun Slack Anda.

  3. Membuat aplikasi Slack baru

    1. Dalam dialog Create an app(Buat aplikasi), klik From scratch (Mulai dari langkah awal).
    2. Tentukan App Name dan pilih ruang kerja Slack Anda.
    3. Klik Create App.
    4. Di bagian Tambahkan fitur dan fungsi, klik Webhook Masuk.
    5. Klik tombol Aktifkan Webhook Masuk.
    6. Di bagian Webhook URLs for Your Workspace, klik Add New Webhook to Workspace .
    7. Di halaman otorisasi yang terbuka, pilih saluran yang akan menerima notifikasi.
    8. Klik Izinkan.
    9. Webhook untuk aplikasi Slack Anda akan ditampilkan di bagian URL Webhook untuk Ruang Kerja Anda. Simpan URL untuk nanti.

Mengonfigurasi Alertmanager

Membuat Secret Kubernetes untuk menyimpan URL webhook:

kubectl create secret generic alertmanager-slack-webhook --from-literal webhookURL=SLACK_WEBHOOK_URL
kubectl apply -f extras/prometheus/oss/alertmanagerconfig.yaml

Ganti SLACK_WEBHOOK_URL dengan URL webhook dari bagian sebelumnya.

Mengonfigurasi Prometheus

  1. Tinjau manifes berikut:

    # Copyright 2023 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: frontend-probe
    spec:
      jobName: frontend
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - frontend:80
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: userservice-probe
    spec:
      jobName: userservice
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - userservice:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: balancereader-probe
    spec:
      jobName: balancereader
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - balancereader:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: contacts-probe
    spec:
      jobName: contacts
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - contacts:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: ledgerwriter-probe
    spec:
      jobName: ledgerwriter
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - ledgerwriter:8080/ready
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Probe
    metadata:
      name: transactionhistory-probe
    spec:
      jobName: transactionhistory
      prober:
        url: tutorial-kube-prometheus-blackbox-exporter:19115
        path: /probe
      module: http_2xx
      interval: 60s
      scrapeTimeout: 30s
      targets:
        staticConfig:
          labels:
            app: bank-of-anthos
          static:
            - transactionhistory:8080/ready
    

    Manifes ini menjelaskan pemeriksaan keaktifan Prometheus dan mencakup kolom berikut:

    • spec.jobName: Nama tugas yang ditetapkan untuk metrik yang di-scrap.
    • spec.prober.url: URL Layanan dari pengekspor blackbox. Hal ini mencakup port default untuk pengekspor blackbox, yang ditentukan dalam chart Helm.
    • spec.prober.path: jalur pengumpulan metrik.
    • spec.targets.staticConfig.labels: label yang ditetapkan ke semua metrik yang di-scrap dari target.
    • spec.targets.staticConfig.static: daftar host yang akan diperiksa.
  2. Terapkan manifes ke cluster Anda:

    kubectl apply -f extras/prometheus/oss/probes.yaml
    
  3. Tinjau manifes berikut:

    # Copyright 2023 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      name: uptime-rule
    spec:
      groups:
      - name: Micro services uptime
        interval: 60s
        rules:
        - alert: BalancereaderUnavaiable
          expr: probe_success{app="bank-of-anthos",job="balancereader"} == 0
          for: 1m
          annotations:
            summary: Balance Reader Service is unavailable
            description: Check Balance Reader pods and it's logs
          labels:
            severity: 'critical'
        - alert: ContactsUnavaiable
          expr: probe_success{app="bank-of-anthos",job="contacts"} == 0
          for: 1m
          annotations:
            summary: Contacs Service is unavailable
            description: Check Contacs pods and it's logs
          labels:
            severity: 'warning'
        - alert: FrontendUnavaiable
          expr: probe_success{app="bank-of-anthos",job="frontend"} == 0
          for: 1m
          annotations:
            summary: Frontend Service is unavailable
            description: Check Frontend pods and it's logs
          labels:
            severity: 'critical'
        - alert: LedgerwriterUnavaiable
          expr: probe_success{app="bank-of-anthos",job="ledgerwriter"} == 0
          for: 1m
          annotations:
            summary: Ledger Writer Service is unavailable
            description: Check Ledger Writer pods and it's logs
          labels:
            severity: 'critical'
        - alert: TransactionhistoryUnavaiable
          expr: probe_success{app="bank-of-anthos",job="transactionhistory"} == 0
          for: 1m
          annotations:
            summary: Transaction History Service is unavailable
            description: Check Transaction History pods and it's logs
          labels:
            severity: 'critical'
        - alert: UserserviceUnavaiable
          expr: probe_success{app="bank-of-anthos",job="userservice"} == 0
          for: 1m
          annotations:
            summary: User Service is unavailable
            description: Check User Service pods and it's logs
          labels:
            severity: 'critical'
    

    Manifes ini menjelaskan PrometheusRule dan mencakup kolom berikut:

    • spec.groups.[*].name: nama grup aturan.
    • spec.groups.[*].interval: seberapa sering aturan dalam grup dievaluasi.
    • spec.groups.[*].rules[*].alert: nama pemberitahuan.
    • spec.groups.[*].rules[*].expr: ekspresi PromQL yang akan dievaluasi.
    • spec.groups.[*].rules[*].for: jumlah waktu yang harus ditampilkan melalui pemberitahuan sebelum dianggap diaktifkan.
    • spec.groups.[*].rules[*].annotations: daftar anotasi yang akan ditambahkan ke setiap pemberitahuan. Ini hanya valid untuk aturan pemberitahuan.
    • spec.groups.[*].rules[*].labels: label yang akan ditambahkan atau ditimpa.
  4. Terapkan manifes ke cluster Anda:

    kubectl apply -f extras/prometheus/oss/rules.yaml
    

Menyimulasikan pemadaman layanan

  1. Simulasikan pemadaman layanan dengan menskalakan Deployment contacts ke nol:

    kubectl scale deployment contacts --replicas 0
    

    Anda akan melihat pesan pemberitahuan di saluran ruang kerja Slack. GKE mungkin memerlukan waktu hingga 5 menit untuk menskalakan Deployment.

  2. Memulihkan Deployment contacts:

    kubectl scale deployment contacts --replicas 1
    

    Anda akan melihat pesan pemberitahuan resolusi pemberitahuan di saluran ruang kerja Slack. GKE mungkin membutuhkan waktu hingga 5 menit untuk menskalakan Deployment.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

    Menghapus project Google Cloud:

    gcloud projects delete PROJECT_ID

Menghapus setiap resource

  1. Menghapus resource Kubernetes:

    kubectl delete -f kubernetes-manifests
    
  2. Menguninstal Prometheus:

    helm uninstall tutorial
    
  3. Menghapus cluster GKE:

    gcloud container clusters delete CLUSTER_NAME --quiet
    

Langkah berikutnya