Jalur Pembelajaran: Aplikasi yang skalabel - Pantau dengan Prometheus


Kumpulan tutorial ini ditujukan untuk admin IT dan Operator yang ingin untuk men-deploy, menjalankan, dan mengelola lingkungan aplikasi modern yang berjalan Google Kubernetes Engine (GKE). Saat Anda terus mempelajari rangkaian tutorial ini, Anda pelajari cara mengonfigurasi pemantauan dan pemberitahuan, menskalakan workload, dan menyimulasikan gagal, semuanya menggunakan aplikasi microservice contoh Cymbal Bank:

  1. Membuat cluster dan men-deploy aplikasi contoh
  2. Memantau dengan Google Cloud Managed Service for Prometheus (tutorial ini)
  3. Menskalakan workload
  4. Menyimulasikan kegagalan

Ringkasan dan tujuan

Aplikasi contoh Cymbal Bank yang digunakan dalam rangkaian tutorial ini terdiri dari jumlah microservice yang semuanya dijalankan di cluster GKE. Permasalahan menggunakan salah satu layanan tersebut dapat menghasilkan pengalaman buruk bagi nasabah, seperti tidak dapat mengakses aplikasi bank. Mempelajari tentang masalah dengan layanan sesegera mungkin berarti Anda dapat dengan cepat mulai memecahkan dan menyelesaikan masalah.

Dalam tutorial ini, Anda akan mempelajari cara memantau workload di GKE menggunakan Google Cloud Managed Service for Prometheus dan Cloud Monitoring. Anda akan mempelajari cara untuk menyelesaikan tugas berikut:

  • Buat webhook Slack untuk Alertmanager.

  • Mengonfigurasi Prometheus untuk memantau status sampel berbasis microservice aplikasi.

  • Simulasikan pemadaman dan tinjau pemberitahuan yang dikirim menggunakan webhook Slack.

Biaya

Mengaktifkan GKE dan men-deploy contoh Cymbal Bank untuk rangkaian tutorial ini berarti Anda mengeluarkan biaya per-cluster biaya untuk GKE di Google Cloud seperti yang tercantum di Halaman harga hingga Anda menonaktifkan GKE atau menghapus project.

Anda juga bertanggung jawab atas biaya Google Cloud lainnya yang timbul saat menjalankan Contoh aplikasi Cymbal Bank, seperti biaya untuk VM Compute Engine dan dan konfigurasi di Cloud Monitoring.

Sebelum memulai

Untuk mempelajari cara memantau workload, Anda harus menyelesaikan tutorial pertama untuk membuat cluster GKE yang menggunakan Autopilot dan men-deploy contoh aplikasi berbasis microservice contoh Cymbal Bank.

Sebaiknya Anda menyelesaikan rangkaian tutorial ini untuk aplikasi yang skalabel secara berurutan. Saat Anda terus mempelajari serangkaian tutorial, Anda mempelajari keterampilan baru dan menggunakan produk dan layanan Google Cloud tambahan.

Untuk menunjukkan contoh bagaimana cluster GKE Autopilot dapat menggunakan Google Cloud Managed Service for Prometheus untuk membuat pesan ke platform ini, tutorial ini menggunakan Slack. Dalam deployment produksi Anda sendiri, Anda dapat menggunakan alat komunikasi pilihan organisasi Anda untuk memproses dan menyampaikan saat cluster GKE mengalami masalah.

  • Bergabung ke ruang kerja Slack, baik dengan mendaftar melalui email Anda atau dengan menggunakan undangan yang dikirim oleh Admin Google Workspace.

Membuat aplikasi Slack

Bagian penting dari pengaturan pemantauan adalah memastikan bahwa Anda diberi tahu saat peristiwa yang dapat ditindaklanjuti seperti pemadaman layanan. Pola yang umum adalah mengirim notifikasi ke alat komunikasi seperti Slack, yang Anda gunakan dalam tutorial ini. Slack menyediakan fitur webhook yang memungkinkan aplikasi, seperti deployment produksi, menghasilkan pesan. Anda dapat menggunakan alat komunikasi lain di organisasi Anda untuk memproses dan mengirimkan pesan saat cluster GKE mengalami masalah.

Cluster GKE yang menggunakan Autopilot menyertakan instance Google Cloud Managed Service for Prometheus. {i>Instance <i}ini dapat menghasilkan pemberitahuan saat sesuatu pada aplikasi Anda. Pemberitahuan ini kemudian dapat menggunakan paket webhook untuk mengirim pesan ke ruang kerja Slack agar Anda menerima prompt notifikasi saat terjadi masalah.

