Lorsqu'une règle d'alerte d'une politique de notification se déclenche, ARMS envoie des notifications via des canaux tels que DingTalk, Lark, WeCom, SMS, téléphone, e-mail et webhooks. ARMS fournit des modèles de notification préconfigurés pour chaque méthode. Si ces modèles par défaut ne conviennent pas, personnalisez-les. Cette rubrique explique la syntaxe des modèles Go, décrit les modèles préconfigurés et répertorie les variables disponibles.
Syntaxe des modèles Go
Les modèles de notification d'alerte ARMS utilisent la syntaxe des modèles Go pour injecter les données du contexte fourni dans le modèle.
Les paramètres d'alerte d'un modèle de notification comprennent plusieurs libellés. Ces libellés permettent d'inclure des paramètres d'alerte spécifiques dans vos notifications. Par exemple, le libellé alertname indique le nom de l'alerte.
Cette rubrique utilise l'exemple de code suivant pour illustrer la syntaxe courante des modèles Go.
{
"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"
},
Le caractère .
Représente l'objet actuel dans la portée et permet d'accéder à ses données.
Exemple 1 : récupérez tout le contenu de la portée de niveau supérieur, c'est-à-dire l'intégralité des données de contexte de l'exemple de code.
{{ . }}
Renvoie l'intégralité du contenu de l'exemple de code.
Exemple 2 : récupérez le champ level des données de contexte.
{{ .level }}
Résultat :
error
Exemple 3 : récupérez le champ commonLabels.alertname des données de contexte.
{{ .commonLabels.alertname }}
Résultat :
Container memory usage exceeds 80%
Variables
Stockez les données transmises au modèle dans des variables accessibles partout dans le modèle. Par exemple, dans {{$context := .}}, la variable $context stocke les données entrantes. Accédez-y via {{$context}}.
Exemple 1 : assignez le nom de l'alerte à $alertname, puis affichez $alertname.
{{ $alertname := .commonLabels.alertname }} {{$alertname}}
Résultat :
Container memory usage exceeds 80%
Exemple 2 : assignez la première alerte de la liste alerts à $alert0 et affichez son alertname.
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}
Résultat :
Container memory usage exceeds 80%
L'action if/else
L'action if gère la logique conditionnelle. Si la condition est fausse, un bloc else facultatif s'exécute. Les valeurs telles que 0, nil ou une chaîne vide sont évaluées comme false.
Exemple 1 : si la valeur du libellé severity d'un événement d'alerte est warning, affichez P3 alert.
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}
Résultat :
P3 alert
Exemple 2 : si la valeur du libellé severity d'un événement d'alerte est critical, affichez P1 alert. Sinon, affichez P2 alert.
{{if eq "critical" .commonLabels.severity }} P1 alert {{ else }} P2 alert {{ end }}
Résultat :
P2 alert
L'action for
L'action for exécute un bloc de code de manière répétée.
Exemple 1 : parcourez la liste alerts pour obtenir le alertname de chaque alerte.
{{ for .alerts}} {{.labels.alertname}} \n {{end}}
Résultat :
Container memory usage exceeds 80%
L'action range
L'action range itère sur une structure de données, telle qu'un slice ou une map.
Exemple 1 : parcourez une liste pour obtenir l'index et la valeur de chaque élément.
{{ range $index, $alert := .alerts }}Index {{ $index }}: {{ $alert.labels.alertname }}\n{{ end }}
Résultat :
Index 0: Container memory usage exceeds 80%
La fonction index
La fonction index accède à un élément d'un tableau, d'un slice ou d'une map.
Exemple 1 : récupérez le premier élément de la liste alerts et assignez-le à $alert0.
{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}
Résultat :
Container memory usage exceeds 80%
Fonctions de comparaison
Les fonctions de comparaison suivantes sont couramment utilisées :
eq: égal àne: différent delt: inférieur àle: inférieur ou égal àgt: supérieur àge: supérieur ou égal à
Exemple : si la valeur du libellé severity dans commonLabels est égale à warning, affichez P3 alert.
{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}
Résultat :
P3 alert
Fonctions logiques : and, or, not
Exemple : si la valeur du libellé severity dans commonLabels est égale à warning ou à warnning, affichez P3 alert.
{{if or (eq "warning" .commonLabels.severity) (eq "warnning" .commonLabels.severity) }} P3 alert {{ end }}
Résultat :
P3 alert
Fonctions intégrées courantes
printf : met en forme une chaîne selon un spécificateur de format donné.
Exemple : affichez la value de la première alerte de la liste alerts, formatée avec deux décimales.
{{ $alert0 := index .alerts 0 }} {{ printf "%.2f" $alert0.annotations.value }}
Résultat :
15.52
humanizePercentage : met en forme une valeur sous forme de pourcentage.
Exemple : convertissez la chaîne « 0.95332123123124 » en un pourcentage plus lisible.
{{ "0.95332123123124" | humanizePercentage }}
Résultat :
95.33%
humanizeDate : met en forme un horodatage en millisecondes sous forme de date. Le format de date est yyyy-MM-dd HH:mm:ss.
Exemple : convertissez l'horodatage 1671074058234 en date.
{{ "1671074058234" | humanizeDate }}
Résultat :
2022-12-15 11:14:18
len : renvoie la longueur d'un tableau, d'un slice, d'une chaîne ou d'une map.
Exemple : obtenez la longueur de la liste alerts.
{{ len .alerts }}
Résultat :
1
Modèles de notification préconfigurés
Modèle de notification par e-mail
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 }}
|
Contenu du modèle |
Description |
|
Le nom de l'alerte. Par défaut, une politique de notification regroupe les alertes par le libellé |
|
Si un événement contient le libellé |
|
Si le type d'objet impliqué est |
|
Le nom de la politique de notification correspondante. |
|
L'heure du premier déclenchement de l'alerte. |
|
Parcourez la liste des événements d'alerte pour afficher la valeur Remarque
Le modèle préconfiguré utilise la syntaxe HTML
Le bloc |
Exemple de sortie rendue :
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%
Modèles de notification SMS et téléphonique
Ces modèles sont similaires au modèle d'e-mail, mais omettent l'URL des détails.
{{ .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 }}
Modèle de notification pour 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}}
La sortie est rendue en Markdown. La prise en charge des fonctionnalités varie selon le chatbot.
Citation :
>-
Couleur de police :
<font color='#ff0000'>root cause</font>RemarqueSeuls DingTalk et WeCom prennent en charge les modifications de couleur de police. Lark ne les prend pas en charge.
-
Sauts de ligne :
DingTalk : ajoutez deux sauts de ligne dans le modèle.
Lark : ajoutez un saut de ligne dans le modèle.
WeCom : ajoutez un saut de ligne dans le modèle.
Modèle 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 }}"
}
Exemple de sortie rendue :
{
"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%"
}
Référence des variables
Le tableau suivant décrit les variables disponibles dans les modèles de notification.
|
Paramètre |
Description |
|
alarmId |
L'ID de l'alerte d'origine. |
|
alerts |
Une liste des événements d'alerte d'origine. Type : List<Alert>. |
|
alerts.annotations |
Les annotations d'une alerte d'origine. Type : map de chaînes. |
|
alerts.endsAt |
L'heure de résolution de l'alerte d'origine. Heure de résolution = Heure de déclenchement + Durée de résolution |
|
alerts.startsAt |
L'heure de déclenchement de l'alerte d'origine. |
|
alerts.fingerprint |
L'empreinte digitale de l'alerte d'origine. Les alertes partageant le même ensemble de libellés ont la même empreinte digitale. |
|
alerts.labels |
Les libellés de l'alerte d'origine. |
|
alerts.status |
L'état d'une alerte d'origine :
|
|
commonAnnotations |
Un ensemble d'annotations communes à toutes les alertes du groupe. |
|
commonLabels |
Un ensemble de libellés communs à toutes les alertes du groupe. |
|
groupLabels |
Les libellés utilisés pour regrouper les alertes, tels que définis dans la politique de notification. |
|
status |
L'état du groupe d'alertes :
|
|
startTime |
L'heure de création du groupe d'alertes. |
|
endTime |
L'heure de résolution du groupe d'alertes. Il s'agit de l'heure de résolution de la dernière alerte d'origine du groupe. |
|
level |
Le niveau de gravité de la notification. Les valeurs correspondent aux niveaux de priorité :
|
|
dispatchRuleName |
Le nom de la politique de notification correspondante. |