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