All Products
Search
Document Center

Application Real-Time Monitoring Service:Konfigurasikan templat notifikasi dan templat webhook

Last Updated:Sep 05, 2026

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.

Catatan

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

Alert name: {{ .commonLabels.alertname }}

Nama peringatan. Secara default, kebijakan notifikasi mengelompokkan peringatan berdasarkan label alertname, sehingga semua event dalam satu notifikasi memiliki nama peringatan yang sama.

{{if .commonLabels.clustername }} Cluster name: {{ .commonLabels.clustername }}
                {{ end }}

Jika sebuah event berisi label clustername, nilai label clustername akan dirender sebagai bidang nama kluster.

{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }} Application name: {{ .commonLabels._aliyun_arms_involvedObject_name }}
                {{ end }}

Jika jenis objek yang terlibat adalah app, nama aplikasi disertakan.

Notification policy: {{ .dispatchRuleName }}

Nama kebijakan notifikasi yang cocok.

Alert time: {{ .startTime }}

Waktu ketika peringatan pertama kali dipicu.

Alert content: {{ if .newIncidentIn }} (New event) {{end}} 
{{ for .alerts }} {{ .annotations.message }} {{if .generatorURL }}  <a href="{{.generatorURL}}" > Details URL</a> {{ end }} {{ end }}

Lakukan iterasi pada daftar event peringatan untuk merender nilai message. Jika sebuah event berisi bidang generatorUrl, render nilai bidang generatorUrl sebagai URL detail event.

Catatan

Templat bawaan menggunakan sintaks HTML <a></a> untuk merender tautan.

<a href="{{.generatorURL}}">Details URL</a>

Blok {{ if .newIncidentIn }} (New event) {{end}} menandai notifikasi dengan mengeluarkan New event ketika event baru ditambahkan ke grup peringatan.

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>
    Catatan

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

  • firing: Peringatan aktif.

  • resolved: Peringatan terselesaikan.

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:

  • firing: Peringatan aktif.

  • resolved: Peringatan terselesaikan.

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:

  • critical: P1

  • error: P2

  • warning: P3

  • page: P4

dispatchRuleName

Nama kebijakan notifikasi yang cocok.