kubernetes monitoring dan alerting dengan prometheus grafana (part 2)

0
540

halo sobat sekolahlinux, pada artikel part 2 kali ini saya akan memfokuskan tentang bagaimana cara membuat custom template untuk alertmanager, jika kalian melihat pada tutorial part 1 sebelumnya maka alert yang dikirim ke slack titlenya akan berantakan seperti dibawah ini

tentu tidak enak bukan melihat titlenya yang berantakan seperti diatas, maka dari itu kita akan membuat custom template sehingga title alertnya akan menjadi lebih mudah dibaca dan di pahami.

pertama buka values prometheus.yaml yang pada tutorial sebelumnya kita generated dari hasil helm inspect, lalu pada bagian alertmanager ConfigMap entries modifikasi menjadi seperti dibawah ini, disini receiversnya atau media untuk notifikasinya menggunakan slack

## alertmanager ConfigMap entries
##
alertmanagerFiles:
  alert.tmpl: |-
    {{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] - {{ .CommonAnnotations.alertname }}{{ end }}
    {{ define "slack.default.title" }}{{ template "__subject" . }}{{ end }}

  alertmanager.yml:
    global: {}
      #  slack_api_url: ''

    receivers:
      - name: kube-receiver
        slack_configs:
        - channel: '#percobaan-akbar'
          api_url: 'https://hooks.slack.com/services/xxxxx4394/xxxxx0QSXRP/xxxxxcBtfnbDVPstC0aais4J'
          icon_url: https://avatars3.githubusercontent.com/u/3380462
          send_resolved: true
          title: '{{ template "slack.default.title" . }}'
          text: |-
            {{ range .Alerts }}
              {{- "############################" -}}{{- "\n" -}}
              Level: `{{ .Labels.severity }}`{{- "\n" -}}
              Pod: {{ .Labels.pod }}{{- "\n" -}}
              Namespace: {{ .Labels.namespace }}{{- "\n" -}}
            {{ end }}

      - name: instance-receiver
        slack_configs:
        - channel: '#percobaan-akbar'
          api_url: 'https://hooks.slack.com/services/xxxxx4394/xxxxx0QSXRP/xxxxxcBtfnbDVPstC0aais4J'
          icon_url: https://avatars3.githubusercontent.com/u/3380462
          send_resolved: true
          title: '{{ template "slack.default.title" . }}'
          text: |-
            {{ range .Alerts }}
              {{- "############################" -}}{{- "\n" -}}
              Instance Name: `{{ .Labels.job }}`{{- "\n" -}}
              MountPath: `{{ .Labels.mountpoint }}`{{- "\n" -}}
            {{ end }}

    route:
      group_wait: 10s
      group_interval: 10s
      receiver: kube-receiver
      repeat_interval: 10s
      routes:
        - match:
            alertname: LowDiskSpaceRootVM
          repeat_interval: 10s
          receiver: instance-receiver

    templates:
    - '/etc/config/alert.tmpl'

untuk detailnya paramater apa saja yang bisa kamu tambahkan serta penjelasan untuk setiap paramater yang digunakan  di alertmanager ConfigMap entries kamu bisa lihat di link berikut

lalu pada bagian Prometheus server ConfigMap entries khususnya di alerting_rules.yml, modifikasi menjadi seperti dibawah, disini saya menambahkan alert untuk mendeteksi pod mana yang gagal statusnya menjadi ready, baik itu error ataupun CrashloopBackOff dan juga status lainnya kecuali status pods ready, maka akan ada alert ke channel slack yang sudah kita set

## Prometheus server ConfigMap entries
##
serverFiles:

  ## Alerts configuration
  ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
  alerting_rules.yml:
      groups:
      - name: PodsNotReady
        rules:
          - alert: PodNotReady
            annotations:
              message: "Pod `{{ $labels.pod }}` on Namespace `{{ $labels.namespace }}` Not Ready"
              alertname: "PodNotReady on Kubernetes"
            expr: kube_pod_container_status_ready{namespace=~".*",pod=~".*"} == 0
            for: 1m
            labels:
              severity: critical
              publish: page
              componentType: app
              appType: pod-k8s

      - name: LowDiskSpaceRootVM
        rules:
          - alert: LowDiskSpaceRootVM
            annotations:
              message: "Low Disk Space root on VM {{ $labels.instance }}"
              alertname: "Instance Root Disk Usage More Than 75%"
            expr: ((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"}*100) > 75
            for: 1m
            labels:
              severity: critical
              publish: page
              componentType: instance
              appType: instance

pada rule diatas di paramater expr khususnya di alertname LowDiskSpaceRootVM saya memasukan query untuk mencari root disk yang usagenya sudah melebihi 75%, untuk live querynya kalian bisa ke web ui prometheus seperti gambar dibawah

lalu pada bagian prometheus.yml tepatnya di scrape_configs saya menambahkan baris seperti dibawah untuk mengambil metric dari instance yang sudah saya install node exporter, untuk tutorial install node exporter kamu bisa cari di google dengan keyword install node exporter ubuntu

  prometheus.yml:
    rule_files:
      - /etc/config/recording_rules.yml
      - /etc/config/alerting_rules.yml
    ## Below two files are DEPRECATED will be removed from this default values file
      - /etc/config/rules
      - /etc/config/alerts

    scrape_configs:
      - job_name: prometheus
        static_configs:
          - targets:
            - localhost:9090

      - job_name: 'ubuntu1'
        scrape_interval: 5s
        static_configs:
          - targets: ['192.168.99.10:9100']

      - job_name: 'ubuntu2'
        scrape_interval: 5s
        static_configs:
          - targets: ['192.168.99.20:9100']

untuk detailnya paramater apa saja yang bisa kamu tambahkan serta penjelasan untuk setiap paramater yang digunakan di Prometheus server ConfigMap entries entries kamu bisa lihat di link berikut

selanjutnya kita coba apply perubahan file values-prometheus.yaml nya dengan command seperti dibawah

helm upgrade -f values-prometheus.yaml prometheus stable/prometheus

lalu tunggu beberapa saat, maka tampilan warning yang masuk akan menjadi seperti dibawah ini

selanjutnya kita akan membahas apa kekurangan dan kelebihan dibanding  default alert rule sebelumnya

kelebihan:

  • title alert lebih rapih dan lebih mudah dipahami
  • text alert lebih tertata dan juga mudah di pahami

kekurangan:

  • title alert tidak dynamic atau bersifat static
  • agar mendapat balikan [RESOLVED] seluruh problem harus di solve dahulu, jadi misal ada 2 pods yang down, maka ke 2 pods tersebut harus up dahulu baru alert dengan status [RESOLVED] akan muncul
  • text alert yang muncul saat mendapat balikan [RESOLVED] terkadang masih membawa nama pods values dari variable yg sebelumnya sudah solve

nah sekian tutorial kali ini, untuk grafana akan di bahas pada part selanjutnya terimakasih