Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Configure modelos de notificação e modelos de webhook

Última atualização: Sep 06, 2026

Quando uma regra de alerta em uma política de notificação é acionada, o ARMS envia notificações de alerta por canais como DingTalk, Lark, WeCom, SMS, telefone, e-mail e webhooks. O ARMS fornece modelos de notificação pré-configurados para cada método. Caso os modelos padrão não atendam às suas necessidades, personalize-os. Este tópico explica a sintaxe de modelos Go para personalização, descreve os modelos pré-configurados e lista as variáveis disponíveis.

Sintaxe de modelos Go

Os modelos de notificação de alertas do ARMS usam a sintaxe Go template para preencher o modelo com dados de um contexto fornecido.

Nota

Os parâmetros de alerta em um modelo de notificação consistem em múltiplos rótulos. Os rótulos permitem incluir parâmetros específicos nas notificações. Por exemplo, o rótulo alertname indica o nome do alerta.

Este tópico usa o código de exemplo a seguir para descrever a sintaxe comum de modelos 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"
},

O caractere .

Representa o objeto atual no escopo e permite acessar seus dados.

Exemplo 1: Obtenha todo o conteúdo do escopo de nível superior, que corresponde aos dados completos do contexto do código de exemplo.

{{ . }}

Retorna todo o conteúdo do código de exemplo.

Exemplo 2: Obtenha o campo level dos dados de contexto.

{{ .level }}

Retorno:

error

Exemplo 3: Obtenha o campo commonLabels.alertname dos dados de contexto.

{{ .commonLabels.alertname }}

Retorno:

Container memory usage exceeds 80%

Variáveis

Armazene dados passados ao modelo em variáveis acessíveis em todo o modelo. Por exemplo, em {{$context := .}}, a variável $context armazena os dados recebidos, acessíveis por meio de {{$context}}.

Exemplo 1: Atribua o nome do alerta a $alertname e gere a saída de $alertname.

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

Retorno:

Container memory usage exceeds 80%

Exemplo 2: Atribua o primeiro alerta da lista alerts a $alert0 e gere a saída de seu alertname.

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

Retorno:

Container memory usage exceeds 80%

A ação if/else

A ação if fornece lógica condicional. Se a condição for falsa, o bloco else opcional será executado. Valores como 0, nil ou string vazia são avaliados como false.

Exemplo 1: Se o valor do rótulo severity em um evento de alerta for warning, gere a saída P3 alert.

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

Retorno:

P3 alert

Exemplo 2: Se o valor do rótulo severity em um evento de alerta for critical, gere a saída P1 alert. Caso contrário, gere a saída P2 alert.

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

Retorno:

P2 alert

A ação for

A ação for executa um bloco de código repetidamente.

Exemplo 1: Itere pela lista alerts para obter o alertname de cada alerta.

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

Retorno:

Container memory usage exceeds 80%
 

A ação range

A ação range itera sobre uma estrutura de dados, como um slice ou map.

Exemplo 1: Itere sobre uma lista para obter o índice e o valor de cada elemento.

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

Retorno:

Index 0: Container memory usage exceeds 80% 

A função index

A função index acessa um elemento de um array, slice ou map.

Exemplo 1: Obtenha o primeiro elemento da lista alerts e atribua-o a $alert0.

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

Retorno:

Container memory usage exceeds 80%

Funções de comparação

As funções de comparação a seguir são comuns:

  • eq: Igual a

  • ne: Diferente de

  • lt: Menor que

  • le: Menor ou igual a

  • gt: Maior que

  • ge: Maior ou igual a

Exemplo: Se o valor do rótulo severity em commonLabels for igual a warning, gere a saída P3 alert.

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

Retorno:

P3 alert

Funções lógicas: and, or, not

Exemplo: Se o valor do rótulo severity em commonLabels for igual a warning ou warnning, gere a saída P3 alert.

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

Retorno:

P3 alert

Funções integradas comuns

printf: Formata uma string conforme um especificador de formato definido.

Exemplo: Gere a saída do value do primeiro alerta na lista alerts, formatado com duas casas decimais.

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

Retorno:

15.52

