Bir bildirim ilkesindeki uyarı kuralı tetiklendiğinde ARMS; DingTalk, Lark, WeCom, SMS, telefon, e-posta ve Webhook gibi kanallar aracılığıyla uyarı bildirimleri gönderir. ARMS her bildirim yöntemi için önceden yapılandırılmış bildirim şablonları sunar. Bu varsayılan şablonlar ihtiyaçlarınızı karşılamıyorsa şablonları özelleştirebilirsiniz. Bu konu özelleştirme için Go şablon sözdizimini açıklar, önceden yapılandırılmış şablonları tanıtır ve kullanılabilir şablon değişkenlerini listeler.
Go şablon sözdizimi
ARMS uyarı bildirim şablonları şablonu sağlanan bağlamdaki verilerle doldurmak için Go şablon sözdizimini kullanır.
Bildirim şablonundaki uyarı parametreleri birden fazla etiketten oluşur. Etiketler bildirimlere belirli uyarı parametrelerini eklemenizi sağlar. Örneğin bu örnekteki alertname etiketi uyarı adını belirtir.
Bu konu yaygın Go şablon sözdizimini açıklamak için aşağıdaki örnek kodu kullanır.
{
"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"
},
. karakteri
Geçerli kapsamdaki nesneyi temsil eder ve verilerine erişmenizi sağlar.
Örnek 1: Üst düzey kapsamdaki tüm içeriği yani örnek koddan alınan tüm bağlam verilerini alın.
{{ . }}
Örnek kodun tüm içeriğini döndürür.
Örnek 2: Bağlam verilerinden level alanını alın.
{{ .level }}
Döndürülen değer:
error
Örnek 3: Bağlam verilerinden commonLabels.alertname alanını alın.
{{ .commonLabels.alertname }}
Döndürülen değer:
Container memory usage exceeds 80%
Değişkenler
Şablona iletilen verileri şablonun tamamında erişilebilir olan değişkenlerde saklayabilirsiniz. Örneğin {{$context := .}} ifadesinde $context değişkeni gelen verileri saklar ve bu verilere {{$context}} kullanarak erişebilirsiniz.
Örnek 1: Uyarı adını $alertname değişkenine atayın ve ardından $alertname değişkenini çıktıda gösterin.
{{ $alertname := .commonLabels.alertname }} {{$alertname}}
Döndürülen değer:
Container memory usage exceeds 80%
Örnek 2: alerts listesinin ilk uyarısını $alert0 değişkenine atayın ve bunun alertname değerini çıktıda gösterin.
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}
Döndürülen değer:
Container memory usage exceeds 80%
if/else eylemi
if eylemi koşullu mantık sağlar. Koşul yanlışsa isteğe bağlı bir else bloğu yürütülür. 0, nil veya boş dize gibi değerler false olarak değerlendirilir.
Örnek 1: Bir uyarı olayındaki severity etiketinin değeri warning ise P3 alert çıktısını verin.
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}
Döndürülen değer:
P3 alert
Örnek 2: Bir uyarı olayındaki severity etiketinin değeri critical ise P1 alert çıktısını verin. Aksi takdirde P2 alert çıktısını verin.
{{if eq "critical" .commonLabels.severity }} P1 alert {{ else }} P2 alert {{ end }}
Döndürülen değer:
P2 alert
for eylemi
for eylemi bir kod bloğunu tekrar tekrar yürütür.
Örnek 1: Her uyarının alertname değerini almak için alerts listesinde yineleme yapın.
{{ for .alerts}} {{.labels.alertname}} \n {{end}}
Döndürülen değer:
Container memory usage exceeds 80%
range eylemi
range eylemi dilim veya eşleme gibi bir veri yapısı üzerinde yineleme yapar.
Örnek 1: Bir liste üzerinde yineleme yaparak her öğenin dizinini ve değerini alın.
{{ range $index, $alert := .alerts }}Index {{ $index }}: {{ $alert.labels.alertname }}\n{{ end }}
Döndürülen değer:
Index 0: Container memory usage exceeds 80%
index işlevi
index işlevi dizi, dilim veya eşlemenin bir öğesine erişir.
Örnek 1: alerts listesinden ilk öğeyi alın ve bunu $alert0 değişkenine atayın.
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}
Döndürülen değer:
Container memory usage exceeds 80%
Karşılaştırma işlevleri
Aşağıdaki karşılaştırma işlevleri yaygın olarak kullanılır:
eq: Eşittirne: Eşit değildirlt: Küçüktürle: Küçük veya eşittirgt: Büyüktürge: Büyük veya eşittir
Örnek: commonLabels içindeki severity etiketinin değeri warning değerine eşitse P3 alert çıktısını verin.
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}
Döndürülen değer:
P3 alert
Mantıksal işlevler: and, or, not
Örnek: commonLabels içindeki severity etiketinin değeri warning veya warnning değerine eşitse P3 alert çıktısını verin.
{{if or (eq "warning" .commonLabels.severity) (eq "warnning" .commonLabels.severity) }} P3 alert {{ end }}
Döndürülen değer:
P3 alert
Yaygın yerleşik işlevler
printf: Belirtilen biçim belirtecine göre bir dizeyi biçimlendirir.
Örnek: alerts listesinin ilk uyarısının value değerini iki ondalık basamakla biçimlendirerek çıktıda gösterin.
{{ $alert0 := index .alerts 0 }} {{ printf "%.2f" $alert0.annotations.value }}
Döndürülen değer:
15.52
humanizePercentage: Bir değeri yüzde olarak biçimlendirir.
Örnek: "0.95332123123124" dizesini daha okunabilir bir yüzde değerine dönüştürün.
{{ "0.95332123123124" | humanizePercentage }}
Döndürülen değer:
95.33%
humanizeDate: Milisaniye cinsinden bir zaman damgasını tarihe dönüştürür. Tarih biçimi yyyy-MM-dd HH:mm:ss şeklindedir.
Örnek: 1671074058234 zaman damgasını tarihe dönüştürün.
{{ "1671074058234" | humanizeDate }}
Döndürülen değer:
2022-12-15 11:14:18
len: Bir dizinin, dilimin, dizenin veya eşlemenin uzunluğunu döndürür.
Örnek: alerts listesinin uzunluğunu alın.
{{ len .alerts }}
Döndürülen değer:
1
Önceden yapılandırılmış bildirim şablonları
E-posta bildirim şablonu
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 }}
|
Şablon içeriği |
Açıklama |
|
Uyarı adı. Varsayılan olarak bildirim ilkesi uyarıları |
|
Olay |
|
İlgili nesnenin türü |
|
Eşleşen bildirim ilkesinin adı. |
|
Uyarının ilk tetiklenme zamanı. |
|
Not
Önceden yapılandırılmış şablon bağlantıyı işlemek için HTML
|
İşlenen çıktının örneği:
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%
SMS ve telefon bildirim şablonları
Bu şablonlar e-posta şablonuna benzer ancak ayrıntılar URL'sini içermez.
{{ .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 }}
Sohbet botu bildirim şablonu
{{ 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}}
Çıktı Markdown olarak işlenir. Özellik desteği sohbet botuna göre değişir.
Alıntı bloğu:
>-
Yazı tipi rengi:
<font color='#ff0000'>root cause</font>NotYalnızca DingTalk ve WeCom yazı tipi rengi değişikliklerini destekler. Lark desteklemez.
-
Satır sonları:
DingTalk: Şablona iki yeni satır ekleyin.
Lark: Şablona bir yeni satır ekleyin.
WeCom: Şablona bir yeni satır ekleyin.
Webhook şablonu
{
"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 }}"
}
İşlenen çıktının örneği:
{
"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%"
}
Değişken referansı
Aşağıdaki tabloda bildirim şablonlarında kullanılabilen değişkenler açıklanmaktadır.
|
Parametre |
Açıklama |
|
alarmId |
Orijinal uyarının kimliği. |
|
alerts |
Orijinal uyarı olaylarının listesi. Tür: List<Alert>. |
|
alerts.annotations |
Bir orijinal uyarının ek açıklamaları. Tür: dize eşlemesi. |
|
alerts.endsAt |
Orijinal uyarının çözüm süresi. Çözüm süresi = Tetikleme süresi + Çözüm süresi |
|
alerts.startsAt |
Orijinal uyarının tetikleme zamanı. |
|
alerts.fingerprint |
Orijinal uyarının parmak izi. Aynı etiket kümesine sahip uyarılar aynı parmak izine sahiptir. |
|
alerts.labels |
Orijinal uyarının etiketleri. |
|
alerts.status |
Bir orijinal uyarının durumu:
|
|
commonAnnotations |
Gruptaki tüm uyarılarda ortak olan ek açıklamalar kümesi. |
|
commonLabels |
Gruptaki tüm uyarılarda ortak olan etiketler kümesi. |
|
groupLabels |
Bildirim ilkesinde tanımlandığı şekilde uyarıları gruplandırmak için kullanılan etiketler. |
|
status |
Uyarı grubunun durumu:
|
|
startTime |
Uyarı grubunun oluşturulma zamanı. |
|
endTime |
Uyarı grubunun çözümlenme zamanı. Bu gruptaki son orijinal uyarının çözüm süresidir. |
|
level |
Bildirim önem düzeyi. Değerler öncelik düzeyleriyle eşleşir:
|
|
dispatchRuleName |
Eşleşen bildirim ilkesinin adı. |