全部产品
Search
文档中心

Application Real-Time Monitoring Service:Konfigurasi template notifikasi dan template webhook

更新时间:Jun 27, 2025

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.

Catatan

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:

error

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

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

Tindakan 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 9

Fungsi 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 dengan

  • ne: tidak sama dengan

  • lt: kurang dari

  • le: kurang dari atau sama dengan

  • gt: lebih besar dari

  • ge: 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 alert

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

Fungsi 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,52

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

len: Mengembalikan panjang dari sebuah array.

Contoh: Dapatkan panjang daftar alerts:

{{ len .alerts }}

Output:

1

Template 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: {{ .commonLabels.alertname }}

Nama peringatan. Secara default, kebijakan notifikasi dikelompokkan berdasarkan alertname. Oleh karena itu, semua peristiwa yang terkait dengan peringatan memiliki nama peringatan yang sama.

{{if .commonLabels.clustername }}
Nama kluster: {{ .commonLabels.clustername }}
{{ end }}

Jika label clustername ada dalam peristiwa, nilai dari label clustername dirender sebagai bidang nama kluster.

{{if eq "app" .commonLabels._aliyun_arms_involvedObject_kind }}
Nama aplikasi: {{ .commonLabels._aliyun_arms_involvedObject_name }}
{{ end }}

Jika jenis objek yang memicu peringatan adalah app, nama aplikasi yang sesuai dikembalikan.

Kebijakan notifikasi: {{ .dispatchRuleName }}

Nama kebijakan notifikasi yang cocok dengan peringatan.

Peringatan dipicu pada: {{ .startTime }}

Waktu ketika peringatan dipicu.

Isi peringatan:{{ if .newIncidentIn }} (Peristiwa baru) {{end}} 
{{ for .alerts }} {{.annotations.message}} {{ if .generatorURL }} <a href="{{.generatorURL}}" >URL Detail</a> {{end}} {{end}}

Daftar peristiwa peringatan ditelusuri untuk merender nilai message. Jika suatu peristiwa berisi bidang generatorUrl, nilai dari bidang generatorUrl dirender sebagai URL detail peristiwa.

Catatan

Sintaksis HTML <a></a> digunakan dalam template preset untuk merender URL.

<a href="{{.generatorUrl}}">URL Detail</a>

{{ if .newIncidentIn }} (Peristiwa baru) {{end}}: Jika peristiwa baru terjadi dalam grup peringatan, pemberitahuan saat ini ditandai dan Peristiwa baru dikembalikan.

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

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

  • firing: Peringatan sedang dipicu.

  • resolved: Peringatan telah dibersihkan.

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:

  • firing: Peringatan sedang dipicu.

  • resolved: Peringatan telah dibersihkan.

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:

  • critical: P1

  • error: P2

  • warning: P3

  • page: P4

dispatchRuleName

Nama kebijakan notifikasi untuk grup peringatan.