全部产品
Search
文档中心

Application Real-Time Monitoring Service:Sesuaikan templat notifikasi

更新时间:Mar 12, 2026

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.

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 Pemberitahuan":"{{ .dispatchRuleName }}",
  "Waktu pemicu peringatan":"{{ .startTime }}",
  "Isi peringatan":"{{ for .alerts }} {{ .annotations.message }} {{ end }}"
}

Tabel berikut menjelaskan setiap bagian dari templat tersebut.

Bagian templatDeskripsi
{{ .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:

FiturSintaksisDukungan 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 barisTekan Enter dua kali dalam templatHanya DingTalk
Pemisah barisTekan Enter sekali dalam templatLark, 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.

VariabelTipeDeskripsi
alarmIdStringID alert asli.
alertsList<Alert>Daftar event alert asli dalam kelompok ini.
alerts.annotationsMap<String, String>Anotasi dari alert asli.
alerts.endsAtTimestampWaktu saat alert dihapus. Sama dengan waktu pemicu ditambah periode penghapusan.
alerts.startsAtTimestampWaktu saat alert dipicu.
alerts.fingerprintStringSidik jari alert. Alert dengan set label yang sama memiliki sidik jari yang sama.
alerts.labelsMap<String, String>Label dari alert asli.
alerts.statusStringStatus alert. Nilai yang valid: firing (alert aktif), resolved (alert dihapus).
commonAnnotationsMap<String, String>Anotasi yang dimiliki bersama oleh semua alert dalam kelompok.
commonLabelsMap<String, String>Label yang dimiliki bersama oleh semua alert dalam kelompok.
groupLabelsMap<String, String>Label yang digunakan untuk mengelompokkan alert, sebagaimana didefinisikan dalam kondisi kelompok kebijakan notifikasi.
statusStringStatus kelompok alert. Nilai yang valid: firing (setidaknya satu alert aktif), resolved (semua alert dihapus).
startTimeStringWaktu saat kelompok alert dibuat.
endTimeStringWaktu saat kelompok alert dihapus. Ini adalah waktu ketika alert terakhir dalam kelompok tersebut diselesaikan.
levelStringTingkat keparahan. Nilai yang valid: critical (P1), error (P2), warning (P3), page (P4).
dispatchRuleNameStringNama kebijakan notifikasi yang cocok dengan kelompok alert ini.
Catatan

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:

error

Akses 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 alert

if/else:

1

Output:

P2 alert

Perulangan: 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 9

Fungsi 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

FungsiDeskripsi
eqSama dengan
neTidak sama dengan
ltKurang dari
leKurang dari atau sama dengan
gtLebih dari
geLebih dari atau sama dengan

Contoh:

{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}

Output:

  P3 alert

Operator 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 alert

Fungsi bawaan

printf

Format data output.

Bulatkan ke dua tempat desimal:

{{ $alert0 := index .alerts 0 }} {{ printf "%.2f" $alert0.annotations.value }}

Output:

  15.52

humanizePercentage

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:18

len

Mengembalikan panjang array.

Contoh:

{{ len .alerts }}

Output:

1