Todos los productos
Search
Centro de documentos

Application Real-Time Monitoring Service:Configure plantillas de notificación y plantillas de webhook

Última actualización: Sep 11, 2026

Cuando se activa una regla de alerta en una política de notificación, ARMS envía notificaciones de alerta a través de canales como DingTalk, Lark, WeCom, SMS, llamadas telefónicas, correo electrónico y webhooks. ARMS proporciona plantillas de notificación preconfiguradas para cada método de notificación. Si estas plantillas predeterminadas no cubren sus necesidades, puede personalizarlas. Este tema explica la sintaxis de las plantillas de Go para la personalización, describe las plantillas preconfiguradas y enumera las variables de plantilla disponibles.

Sintaxis de las plantillas de Go

Las plantillas de notificación de alertas de ARMS utilizan la sintaxis de plantillas de Go para rellenar la plantilla con los datos de un contexto proporcionado.

Nota

Los parámetros de alerta en una plantilla de notificación constan de varias etiquetas. Las etiquetas le permiten incluir parámetros de alerta específicos en sus notificaciones. Por ejemplo, la etiqueta alertname de este ejemplo indica el nombre de la alerta.

A continuación se utiliza el siguiente código de ejemplo para describir la sintaxis común de las plantillas de 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"
},

El carácter .

Representa el objeto actual dentro del alcance y permite acceder a sus datos.

Ejemplo 1: obtenga todo el contenido del alcance de nivel superior, que corresponde a todos los datos de contexto del código de ejemplo.

{{ . }}

Devuelve todo el contenido del código de ejemplo.

Ejemplo 2: obtenga el campo level de los datos de contexto.

{{ .level }}

Devuelve:

error

Ejemplo 3: obtenga el campo commonLabels.alertname de los datos de contexto.

{{ .commonLabels.alertname }}

Devuelve:

Container memory usage exceeds 80%

Variables

Puede almacenar los datos que se pasan a la plantilla en variables accesibles en toda la plantilla. Por ejemplo, en {{$context := .}}, la variable $context almacena los datos entrantes, a los cuales puede acceder mediante {{$context}}.

Ejemplo 1: asigne el nombre de la alerta a $alertname y, después, muestre $alertname.

{{ $alertname := .commonLabels.alertname }} {{$alertname}}

Devuelve:

Container memory usage exceeds 80%

Ejemplo 2: asigne la primera alerta de la lista alerts a $alert0 y muestre su alertname.

{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}

Devuelve:

Container memory usage exceeds 80%

La acción if/else

La acción if proporciona lógica condicional. Si la condición es falsa, se ejecuta un bloque else opcional. Los valores como 0, nil o una cadena vacía se evalúan como false.

Ejemplo 1: si el valor de la etiqueta severity en un evento de alerta es warning, muestre P3 alert.

{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}

Devuelve:

P3 alert

Ejemplo 2: si el valor de la etiqueta severity en un evento de alerta es critical, muestre P1 alert. De lo contrario, muestre P2 alert.

{{if eq "critical" .commonLabels.severity }} P1 alert {{ else }} P2 alert {{ end }}

Devuelve:

P2 alert

La acción for

La acción for ejecuta un bloque de código de forma repetida.

Ejemplo 1: recorra la lista alerts para obtener el alertname de cada alerta.

{{ for .alerts}} {{.labels.alertname}} \n {{end}}

Devuelve:

Container memory usage exceeds 80%
 

La acción range

La acción range itera sobre una estructura de datos, como un slice o un map.

Ejemplo 1: itere sobre una lista para obtener el índice y el valor de cada elemento.

{{ range $index, $alert := .alerts }}Index {{ $index }}: {{ $alert.labels.alertname }}\n{{ end }}

Devuelve:

Index 0: Container memory usage exceeds 80% 

La función index

La función index accede a un elemento de un array, un slice o un map.

Ejemplo 1: obtenga el primer elemento de la lista alerts y asígnelo a $alert0.

{{ $alert0 := index .alerts 0 }} {{$alert0.labels.alertname}}

Devuelve:

Container memory usage exceeds 80%

Funciones de comparación

A continuación se muestran las funciones de comparación de uso más frecuente:

  • eq: igual a

  • ne: distinto de

  • lt: menor que

  • le: menor o igual que

  • gt: mayor que

  • ge: mayor o igual que

Ejemplo: si el valor de la etiqueta severity en commonLabels es igual a warning, muestre P3 alert.

{{if eq "warning" .commonLabels.severity }} P3 alert {{ end }}

Devuelve:

P3 alert

Funciones lógicas: and, or, not

Ejemplo: si el valor de la etiqueta severity en commonLabels es igual a warning o a warnning, muestre P3 alert.

{{if or (eq "warning" .commonLabels.severity) (eq "warnning" .commonLabels.severity) }} P3 alert {{ end }}

