Saat aturan peringatan dalam kebijakan notifikasi dipicu, ARMS mengirimkan pemberitahuan melalui berbagai saluran, seperti DingTalk, Lark, WeCom, SMS, telepon, email, dan webhook. ARMS menyediakan templat notifikasi bawaan untuk setiap metode notifikasi. Jika templat bawaan tersebut tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikannya. Topik ini menjelaskan sintaks Go template untuk penyesuaian, menguraikan templat bawaan, serta mencantumkan variabel templat yang tersedia.
Sintaks Go template
Templat pemberitahuan peringatan ARMS menggunakan sintaks Go template untuk mengisi templat dengan data dari konteks yang diberikan.
Parameter peringatan dalam templat notifikasi terdiri dari beberapa label. Label memungkinkan Anda menyertakan parameter peringatan spesifik dalam notifikasi. Sebagai contoh, label alertname pada contoh ini menunjukkan nama peringatan.
Topik ini menggunakan kode contoh berikut untuk menjelaskan sintaks Go template umum.
{
"alerts": [
{
"annotations": {
"message": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics memory usage has exceeded 80%, current value 15.52%",
"value": "15.521240234375"
},
"endsAt": "2023-02-22T07:27:15.404000000Z",
"fingerprint": "bec72890cc2c7b4a027e008df0cd1013",
"labels": {
"container": "kube-state-metrics",
"severity": "warning",
"instance": "10.0.80.186:10255",
"clustername": "klyz1688-kubernetes-1",
"alertname": "Container memory usage exceeds 80%",
"_aliyun_arms_involvedObject_name": "klyz1688-kubernetes-1",
"pod_name": "kube-state-metrics-ccb59dbff-jljg4",
"_aliyun_arms_involvedObject_kind": "cluster",
"name": "k8s_kube-state-metrics_kube-state-metrics-ccb59dbff-jljg4_arms-prom_359508f3-7e76-4740-b915-41ea48849641_0",
"namespace": "arms-prom"
},
"startsAt": "2023-02-22T07:18:15.578000000Z",
"status": "firing"
}
],
"commonAnnotations": {
"message": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics memory usage has exceeded 80%, current value 15.52%",
"value": "15.521240234375"
},
"commonLabels": {
"container": "kube-state-metrics",
"severity": "warning",
"instance": "10.0.80.186:10255",
"clustername": "klyz1688-kubernetes-1",
"alertname": "Container memory usage exceeds 80%",
"_aliyun_arms_involvedObject_name": "klyz1688-kubernetes-1",
"pod_name": "kube-state-metrics-ccb59dbff-jljg4",
"_aliyun_arms_involvedObject_kind": "cluster",
"name": "k8s_kube-state-metrics_kube-state-metrics-ccb59dbff-jljg4_arms-prom_359508f3-7e76-4740-b915-41ea48849641_0",
"namespace": "arms-prom"
},
"groupLabels": {
"alertname": "Container memory usage exceeds 80%"
},
"status": "firing",
"startTime":"2023-02-22 07:18:15",
"endTime":"Alert resolution time",
"level":"error",
"dispatchRuleName":"notification policy name",
"alarmId":"123456"
},
Karakter .
Mewakili objek saat ini dalam cakupan, memungkinkan Anda mengakses datanya.
Contoh 1: Dapatkan seluruh konten dari cakupan tingkat atas, yaitu seluruh data konteks dari kode contoh.
{{ . }}
Mengembalikan seluruh konten dari kode contoh.
Contoh 2: Dapatkan bidang level dari data konteks.
{{ .level }}
Mengembalikan:
error
Contoh 3: Dapatkan bidang commonLabels.alertname dari data konteks.
{{ .commonLabels.alertname }}
Mengembalikan:
Container memory usage exceeds 80%
Variabel
Anda dapat menyimpan data yang diteruskan ke templat dalam variabel yang dapat diakses di seluruh templat. Misalnya, dalam {{$context := .}}, variabel $context menyimpan data masuk, yang dapat Anda akses menggunakan {{$context}}.
Contoh 1: Tetapkan nama peringatan ke $alertname, lalu keluarkan $alertname.
{{ $alertname := .commonLabels.alertname }} {{$alertname}}
Mengembalikan:
Container memory usage exceeds 80%
Contoh 2: Tetapkan peringatan pertama dari daftar alerts ke $alert0 dan keluarkan alertname-nya.
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}
Mengembalikan:
Container memory usage exceeds 80%
Aksi if/else
Aksi if menyediakan logika kondisional. Jika kondisinya salah, blok opsional else akan dieksekusi. Nilai seperti 0, nil, atau string kosong dievaluasi sebagai false.
Contoh 1: Jika nilai label severity dalam event peringatan adalah warning, keluarkan P3 alert.
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}
Mengembalikan:
P3 alert
Contoh 2: Jika nilai label severity dalam event peringatan adalah critical, keluarkan P1 alert. Jika tidak, keluarkan P2 alert.
{{if eq "critical" .commonLabels.severity }} P1 alert {{ else }} P2 alert {{ end }}
Mengembalikan:
P2 alert
Aksi for
Aksi for mengeksekusi blok kode secara berulang.
Contoh 1: Iterasi melalui daftar alerts untuk mendapatkan alertname dari setiap peringatan.
{{ for .alerts}} {{.labels.alertname}} \n {{end}}
Mengembalikan:
Container memory usage exceeds 80%
Aksi range
Aksi range melakukan iterasi pada struktur data, seperti slice atau map.
Contoh 1: Lakukan iterasi pada daftar untuk mendapatkan indeks dan nilai setiap elemen.
{{ range $index, $alert := .alerts }}Index {{ $index }}: {{ $alert.labels.alertname }}\n{{ end }}
Mengembalikan:
Index 0: Container memory usage exceeds 80%
Fungsi index
Fungsi index mengakses elemen array, slice, atau map.
Contoh 1: Dapatkan elemen pertama dari daftar alerts dan tetapkan ke $alert0.
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}
Mengembalikan:
Container memory usage exceeds 80%
Fungsi perbandingan
Fungsi perbandingan berikut umum digunakan:
-
eq: Sama dengan -
ne: Tidak sama dengan -
lt: Kurang dari -
le: Kurang dari atau sama dengan -
gt: Lebih dari -
ge: Lebih dari atau sama dengan
Contoh: Jika nilai label severity dalam commonLabels sama dengan warning, keluarkan P3 alert.
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}
Mengembalikan:
P3 alert
Fungsi logika: and, or, not
Contoh: Jika nilai label severity dalam commonLabels sama dengan warning atau warnning, keluarkan P3 alert.
{{if or (eq "warning" .commonLabels.severity) (eq "warnning" .commonLabels.severity) }} P3 alert {{ end }}
Mengembalikan:
P3 alert
Fungsi bawaan umum
printf: Memformat string sesuai dengan penentu format yang ditentukan.
Contoh: Keluarkan value dari peringatan pertama dalam daftar alerts, diformat menjadi dua tempat desimal.
{{ $alert0 := index .alerts 0 }} {{ printf "%.2f" $alert0.annotations.value }}
Mengembalikan:
15.52
humanizePercentage: Memformat nilai sebagai persentase.
Contoh: Ubah string "0.95332123123124" menjadi persentase yang lebih mudah dibaca.
{{ "0.95332123123124" | humanizePercentage }}
Mengembalikan:
95.33%
humanizeDate: Memformat timestamp milidetik menjadi tanggal. Format tanggalnya adalah yyyy-MM-dd HH:mm:ss.
Contoh: Ubah timestamp 1671074058234 menjadi tanggal.
{{ "1671074058234" | humanizeDate }}
Mengembalikan:
2022-12-15 11:14:18
len: Mengembalikan panjang array, slice, string, atau map.
Contoh: Dapatkan panjang daftar alerts.
{{ len .alerts }}
Mengembalikan:
1
Templat notifikasi yang telah dikonfigurasi sebelumnya
Templat notifikasi email
Alert name: {{ .commonLabels.alertname }}
{{if .commonLabels.clustername }}
Cluster name: {{ .commonLabels.clustername }}
{{ end }}
{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }}
Application name: {{ .commonLabels._aliyun_arms_involvedObject_name }}
{{ end }}
Notification policy: {{ .dispatchRuleName }}
Alert time: {{ .startTime }}
Alert content: {{ if .newIncidentIn }} (New event) {{end}} {{ for .alerts }} {{ .annotations.message }} {{if .generatorURL }} <a href="{{.generatorURL}}" >Details URL</a> {{ end }} {{ end }}
|
Konten templat |
Deskripsi |
|
Nama peringatan. Secara default, kebijakan notifikasi mengelompokkan peringatan berdasarkan label |
|
Jika sebuah event berisi label |
|
Jika jenis objek yang terlibat adalah |
|
Nama kebijakan notifikasi yang cocok. |
|
Waktu ketika peringatan pertama kali dipicu. |
|
Lakukan iterasi pada daftar event peringatan untuk merender nilai Catatan
Templat bawaan menggunakan sintaks HTML
Blok |
Contoh output yang dirender:
Alert name: Container memory usage exceeds 80%
Cluster name: klyz1688-kubernetes-1
Notification policy: notification policy name
Alert time: 2023-02-22 07:18:15
Alert content: Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics memory usage has exceeded 80%, current value 15.52%
Templat notifikasi SMS dan telepon
Templat ini mirip dengan templat email tetapi menghilangkan URL detail.
{{ .level }} alert occurred
Alert name: {{ .commonLabels.alertname }}
{{if .commonLabels.clustername }}
Cluster name: {{ .commonLabels.clustername }}
{{ end }}
{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }}
Application name: {{ .commonLabels._aliyun_arms_involvedObject_name }}
{{ end }}
Notification policy: {{ .dispatchRuleName }}
Alert time: {{ .startTime }}
Alert content: {{ if .newIncidentIn }} (New event)
{{end}} {{ for .alerts }} {{ .annotations.message }} {{ end }}
Templat notifikasi chatbot
{{ if .newIncidentIn }} (New event) {{end}}
{{if .commonLabels.clustername }} > Cluster name: {{ .commonLabels.clustername }}
{{ end }}
{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }} > Application name: {{ .commonLabels._aliyun_arms_involvedObject_name }}
{{ end }}
{{ for .alerts }} > {{ .annotations.message }} {{if .generatorURL }} [details URL]({{.generatorURL}}) {{end}}{{if .annotations._aliyun_arms_insights_analyze_link }}[<font color='#ff0000'>root cause</font>]({{ .annotations._aliyun_arms_insights_analyze_link}}){{ end }}{{if eq "1" .labels._aliyun_arms_denoise_code }} (Important:{{.labels._aliyun_arms_important_reason }}) {{end}}
{{end}}
Output dirender dalam Markdown. Dukungan fitur bervariasi tergantung chatbot.
-
Blok kutipan:
> -
Warna font:
<font color='#ff0000'>root cause</font>CatatanHanya DingTalk dan WeCom yang mendukung perubahan warna font. Lark tidak mendukung.
-
Pemutusan baris:
-
DingTalk: Tambahkan dua baris baru dalam templat.
-
Lark: Tambahkan satu baris baru dalam templat.
-
WeCom: Tambahkan satu baris baru dalam templat.
-
Templat webhook
{
"alert_name":"{{ .commonLabels.alertname }}",
{{if .commonLabels.clustername }}"cluster_name":"{{ .commonLabels.clustername }}",{{ end }}
{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }}"application_name":"{{ .commonLabels._aliyun_arms_involvedObject_name }}",{{ end }}
"notification_policy":"{{ .dispatchRuleName }}",
"alert_time":"{{ .startTime }}",
"alert_content":"{{ range $index, $alert := .alerts }}{{if $index}}, {{end}}{{.annotations.message}}{{ end }}"
}
Contoh output yang dirender:
{
"alert_name": "Container memory usage exceeds 80%",
"cluster_name": "klyz1688-kubernetes-1",
"notification_policy": "notification policy name",
"alert_time": "2023-02-22 07:18:15",
"alert_content": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics memory usage has exceeded 80%, current value 15.52%"
}
Referensi variabel
Tabel berikut menjelaskan variabel yang tersedia dalam templat notifikasi.
|
Parameter |
Deskripsi |
|
alarmId |
ID peringatan asli. |
|
alerts |
Daftar event peringatan asli. Jenis: List<Alert>. |
|
alerts.annotations |
Anotasi dari peringatan asli. Jenis: map string. |
|
alerts.endsAt |
Waktu resolusi peringatan asli. Waktu resolusi = Waktu pemicu + Durasi resolusi |
|
alerts.startsAt |
Waktu pemicu peringatan asli. |
|
alerts.fingerprint |
Sidik jari peringatan asli. Peringatan dengan set label yang sama memiliki sidik jari yang sama. |
|
alerts.labels |
Label dari peringatan asli. |
|
alerts.status |
Status peringatan asli:
|
|
commonAnnotations |
Sekumpulan anotasi yang umum untuk semua peringatan dalam grup. |
|
commonLabels |
Sekumpulan label yang umum untuk semua peringatan dalam grup. |
|
groupLabels |
Label yang digunakan untuk mengelompokkan peringatan, sebagaimana didefinisikan dalam kebijakan notifikasi. |
|
status |
Status grup peringatan:
|
|
startTime |
Waktu saat grup peringatan dibuat. |
|
endTime |
Waktu saat grup peringatan terselesaikan. Ini adalah waktu resolusi peringatan asli terakhir dalam grup. |
|
level |
Tingkat keparahan notifikasi. Nilai-nilai ini dipetakan ke tingkat prioritas:
|
|
dispatchRuleName |
Nama kebijakan notifikasi yang cocok. |