humanizePercentage: Formata um valor como porcentagem.

Exemplo: Converta a string "0.95332123123124" em uma porcentagem mais legível.

{{ "0.95332123123124" | humanizePercentage }}

Retorno:

95.33%

humanizeDate: Formata um timestamp em milissegundos como data. O formato da data é yyyy-MM-dd HH:mm:ss.

Exemplo: Converta o timestamp 1671074058234 em uma data.

{{ "1671074058234" | humanizeDate }}

Retorno:

2022-12-15 11:14:18

len: Retorna o comprimento de um array, slice, string ou map.

Exemplo: Obtenha o comprimento da lista alerts.

{{ len .alerts }}

Retorno:

1

Modelos de notificação pré-configurados

Modelo de notificação por 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 }}

Conteúdo do modelo

Descrição

Alert name: {{ .commonLabels.alertname }}

Nome do alerta. Por padrão, a política de notificação agrupa alertas pelo rótulo alertname; portanto, todos os eventos em uma notificação têm o mesmo nome.

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

Se um evento contiver o rótulo clustername, o valor desse rótulo será renderizado como o campo de nome do cluster.

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

Se o tipo do objeto envolvido for app, o nome da aplicação será incluído.

Notification policy: {{ .dispatchRuleName }}

Nome da política de notificação correspondente.

Alert time: {{ .startTime }}

Momento em que o alerta foi acionado pela primeira vez.

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

Itera sobre a lista de eventos de alerta para renderizar o valor de message. Se um evento contiver o campo generatorUrl, renderiza seu valor como a URL de detalhes do evento.

Nota

O modelo pré-configurado usa a sintaxe HTML <a></a> para renderizar o link.

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

O bloco {{ if .newIncidentIn }} (New event) {{end}} marca a notificação gerando a saída New event quando um novo evento é adicionado a um grupo de alertas.

Exemplo de saída renderizada:

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%

Modelos de notificação por SMS e telefone

Estes modelos são semelhantes ao modelo de e-mail, mas omitem a URL de detalhes.

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

Modelo de notificação por 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}}

A saída é renderizada em Markdown. O suporte a recursos varia conforme o chatbot.

  • Citação em bloco: >

  • Cor da fonte:

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

    Apenas DingTalk e WeCom suportam alterações na cor da fonte. O Lark não oferece esse suporte.

  • Quebras de linha:

    • DingTalk: Adicione duas novas linhas no modelo.

    • Lark: Adicione uma nova linha no modelo.

    • WeCom: Adicione uma nova linha no modelo.

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

Exemplo de saída renderizada:

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

Referência de variáveis

A tabela a seguir descreve as variáveis disponíveis nos modelos de notificação.

Parâmetro

Descrição

alarmId

ID do alerta original.

alerts

Lista dos eventos de alerta originais. Tipo: List<Alert>.

alerts.annotations

Anotações de um alerta original. Tipo: map de strings.

alerts.endsAt

Horário de resolução do alerta original.

Horário de resolução = Horário de acionamento + Duração até a resolução

alerts.startsAt

Horário de acionamento do alerta original.

alerts.fingerprint

Impressão digital do alerta original. Alertas com o mesmo conjunto de rótulos possuem a mesma impressão digital.

alerts.labels

Rótulos do alerta original.

alerts.status

Status de um alerta original:

  • firing: O alerta está ativo.

  • resolved: O alerta foi resolvido.

commonAnnotations

Conjunto de anotações comuns a todos os alertas do grupo.

commonLabels

Conjunto de rótulos comuns a todos os alertas do grupo.

groupLabels

Rótulos usados para agrupar os alertas, conforme definido na política de notificação.

status

Status do grupo de alertas:

  • firing: O alerta está ativo.

  • resolved: O alerta foi resolvido.

startTime

Horário de criação do grupo de alertas.

endTime

Horário de resolução do grupo de alertas. Corresponde ao horário de resolução do último alerta original no grupo.

level

Nível de severidade da notificação. Os valores correspondem aos níveis de prioridade:

  • critical: P1

  • error: P2

  • warning: P3

  • page: P4

dispatchRuleName

Nome da política de notificação correspondente.