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 Managed Service for Prometheus, solusi lintas project multi-cloud yang terkelola sepenuhnya dariGoogle 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.

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 CONTROL_PLANE_LOCATION
    

    Ganti kode berikut:

    • PROJECT_ID: Google Cloud project ID Anda.
    • CONTROL_PLANE_LOCATION: region Compute Engine dari bidang kontrol cluster Anda. 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 \
        --location=CONTROL_PLANE_LOCATION
    

    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. Buat 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.