Tous les produits
Search
Centre de documentation

Application Real-Time Monitoring Service:Configurer les modèles de notification et les modèles webhook

Dernière mise à jour :Sep 06, 2026

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.

Remarque

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 de

  • lt : 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

Alert name: {{ .commonLabels.alertname }}

Le nom de l'alerte. Par défaut, une politique de notification regroupe les alertes par le libellé alertname, de sorte que tous les événements d'une notification partagent le même nom d'alerte.

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

Si un événement contient le libellé clustername, la valeur du libellé clustername s'affiche comme nom de cluster.

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

Si le type d'objet impliqué est app, le nom de l'application s'affiche.

Notification policy: {{ .dispatchRuleName }}

Le nom de la politique de notification correspondante.

Alert time: {{ .startTime }}

L'heure du premier déclenchement de l'alerte.

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

Parcourez la liste des événements d'alerte pour afficher la valeur message. Si un événement contient le champ generatorUrl, la valeur du champ generatorUrl s'affiche comme URL des détails de l'événement.

Remarque

Le modèle préconfiguré utilise la syntaxe HTML <a></a> pour rendre le lien.

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

Le bloc {{ if .newIncidentIn }} (New event) {{end}} marque la notification en affichant New event lorsqu'un nouvel événement est ajouté à un groupe d'alertes.

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

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

  • firing : l'alerte est active.

  • resolved : l'alerte est résolue.

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 :

  • firing : l'alerte est active.

  • resolved : l'alerte est résolue.

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

  • critical : P1

  • error : P2

  • warning : P3

  • page : P4

dispatchRuleName

Le nom de la politique de notification correspondante.