Untuk menyiapkan notifikasi Slack berdasarkan pemberitahuan yang dibuat oleh Prometheus, Anda harus membuat aplikasi Slack, mengaktifkan Webhook Masuk untuk aplikasi, dan menginstal aplikasi ke ruang kerja Slack.

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

  2. 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 URL webhook untuk Ruang Kerja Anda, klik Tambahkan yang Baru Webhook ke Workspace.
    7. Pada halaman otorisasi yang terbuka, pilih saluran yang akan diterima notifikasi.
    8. Klik Izinkan.
    9. Webhook untuk aplikasi Slack ditampilkan di URL Webhook untuk Ruang Kerja Anda. Simpan URL untuk nanti.

Mengonfigurasi Alertmanager

Di Prometheus, Alertmanager memproses peristiwa pemantauan yang buat. Pengelola pemberitahuan dapat melewati peristiwa duplikat, peristiwa terkait grup, dan mengirim notifikasi, seperti menggunakan webhook Slack. Bagian ini menunjukkan cara mengonfigurasi Alertmanager untuk menggunakan webhook Slack baru Anda. Menentukan cara yang Anda inginkan Pengelola peringatan untuk memproses peristiwa yang akan dikirim dibahas di bagian berikutnya dalam tutorial, Mengonfigurasi Prometheus.

Untuk mengonfigurasi Alertmanager agar dapat menggunakan webhook Slack Anda, selesaikan langkah berikut langkah:

  1. Ubah direktori ke repositori Git yang menyertakan semua contoh manifes untuk Cymbal Bank dari tutorial sebelumnya:

    cd ~/bank-of-anthos/
    

    Jika perlu, ubah lokasi direktori ke tempat Anda sebelumnya meng-clone repositori resource.

  2. Perbarui manifes YAML sampel Alertmanager dengan URL webhook dari Aplikasi Slack:

    sed -i "s@SLACK_WEBHOOK_URL@SLACK_WEBHOOK_URL@g" "extras/prometheus/gmp/alertmanager.yaml"
    

    Ganti SLACK_WEBHOOK_URL dengan URL webhook dari bagian sebelumnya.

  3. Untuk menggunakan URL webhook Slack unik Anda secara dinamis tanpa mengubah kode aplikasi, Anda dapat menggunakan Secret Kubernetes. Kode aplikasi membaca nilai Secret ini. Dalam aplikasi yang lebih kompleks, kemampuan ini memungkinkan Anda mengubah, atau merotasi, nilai untuk alasan keamanan atau kepatuhan.

    Membuat rahasia Kubernetes untuk Alertmanager menggunakan contoh manifes YAML yang berisi URL webhook Slack:

    kubectl create secret generic alertmanager \
      -n gmp-public \
      --from-file=extras/prometheus/gmp/alertmanager.yaml
    
  4. Prometheus dapat menggunakan pengekspor untuk mendapatkan metrik dari aplikasi tanpa kode perubahan. Pengekspor {i>blackbox<i} Prometheus memungkinkan Anda menyelidiki titik akhir seperti HTTP atau HTTPS. Pengekspor ini berfungsi dengan baik jika Anda tidak ingin, atau tidak dapat, mengekspos cara kerja internal aplikasi Anda ke Prometheus. Prometheus pengekspor {i>blackbox<i} dapat bekerja tanpa mengubah kode aplikasi Anda untuk memaparkan metrik ke Prometheus.

    Deploy pengekspor blackbox Prometheus ke cluster Anda:

    kubectl apply -f extras/prometheus/gmp/blackbox-exporter.yaml
    

Mengonfigurasi Prometheus

Setelah mengonfigurasi Alertmanager untuk menggunakan webhook Slack, Anda harus memberi tahu Prometheus apa yang harus dipantau di Cymbal Bank, dan jenis peristiwa yang ingin Pengelola pemberitahuan untuk memberi tahu Anda tentang penggunaan webhook Slack.

Dalam aplikasi contoh Cymbal Bank yang Anda gunakan dalam tutorial ini, ada berbagai microservice yang berjalan di cluster GKE. Satu masalah Anda mungkin ingin segera mengetahuinya adalah jika salah satu dari Layanan bank berhenti merespons permintaan secara normal, yang kemungkinan berarti pelanggan Anda tidak dapat mengakses aplikasi. Anda dapat mengkonfigurasi Prometheus untuk menanggapi acara berdasarkan kebijakan organisasi.

Pengintai