Devuelve:

P3 alert

Funciones integradas comunes

printf: da formato a una cadena según un especificador de formato determinado.

Ejemplo: muestre el value de la primera alerta en la lista alerts con dos decimales.

{{ $alert0 := index .alerts 0 }} {{ printf "%.2f" $alert0.annotations.value }}

Devuelve:

15.52

humanizePercentage: da formato de porcentaje a un valor.

Ejemplo: convierta la cadena "0.95332123123124" en un porcentaje más legible.

{{ "0.95332123123124" | humanizePercentage }}

Devuelve:

95.33%

humanizeDate: convierte una marca de tiempo en milisegundos en una fecha. El formato de fecha es yyyy-MM-dd HH:mm:ss.

Ejemplo: convierta la marca de tiempo 1671074058234 en una fecha.

{{ "1671074058234" | humanizeDate }}

Devuelve:

2022-12-15 11:14:18

len: devuelve la longitud de un array, un slice, una cadena o un map.

Ejemplo: obtenga la longitud de la lista alerts.

{{ len .alerts }}

Devuelve:

1

Plantillas de notificación preconfiguradas

Plantilla de notificación por correo electrónico

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

Contenido de la plantilla

Descripción

Alert name: {{ .commonLabels.alertname }}

El nombre de la alerta. De manera predeterminada, una política de notificación agrupa las alertas por la etiqueta alertname, por lo que todos los eventos de una notificación tienen el mismo nombre de alerta.

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

Si un evento contiene la etiqueta clustername, el valor de dicha etiqueta se representará como el campo de nombre del clúster.

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

Si el tipo del objeto implicado es app, se incluye el nombre de la aplicación.

Notification policy: {{ .dispatchRuleName }}

El nombre de la política de notificación coincidente.

Alert time: {{ .startTime }}

La hora a la que se activó la alerta por primera vez.

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

Itera sobre la lista de eventos de alerta para representar el valor de message. Si un evento contiene el campo generatorUrl, representa el valor de dicho campo como la URL de detalles del evento.

Nota

La plantilla preconfigurada utiliza la sintaxis HTML <a></a> para representar el enlace.

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

El bloque {{ if .newIncidentIn }} (New event) {{end}} identifica la notificación al mostrar New event cuando se agrega un evento nuevo a un grupo de alertas.

Ejemplo de salida representada:

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%

Plantillas de notificación por SMS y llamada telefónica

Estas plantillas son similares a la de correo electrónico, pero omiten la URL de detalles.

{{ .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 }}
            

Plantilla de notificación de 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 salida se representa en Markdown. La compatibilidad con cada función varía según el chatbot.

  • Cita en bloque: >

  • Color de fuente:

    <font color='#ff0000'>root cause</font>
    Nota

    Solo DingTalk y WeCom admiten cambios de color de fuente. Lark no es compatible con esta función.

  • Saltos de línea:

    • DingTalk: agregue dos saltos de línea en la plantilla.

    • Lark: agregue un salto de línea en la plantilla.

    • WeCom: agregue un salto de línea en la plantilla.

Plantilla de 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 }}"
}

Ejemplo de salida representada:

{
  "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%"
}

Referencia de variables

La siguiente tabla describe las variables disponibles en las plantillas de notificación.

Parámetro

Descripción

alarmId

El ID de la alerta original.

alerts

Una lista de los eventos de alerta originales. Tipo: List<Alert>.

alerts.annotations

Las anotaciones de una alerta original. Tipo: map de cadenas.

alerts.endsAt

La hora de resolución de la alerta original.

Hora de resolución = Hora de activación + Duración hasta la resolución

alerts.startsAt

La hora de activación de la alerta original.

alerts.fingerprint

La huella digital de la alerta original. Las alertas con el mismo conjunto de etiquetas tienen la misma huella digital.

alerts.labels

Las etiquetas de la alerta original.

alerts.status

El estado de una alerta original:

  • firing: la alerta está activa.

  • resolved: la alerta se resolvió.

commonAnnotations

Un conjunto de anotaciones comunes a todas las alertas del grupo.

commonLabels

Un conjunto de etiquetas comunes a todas las alertas del grupo.

groupLabels

Las etiquetas utilizadas para agrupar las alertas, tal como se definen en la política de notificación.

status

El estado del grupo de alertas:

  • firing: la alerta está activa.

  • resolved: la alerta se resolvió.

startTime

La hora a la que se creó el grupo de alertas.

endTime

La hora a la que se resolvió el grupo de alertas. Corresponde a la hora de resolución de la última alerta original del grupo.

level

El nivel de gravedad de la notificación. Los valores se asignan a niveles de prioridad:

  • critical: P1

  • error: P2

  • warning: P3

  • page: P4

dispatchRuleName

El nombre de la política de notificación coincidente.