Ketika aturan alert dalam kebijakan notifikasi dipicu, ARMS mengirimkan notifikasi melalui DingTalk, Lark, WeCom, SMS, panggilan telepon, email, atau webhook. Setiap saluran memiliki templat preset yang dapat Anda sesuaikan menggunakan sintaksis Go template.
Halaman ini mencakup templat preset untuk setiap saluran, variabel templat yang tersedia, serta sintaksis Go template untuk menulis templat kustom.
Templat notifikasi preset
ARMS menyediakan templat preset untuk setiap saluran notifikasi. Setiap templat merender data alert menjadi pesan yang mudah dibaca menggunakan sintaksis Go template.
{
"Nama peringatan":"{{ .commonLabels.alertname }}
{{if .commonLabels.clustername }}", "Nama kluster":"{{ .commonLabels.clustername }} {{ end }}
{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }}", "Nama aplikasi":"{{ .commonLabels._aliyun_arms_involvedObject_name }} {{ end }}",
"Kebijakan Pemberitahuan":"{{ .dispatchRuleName }}",
"Waktu pemicu peringatan":"{{ .startTime }}",
"Isi peringatan":"{{ for .alerts }} {{ .annotations.message }} {{ end }}"
}Tabel berikut menjelaskan setiap bagian dari templat tersebut.
| Bagian templat | Deskripsi |
|---|---|
{{ .commonLabels.alertname }} | Nama alert. Secara default, kebijakan notifikasi mengelompokkan alert berdasarkan alertname, sehingga semua event dalam satu kelompok memiliki nama yang sama. |
{{if .commonLabels.clustername }} | Merender nama kluster hanya jika label clustername ada dalam event tersebut. |
{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }} | Merender nama aplikasi hanya jika tipe objek alert adalah app. |
{{ .dispatchRuleName }} | Nama kebijakan notifikasi yang cocok dengan alert tersebut. |
{{ .startTime }} | Waktu saat alert dipicu. |
{{ if .newIncidentIn }} (New event) {{end}} | Menandai notifikasi dengan (New event) jika terdapat event baru dalam kelompok alert tersebut. |
{{ for .alerts }} {{.annotations.message}} ... {{end}} | Melakukan iterasi terhadap semua event alert dan merender setiap anotasi message. Jika generatorURL tersedia, akan ditampilkan tautan detail yang dapat diklik menggunakan <a href="...">. |
Contoh output:
{
"Alert name": "Penggunaan memori kontainer telah melebihi 80%.",
"Cluster name": "klyz1688-kubernetes-1",
"Notification policy": "Nama kebijakan pemberitahuan",
"Alert triggered at": "2023-02-22 07:18:15",
"Alert content": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics. Penggunaan memori kontainer telah melebihi 80%. Nilai saat ini: 15,52%."
}SMS dan panggilan telepon
Templat SMS dan panggilan telepon memiliki struktur yang sama dengan templat email tetapi tidak menyertakan tautan detail.
{{ .level }}Chatbot (DingTalk, Lark, WeCom)
Templat chatbot merender output dalam format Markdown. Dukungan pemformatan bervariasi tergantung platform.
{{ 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}}Dukungan Markdown pada chatbot:
| Fitur | Sintaksis | Dukungan platform |
|---|---|---|
| Block quote | > | DingTalk, Lark, WeCom |
| Warna font | <font color='#ff0000'>text</font> | Hanya didukung oleh DingTalk dan WeCom. Lark tidak mendukung warna font. |
| Pemisah baris | Tekan Enter dua kali dalam templat | Hanya DingTalk |
| Pemisah baris | Tekan Enter sekali dalam templat | Lark, WeCom |
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 triggered at":"{{ .startTime }}",
"Alert content":"{{ for .alerts }} {{ .annotations.message }} {{ end }}"
}Contoh output:
{
"Alert name": "The memory usage of the container has exceeded 80%.",
"Cluster name": "klyz1688-kubernetes-1",
"Notification policy": "Notification policy name",
"Alert triggered at": "2023-02-22 07:18:15",
"Alert content": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics. The memory usage of the container has exceeded 80%. Current value: 15.52%."
}Variabel templat
Variabel berikut tersedia dalam templat notifikasi untuk merender data alert.
| Variabel | Tipe | Deskripsi |
|---|---|---|
alarmId | String | ID alert asli. |
alerts | List<Alert> | Daftar event alert asli dalam kelompok ini. |
alerts.annotations | Map<String, String> | Anotasi dari alert asli. |
alerts.endsAt | Timestamp | Waktu saat alert dihapus. Sama dengan waktu pemicu ditambah periode penghapusan. |
alerts.startsAt | Timestamp | Waktu saat alert dipicu. |
alerts.fingerprint | String | Sidik jari alert. Alert dengan set label yang sama memiliki sidik jari yang sama. |
alerts.labels | Map<String, String> | Label dari alert asli. |
alerts.status | String | Status alert. Nilai yang valid: firing (alert aktif), resolved (alert dihapus). |
commonAnnotations | Map<String, String> | Anotasi yang dimiliki bersama oleh semua alert dalam kelompok. |
commonLabels | Map<String, String> | Label yang dimiliki bersama oleh semua alert dalam kelompok. |
groupLabels | Map<String, String> | Label yang digunakan untuk mengelompokkan alert, sebagaimana didefinisikan dalam kondisi kelompok kebijakan notifikasi. |
status | String | Status kelompok alert. Nilai yang valid: firing (setidaknya satu alert aktif), resolved (semua alert dihapus). |
startTime | String | Waktu saat kelompok alert dibuat. |
endTime | String | Waktu saat kelompok alert dihapus. Ini adalah waktu ketika alert terakhir dalam kelompok tersebut diselesaikan. |
level | String | Tingkat keparahan. Nilai yang valid: critical (P1), error (P2), warning (P3), page (P4). |
dispatchRuleName | String | Nama kebijakan notifikasi yang cocok dengan kelompok alert ini. |
Parameter alert terdiri dari beberapa label. Gunakan label untuk mereferensikan data alert spesifik dalam templat Anda. Misalnya, .commonLabels.alertname mengembalikan nama alert.
Konteks alert contoh
JSON berikut menunjukkan konteks alert lengkap yang dirujuk oleh semua contoh dalam bagian sintaksis Go template.
{
"alerts": [
{
"annotations": {
"message": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics. The memory usage of the container 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": "The memory usage of the container has exceeded 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. The memory usage of the container 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": "The memory usage of the container has exceeded 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": "The memory usage of the container has exceeded 80%."
},
"status": "firing",
"startTime": "2023-02-22 07:18:15",
"endTime": "The time when the alert was cleared",
"level": "error",
"dispatchRuleName": "Notification policy name",
"alarmId": "123456"
}Sintaksis Go template
ARMS menggunakan sintaksis Go template untuk merender templat notifikasi. Saat proses rendering, templat diisi dengan data dari konteks alert.
Notasi titik
Titik (.) merepresentasikan cakupan konteks saat ini.
Akses seluruh konteks:
{{ . }}Output: Mengembalikan semua data dalam konteks alert.
Akses bidang tingkat atas:
{{ .level }}Output:
errorAkses bidang bersarang:
{{ .commonLabels.alertname }}Output:
The memory usage of the container has exceeded 80%.Variabel
Simpan data konteks dalam variabel untuk digunakan kembali.
Menetapkan bidang ke variabel:
{{ $alertname := .commonLabels.alertname }} {{$alertname}}Output:
The memory usage of the container has exceeded 80%.Akses elemen array melalui variabel:
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}Output:
The memory usage of the container has exceeded 80%.Kondisional: if/else
Periksa nilai dengan if. Kondisi dievaluasi sebagai false untuk nilai null, 0, pointer nil, string kosong, dan string dengan panjang nol.
Kondisi sederhana:
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}Output:
P3 alertif/else:
1Output:
P2 alertPerulangan: for
Lakukan iterasi melalui daftar.
Traverse alert dan ambil nama setiap alert:
{{ for .alerts}} {{.labels.alertname}} \n {{end}}Output:
The memory usage of the container has exceeded 80%.Perulangan: range
Traverse urutan nilai.
Iterasi bilangan bulat dari 0 hingga 9:
{{ $ran := range 0 10 }} {{ for $ran }} {{.}} {{end}}Output:
0 1 2 3 4 5 6 7 8 9Fungsi index
Ambil elemen spesifik dari array berdasarkan indeks.
Dapatkan event peringatan pertama:
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}Output:
The memory usage of the container has exceeded 80%.Fungsi perbandingan
| Fungsi | Deskripsi |
|---|---|
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:
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}Output:
P3 alertOperator logika: and, or, not
Gabungkan kondisi menggunakan operator logika.
Contoh:
{{if eq "warning" .commonLabels.severity or eq "warning" .commonLabels.severity }} P3 alert {{ end }}Output:
P3 alertFungsi bawaan
printf
Format data output.
Bulatkan ke dua tempat desimal:
{{ $alert0 := index .alerts 0 }} {{ printf "%.2f" $alert0.annotations.value }}Output:
15.52humanizePercentage
Mengonversi string desimal menjadi persentase yang mudah dibaca.
Contoh:
{{ "0.95332123123124" | humanizePercentage }}Output:
95.33%humanizeDate
Mengonversi timestamp milidetik menjadi tanggal terformat. Format default: yyyy-MM-dd HH:mm:ss.
Contoh:
{{ "1671074058234" | humanizeDate }}Output:
2022-12-15 11:14:18len
Mengembalikan panjang array.
Contoh:
{{ len .alerts }}Output:
1