Jika aturan peringatan dari kebijakan notifikasi yang ditentukan dipicu, ARMS mengirimkan notifikasi peringatan melalui DingTalk, Lark, WeCom, pesan teks, panggilan telepon, email, atau webhook. ARMS menyediakan template notifikasi preset untuk setiap metode notifikasi. Jika template notifikasi preset tidak memenuhi kebutuhan Anda, Anda dapat memodifikasinya. Topik ini menjelaskan sintaksis Go template, template notifikasi preset, dan variabel dalam template.
Sintaksis Go template
ARMS menggunakan sintaksis Go template untuk merender template notifikasi. Saat sintaksis Go template digunakan, template diisi berdasarkan konteks.
Parameter peringatan dalam template notifikasi terdiri dari beberapa label. Anda dapat menggunakan label untuk menyesuaikan parameter peringatan sesuai kebutuhan. Sebagai contoh, label alertname pada contoh ini menunjukkan nama peringatan.
Kode sampel berikut menggambarkan sintaksis umum Go template:
{
"alerts": [
{
"annotations": {
"message": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics. Penggunaan memori container telah melebihi 80%. Nilai saat ini: 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": "Penggunaan memori container telah melebihi 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. Penggunaan memori container telah melebihi 80%. Nilai saat ini: 15,52%.",
"value": "15,521240234375"
},
"commonLabels": {
"container": "kube-state-metrics",
"severity": "warning",
"instance": "10.0.80.186:10255",
"clustername": "klyz1688-kubernetes-1",
"alertname": "Penggunaan memori container telah melebihi 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": "Penggunaan memori container telah melebihi 80%."
},
"status": "firing",
"startTime":"2023-02-22 07:18:15",
"endTime":"Waktu ketika peringatan dibersihkan",
"level":"error",
"dispatchRuleName":"Nama kebijakan notifikasi",
"alarmId":"123456"
}Titik (.)
Sebuah titik digunakan untuk menunjukkan konteks dalam cakupan saat ini.
Contoh 1: Dapatkan semua konteks dalam cakupan tingkat atas seperti yang ditunjukkan dalam kode sampel sebelumnya:
{{ . }}Output: Konteks dalam kode sampel sebelumnya dikembalikan.
Contoh 2: Dapatkan bidang level dalam konteks:
{{ .level }}Output:
errorContoh 3: Dapatkan bidang commonLabels.alertname dalam konteks:
{{ .commonLabels.alertname }}Output:
Penggunaan memori container telah melebihi 80%.Variabel
Data yang dilewatkan ke template Go dapat disimpan dalam variabel template dan diakses. Sebagai contoh, jika Anda menggunakan variabel $context dalam tindakan { {$context := .}} dan menyimpan data yang dilewatkan dalam variabel tersebut, Anda dapat menggunakan tindakan {{$context}} untuk mengakses variabel tersebut.
Contoh 1: Tetapkan nama peringatan ke variabel $alertname. Kemudian, nilai dari variabel $alertname dikembalikan:
{{ $alertname := .commonLabels.alertname }} {{$alertname}}Output:
Penggunaan memori container telah melebihi 80%.Contoh 2: Tetapkan elemen pertama dalam daftar alerts ke variabel $alert0. Kemudian, alertname dari peringatan pertama (elemen) dikembalikan:
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}Output:
Penggunaan memori container telah melebihi 80%.Tindakan if dan else
Anda dapat mengeksekusi tindakan if untuk memeriksa data. Jika tindakan if tidak memenuhi persyaratan bisnis Anda, Anda dapat mengeksekusi tindakan else. Untuk nilai null, 0, pointer kosong, string kosong, atau string dengan panjang nol, false dikembalikan.
Contoh 1: Jika nilai tag severity dalam peristiwa peringatan adalah warning, sebuah peringatan P3 dihasilkan:
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}Output:
P3 alertContoh 2: Jika nilai tag severity dalam peristiwa peringatan adalah critical, sebuah peringatan P1 dihasilkan. Jika tidak, sebuah peringatan P2 dihasilkan:
{{if eq "critical" .commonLabels.severity }} P1 alert {{ else }} P2 alert {{ end }}Output:
P2 alertTindakan for
Tindakan for digunakan untuk mengeksekusi kode secara berulang.
Contoh 1: Telusuri daftar alerts dan dapatkan alertname dari setiap peringatan:
{{ for .alerts}} {{.labels.alertname}} \n {{end}}Output:
Penggunaan memori container telah melebihi 80%.
Tindakan range
Tindakan range digunakan untuk menelusuri konten yang ditentukan.
Contoh 1: Telusuri bilangan bulat antara 0 dan 9:
{{ $ran := range 0 10 }} {{ for $ran }} {{.}} {{end}}Output:
0 1 2 3 4 5 6 7 8 9Fungsi index
Fungsi index digunakan untuk mendapatkan elemen dalam array.
Contoh 1: Dapatkan elemen pertama dalam daftar alerts dan tetapkan nilai ke variabel $alert0:
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}Output:
Penggunaan memori container telah melebihi 80%.Fungsi pembandingan
Fungsi pembandingan umum:
eq: sama denganne: tidak sama denganlt: kurang darile: kurang dari atau sama dengangt: lebih besar darige: lebih besar dari atau sama dengan
Contoh: Jika nilai tag severity dalam bagian commonLabels sama dengan warning, sebuah peringatan P3 dihasilkan:
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}Output:
P3 alertFungsi logika and, or, dan not
Contoh: Jika nilai tag severity dalam bagian commonLabels sama dengan warning atau warnning, sebuah peringatan P3 dihasilkan:
{{if eq "warning" .commonLabels.severity or eq "warning" .commonLabels.severity }} P3 alert {{ end }}Output:
P3 alertFungsi bawaan umum
printf: Memformat data keluaran.
Contoh: Nilai value dari peringatan pertama dalam daftar alerts dibulatkan menjadi dua tempat desimal dan dikembalikan:
{{ $alert0 := index .alerts 0 }} {{ printf "%.2f" $alert0.annotations.value }}Output:
15,52humanizePercentage: Memformat persentase.
Contoh: Ubah string 0,95332123123124 menjadi persentase yang lebih mudah dibaca:
{{ "0.95332123123124" | humanizePercentage }}Output:
95,33%humanizeDate: Memformat tanggal dengan mengubah timestamp milidetik menjadi tanggal. Format tanggal default adalah yyyy-MM-dd HH:mm:ss.
Contoh: Ubah timestamp 1671074058234 menjadi tanggal:
{{ "1671074058234" | humanizeDate }}Output:
2022-12-15 11:14:18len: Mengembalikan panjang dari sebuah array.
Contoh: Dapatkan panjang daftar alerts:
{{ len .alerts }}Output:
1Template notifikasi preset
Template notifikasi email
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 notifikasi: {{ .dispatchRuleName }}
Peringatan dipicu pada: {{ .startTime }}
Isi peringatan: {{ if .newIncidentIn }} (Peristiwa baru) {{ end }} {{ for .alerts }} {{.annotations.message}} {{ if .generatorURL }} <a href="{{.generatorURL}}" >URL Detail</a> {{end}} {{end}}Isi template | Deskripsi |
| Nama peringatan. Secara default, kebijakan notifikasi dikelompokkan berdasarkan |
| Jika label |
| Jika jenis objek yang memicu peringatan adalah |
| Nama kebijakan notifikasi yang cocok dengan peringatan. |
| Waktu ketika peringatan dipicu. |
| Daftar peristiwa peringatan ditelusuri untuk merender nilai Catatan Sintaksis HTML
|
Setelah kode sampel digunakan untuk rendering, hasil berikut dikembalikan:
Nama peringatan: Penggunaan memori container telah melebihi 80%.
Nama kluster: klyz1688-kubernetes-1
Kebijakan notifikasi: Nama kebijakan notifikasi
Peringatan dipicu pada: 2023-02-22 07:18:15
Isi peringatan: Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics. Penggunaan memori container telah melebihi 80%. Nilai saat ini: 15,52%.Template notifikasi pesan teks dan panggilan telepon
Template notifikasi pesan teks dan panggilan telepon memiliki konten yang sama dengan template email, kecuali bahwa mereka tidak berisi URL detail peringatan.
{{ .level }} peringatan terjadi
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 notifikasi: {{ .dispatchRuleName }}
Peringatan dipicu pada: {{ .startTime }}
Isi peringatan: {{ if .newIncidentIn }} (Peristiwa baru)
{{end}} {{ for .alerts }} {{ .annotations.message }} {{ end }}
Template notifikasi chatbot
{{ if .newIncidentIn }} (Peristiwabaru) {{end}}
{{if .commonLabels.clustername }}
> Nama kluster: {{ .commonLabels.clustername }}
{{ end }}
{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }}
> Nama aplikasi: {{ .commonLabels._aliyun_arms_involvedObject_name }}
{{ end }}
{{ for .alerts }} > {{ .annotations.message }} {{if .generatorURL }} [URL Detail]({{.generatorURL}}) {{end}}{{if .annotations._aliyun_arms_insights_analyze_link }}[<font color='#ff0000'>Penyebab akar</font>]({{ .annotations._aliyun_arms_insights_analyze_link}}){{ end }}{{if eq "1" .labels._aliyun_arms_denoise_code }} (Penting: {{.labels._aliyun_arms_important_reason }}) {{end}}
{{end}}Hasil rendering robot dikembalikan dalam format Markdown. Fitur Markdown yang didukung berbeda-beda tergantung pada chatbot yang digunakan.
Referensi:
>Warna font:
<font color='#ff0000'>Penyebab akar</font>CatatanHanya DingTalk dan WeCom yang mengizinkan Anda untuk mengubah warna font. Lark tidak mengizinkan Anda untuk mengubah warna font.
Pemisah baris:
Pemisah baris di DingTalk: Tekan Enter dua kali dalam template.
Pemisah baris di Lark: Tekan Enter hanya sekali dalam template.
Pemisah baris di WeCom: Tekan Enter hanya sekali dalam template.
Template webhook
{
"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 Notifikasi":"{{ .dispatchRuleName }}",
"Peringatan Dipicu Pada":"{{ .startTime }}",
"Isi Peringatan":"{{ for .alerts }} {{ .annotations.message }} {{ end }}"
}Setelah kode sampel digunakan untuk rendering, hasil berikut dikembalikan:
{
"Nama Peringatan": "Penggunaan memori container telah melebihi 80%.",
"Nama Kluster": "klyz1688-kubernetes-1",
"Kebijakan Notifikasi": "Nama kebijakan notifikasi",
"Peringatan Dipicu Pada":"{{ .startTime }}",
"Isi Peringatan": "Namespace: arms-prom / Pod: kube-state-metrics-ccb59dbff-jljg4 / Container: kube-state-metrics. Penggunaan memori container telah melebihi 80%. Nilai saat ini: 15,52%."
}Variabel
Tabel berikut mencantumkan variabel yang dapat digunakan dalam template notifikasi.
Variabel | Deskripsi |
alarmId | ID peringatan asli. |
alerts | Peristiwa peringatan asli. Tipe datanya adalah List<Alert>. |
alerts.annotations | Anotasi dari peringatan asli. Tipe datanya adalah Map<String, String>. |
alerts.endsAt | Waktu ketika peringatan asli dibersihkan. Waktu ketika peringatan dibersihkan adalah waktu ketika peringatan dipicu ditambah dengan periode waktu yang diperlukan untuk membersihkan peringatan tersebut. |
alerts.startsAt | Waktu ketika peringatan asli dipicu. |
alerts.fingerprint | Fingerprint dari peringatan asli. Peringatan dalam satu grup label memiliki fingerprint yang sama. |
alerts.labels | Label dari peringatan asli. |
alerts.status | Status dari peringatan asli. Nilai yang valid:
|
commonAnnotations | Anotasi yang sama untuk sekelompok peringatan asli. |
commonLabels | Label yang sama untuk sekelompok peringatan asli. |
groupLabels | Label grup. Peringatan dikelompokkan berdasarkan label yang ditentukan dalam kondisi grup kebijakan notifikasi. |
status | Status dari sekelompok peringatan. Nilai yang valid:
|
startTime | Waktu ketika grup peringatan dibuat. |
endTime | Waktu ketika grup peringatan dibersihkan, yaitu waktu ketika peringatan asli terakhir dalam grup dibersihkan. |
level | Tingkat keparahan dari peringatan. Nilai yang valid:
|
dispatchRuleName | Nama kebijakan notifikasi untuk grup peringatan. |