Anda dapat mengonfigurasi pemeriksaan Prometheus untuk sumber daya yang ingin Anda pantau. Satelit ini bisa menghasilkan peringatan berdasarkan respons yang diterima satelit. Pada aplikasi contoh Cymbal Bank, Anda bisa menggunakan pemeriksaan HTTP Kode respons tingkat 200 dari Layanan. Respons tingkat HTTP 200 menunjukkan bahwa Layanan berjalan dengan benar dan dapat merespons permintaan. Jika ada dan penyelidikan tidak menerima respons yang diharapkan, Anda dapat Aturan Prometheus yang menghasilkan pemberitahuan bagi Alertmanager untuk diproses dan dijalankan tindakan tambahan.

  1. Buat beberapa penyelidikan Prometheus untuk memantau status HTTP berbagai microservice aplikasi contoh Cymbal Bank. Tinjau hal berikut contoh manifes:

    # 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.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: frontend-probe
      labels:
        app.kubernetes.io/name: frontend-probe
    spec:
      selector:
        matchLabels:
          app: blackbox-exporter
      endpoints:
      - port: metrics
        path: /probe
        params:
          target: [frontend:80]
          module: [http_2xx]
        timeout: 30s
        interval: 60s
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: userservice-probe
      labels:
        app.kubernetes.io/name: userservice-probe
    spec:
      selector:
        matchLabels:
          app: blackbox-exporter
      endpoints:
      - port: metrics
        path: /probe
        params:
          target: [userservice:8080/ready]
          module: [http_2xx]
        timeout: 30s
        interval: 60s
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: balancereader-probe
      labels:
        app.kubernetes.io/name: balancereader-probe
    spec:
      selector:
        matchLabels:
          app: blackbox-exporter
      endpoints:
      - port: metrics
        path: /probe
        params:
          target: [balancereader:8080/ready]
          module: [http_2xx]
        timeout: 30s
        interval: 60s
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: contacts-probe
      labels:
        app.kubernetes.io/name: contacts-probe
    spec:
      selector:
        matchLabels:
          app: blackbox-exporter
      endpoints:
      - port: metrics
        path: /probe
        params:
          target: [contacts:8080/ready]
          module: [http_2xx]
        timeout: 30s
        interval: 60s
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: ledgerwriter-probe
      labels:
        app.kubernetes.io/name: ledgerwriter-probe
    spec:
      selector:
        matchLabels:
          app: blackbox-exporter
      endpoints:
      - port: metrics
        path: /probe
        params:
          target: [ledgerwriter:8080/ready]
          module: [http_2xx]
        timeout: 30s
        interval: 60s
    ---
    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: transactionhistory-probe
      labels:
        app.kubernetes.io/name: transactionhistory-probe
    spec:
      selector:
        matchLabels:
          app: blackbox-exporter
      endpoints:
      - port: metrics
        path: /probe
        params:
          target: [transactionhistory:8080/ready]
          module: [http_2xx]
        timeout: 30s
        interval: 60s
    

    Seperti yang ditunjukkan dalam file manifes ini, praktik terbaiknya adalah setiap PodMonitoring Pemeriksaan keaktifan Prometheus memantau setiap Deployment secara terpisah.

  2. Untuk membuat pemeriksaan keaktifan Prometheus, terapkan manifes ke :

    kubectl apply -f extras/prometheus/gmp/probes.yaml
    

Aturan

Prometheus perlu tahu apa yang ingin Anda lakukan berdasarkan respons yang pemeriksaan yang Anda buat pada langkah sebelumnya akan diterima. Anda mendefinisikan respons ini menggunakan Aturan Prometheus.

Dalam tutorial ini, Anda membuat aturan Prometheus untuk menghasilkan pemberitahuan tergantung pada respons terhadap pemeriksaan keaktifan. Alertmanager kemudian memproses {i>output<i} dari aturan ini untuk menghasilkan notifikasi menggunakan webhook Slack.

  1. Buat aturan yang menghasilkan peristiwa berdasarkan respons terhadap keaktifan probe. Tinjau contoh 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.googleapis.com/v1
    kind: Rules
    metadata:
      name: uptime-rule
    spec:
      groups:
      - name: Micro services uptime
        interval: 60s
        rules:
        - alert: BalancereaderUnavailable
          expr: probe_success{job="balancereader-probe"} == 0
          for: 1m
          annotations:
            summary: Balance Reader Service is unavailable
            description: Check Balance Reader pods and its logs
          labels:
            severity: 'critical'
        - alert: ContactsUnavailable
          expr: probe_success{job="contacts-probe"} == 0
          for: 1m
          annotations:
            summary: Contacts Service is unavailable
            description: Check Contacts pods and its logs
          labels:
            severity: 'warning'
        - alert: FrontendUnavailable
          expr: probe_success{job="frontend-probe"} == 0
          for: 1m
          annotations:
            summary: Frontend Service is unavailable
            description: Check Frontend pods and its logs
          labels:
            severity: 'critical'
        - alert: LedgerwriterUnavailable
          expr: probe_success{job="ledgerwriter-probe"} == 0
          for: 1m
          annotations:
            summary: Ledger Writer Service is unavailable
            description: Check Ledger Writer pods and its logs
          labels:
            severity: 'critical'
        - alert: TransactionhistoryUnavailable
          expr: probe_success{job="transactionhistory-probe"} == 0
          for: 1m
          annotations:
            summary: Transaction History Service is unavailable
            description: Check Transaction History pods and its logs
          labels:
            severity: 'critical'
        - alert: UserserviceUnavailable
          expr: probe_success{job="userservice-probe"} == 0
          for: 1m
          annotations:
            summary: User Service is unavailable
            description: Check User Service pods and its 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.
  2. Untuk membuat aturan, terapkan manifes ke cluster Anda:

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

Menyimulasikan pemadaman layanan

Untuk memastikan bahwa pemeriksaan Prometheus, aturan, dan konfigurasi Alertmanager sudah benar, Anda harus menguji apakah pemberitahuan dan notifikasi dikirim ketika ada atau masalah. Jika Anda tidak menguji alur ini, Anda mungkin tidak menyadari adanya pemadaman layanan layanan produksi ketika terjadi kesalahan.

  1. Untuk menyimulasikan pemadaman salah satu microservice, skalakan contacts Deployment ke nol. Tanpa instance Layanan, Cymbal Bank aplikasi contoh tidak dapat membaca informasi kontak untuk pelanggan:

    kubectl scale deployment contacts --replicas 0
    

    GKE mungkin memerlukan waktu hingga 5 menit untuk memperkecil skala Deployment.

  2. Periksa status Deployment pada cluster Anda dan pastikan bahwa contacts Deployment menurunkan skala dengan benar:

    kubectl get deployments
    

    Dalam contoh output berikut, Deployment contacts berhasil diperkecil menjadi 0 instance:

    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    balancereader        1/1     1            1           17m
    blackbox-exporter    1/1     1            1           5m7s
    contacts             0/0     0            0           17m
    frontend             1/1     1            1           17m
    ledgerwriter         1/1     1            1           17m
    loadgenerator        1/1     1            1           17m
    transactionhistory   1/1     1            1           17m
    userservice          1/1     1            1           17m
    
  3. Setelah Deployment contacts diperkecil hingga nol, Prometheus probe melaporkan kode error HTTP. Kesalahan HTTP ini menghasilkan peringatan untuk pengelola pemberitahuan untuk memprosesnya.

    Periksa saluran Workspace Slack Anda untuk melihat pesan notifikasi pemadaman layanan teks yang mirip dengan contoh berikut:

    [FIRING:1] ContactsUnavailable
    Severity: Warning :warning:
    Summary: Contacts Service is unavailable
    Namespace: default
    Check Contacts pods and it's logs
    
  4. Dalam skenario pemadaman layanan yang sebenarnya, setelah menerima notifikasi di Slack, Anda akan mulai memecahkan masalah dan memulihkan layanan. Untuk tutorial ini, simulasikan proses ini dan pulihkan Deployment contacts dengan memperkecil skala meningkatkan jumlah replika:

    kubectl scale deployment contacts --replicas 1
    

    Diperlukan waktu hingga 5 menit untuk menskalakan Deployment dan untuk Prometheus untuk menerima respons HTTP 200. Anda memeriksa status Deployment menggunakan perintah kubectl get deployments.

    Ketika menerima respons yang responsif terhadap penyelidikan Prometheus, Alertmanager menghapus peristiwa. Anda akan melihat pesan notifikasi resolusi peringatan di saluran Workspace Slack Anda mirip dengan contoh berikut:

    [RESOLVED] ContactsUnavailable
    Severity: Warning :warning:
    Summary: Contacts Service is unavailable
    Namespace: default
    Check Contacts pods and it's logs
    

Pembersihan

Sebaiknya Anda menyelesaikan rangkaian tutorial ini secara berurutan untuk Cymbal Bank. Saat Anda terus mempelajari serangkaian tutorial, Anda mempelajari keterampilan baru dan menggunakan produk dan layanan Google Cloud tambahan.

Jika Anda ingin istirahat sebelum melanjutkan ke tutorial berikutnya dan menghindari menimbulkan biaya ke akun Google Cloud Anda untuk resource yang digunakan dalam menghapus project yang Anda buat.

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya

Pelajari cara menskalakan deployment Anda di GKE di tutorial berikutnya.