

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar modelos de mensagens
<a name="alert-message-templates"></a>

****  
Este tópico de documentação foi desenvolvido para espaços de trabalho do Grafana compatíveis com o **Grafana versão 8.x**.  
Para espaços de trabalho do Grafana que suportam a versão 12.x do Grafana, consulte. [Trabalhando na versão 12 do Grafana](using-grafana-v12.md)  
Para espaços de trabalho do Grafana compatíveis com o Grafana versão 10.x, consulte [Trabalhar no Grafana versão 10](using-grafana-v10.md).  
Para espaços de trabalho do Grafana compatíveis com o Grafana versão 9.x, consulte [Trabalhar no Grafana versão 9](using-grafana-v9.md).

As notificações enviadas via [Trabalhar com pontos de contato](alert-contact-points.md) são criadas usando *modelos de mensagens*. Os modelos padrão do Grafana são baseados no [sistema de modelos do Go](https://golang.org/pkg/text/template), em que alguns campos são avaliados como texto, enquanto outros são avaliados como HTML (o que pode afetar o escape).

Como a maioria dos campos de ponto de contato pode ser modelada, você pode criar modelos personalizados reutilizáveis e usá-los em vários pontos de contato. O tópico [Dados do modelo](#alert-template-data) lista as variáveis que estão disponíveis para modelos.

**Usar modelos**

Os modelos são usados para criar uma mensagem. Por exemplo, com uma mensagem de alerta do Slack, você pode definir o título e o corpo no ponto de contato. O exemplo a seguir mostra como usar modelos padrão para criar um título que contém uma contagem de alertas disparados e resolvidos e um corpo que lista os alertas e seus status.
+ **Título**:

  ```
  {{ len .Alerts.Firing }} firing, {{ len .Alerts.Resolved }} resolved
  ```
+ **Corpo do texto**: 

  ```
  {{ range .Alerts }}{{ .Status }}: {{ .Labels.alertname }}
  {{end }}
  ```

Você pode criar seus próprios modelos personalizados, como no exemplo a seguir.
+ **Título**:

  ```
  {{ template "slack.default.title" .}}
  ```
+ **Corpo do texto**: 

  ```
  {{ template "mymessage" .}}
  ```

Veja a seguir um modelo de exemplo.

```
{{ define "myalert" }}
  [{{.Status}}] {{ .Labels.alertname }}

  Labels:
  {{ range .Labels.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}

  {{ if gt (len .Annotations) 0 }}
  Annotations:
  {{ range .Annotations.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}
  {{ end }}

  {{ if gt (len .SilenceURL ) 0 }}
    Silence alert: {{ .SilenceURL }}
  {{ end }}
  {{ if gt (len .DashboardURL ) 0 }}
    Go to dashboard: {{ .DashboardURL }}
  {{ end }}
{{ end }}
```

Os procedimentos a seguir mostram como criar, editar e excluir modelos personalizados de mensagens.

**Para criar um modelo de mensagem**

1. No console do Grafana, no menu do Grafana, escolha o ícone de **Alertas** (sino) para abrir a página **Alertas**.

1. Escolha **Pontos de contato**.

1. No menu suspenso do **Alertmanager**, selecione a instância do Alertmanager para a qual você deseja criar um modelo de mensagem. O padrão é o Grafana Alertmanager.

1. Escolha **Adicionar modelo**.

1. Adicione um **Nome** descritivo.

1. Adicione o **Conteúdo** do modelo, por exemplo:

   ```
   {{ define "mymessage" }}
     {{ range .Alerts }}
       [{{ .Status }}] {{ range .Labels }} {{ .Name }}={{.Value }}{{end}}
     {{ end }}
   {{ end }}
   ```

   A tag `define` na seção Conteúdo atribui o nome do modelo. Essa tag é opcional e, quando omitida, o nome do modelo é derivado do campo **Nome**. Quando ambos são especificados, é uma prática recomendada mantê-los iguais.

1. Selecione **Salvar modelo**.

**nota**  
O HTML nos modelos de mensagens de alerta é renderizado como texto, com os caracteres de controle de escape. A renderização de HTML na notificação resultante não é compatível com o Grafana.

**Para editar um modelo de mensagem**

1. Na página **Alertas**, escolha **Pontos de contato** para abrir a lista de pontos de contato.

1. Na **tabela Modelo**, encontre o modelo que você deseja editar e escolha o ícone de **Editar** (caneta).

1. Faça suas alterações e escolha **Salvar modelo**.

**Para excluir um modelo de mensagem**

1. Na página **Alertas**, escolha **Pontos de contato** para abrir a lista de pontos de contato.

1. Na **tabela Modelo**, encontre o modelo que você deseja remover e escolha o ícone de **Excluir** (lixeira).

1. Escolha **Sim, excluir** para excluir o modelo.

**Modelos aninhados**

Você pode incorporar modelos em outros modelos.

Por exemplo, você pode definir um fragmento de modelo usando a palavra-chave `define`:

```
{{ define "mytemplate" }}
  {{ len .Alerts.Firing }} firing. {{ len .Alerts.Resolved }} resolved.
{{ end }}
```

Você pode então incorporar modelos personalizados nesse fragmento usando a palavra-chave `template`. Por exemplo:

```
Alert summary:
{{ template "mytemplate" . }}
```

Você pode usar as opções a seguir de modelo incorporado para incorporar modelos personalizados.


| Nome | Observações | 
| --- | --- | 
| `default.title` | Exibe informações de status de alto nível. | 
| `default.message` | Fornece um resumo formatado dos alertas disparados e resolvidos. | 

**Exemplos de modelos personalizados**

Aqui estão alguns exemplos de como usar modelos personalizados.

Modelo para renderizar um único alerta:

```
{{ define "myalert" }}
  [{{.Status}}] {{ .Labels.alertname }}

  Labels:
  {{ range .Labels.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}

  {{ if gt (len .Annotations) 0 }}
  Annotations:
  {{ range .Annotations.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}
  {{ end }}

  {{ if gt (len .SilenceURL ) 0 }}
    Silence alert: {{ .SilenceURL }}
  {{ end }}
  {{ if gt (len .DashboardURL ) 0 }}
    Go to dashboard: {{ .DashboardURL }}
  {{ end }}
{{ end }}
```

Modelo para renderizar toda a mensagem de notificação:

```
{{ define "mymessage" }}
  {{ if gt (len .Alerts.Firing) 0 }}
    {{ len .Alerts.Firing }} firing:
    {{ range .Alerts.Firing }} {{ template "myalert" .}} {{ end }}
  {{ end }}
  {{ if gt (len .Alerts.Resolved) 0 }}
    {{ len .Alerts.Resolved }} resolved:
    {{ range .Alerts.Resolved }} {{ template "myalert" .}} {{ end }}
  {{ end }}
{{ end }}
```

## Dados do modelo
<a name="alert-template-data"></a>

Os dados a seguir são passados para os modelos de mensagem.


| Nome | Tipo | Observações | 
| --- | --- | --- | 
| `Receiver` | string | Nome do ponto de contato para o qual a notificação está sendo enviada. | 
| `Status` | string | disparado se pelo menos um alerta estiver sendo disparado, caso contrário, resolvido. | 
| `Alerts` | Alerta | Lista de objetos de alerta incluídos nessa notificação (veja abaixo). | 
| `GroupLabels` | KeyValue | Rótulos pelos quais esses alertas foram agrupados. | 
| `CommonLabels` | KeyValue | Rótulos comuns a todos os alertas incluídos nessa notificação. | 
| `CommonAnnotations` | KeyValue | Anotações comuns a todos os alertas incluídos nessa notificação. | 
| `ExternalURL` | string | Link de retorno para o Grafana que enviou a notificação. Se estiver usando o Alertmanager externo, volte para ele. | 

O tipo `Alerts` expõe duas funções para filtrar os alertas retornados.
+ `Alerts.Firing`: retorna uma lista de alertas disparados.
+ `Alerts.Resolved`: retorna uma lista de alertas resolvidos.

**Alerta (tipo)**

O tipo de alerta contém os dados a seguir.


| Nome | Tipo | Observações | 
| --- | --- | --- | 
| Status | string | `firing` ou `resolved`. | 
| Rótulos | KeyValue | Um conjunto de rótulos anexados ao alerta. | 
| Anotações | KeyValue | Um conjunto de anotações anexadas ao alerta. | 
| StartsAt | time.Time | Hora em que o alerta começou a disparar. | 
| EndsAt | time.Time | Definido somente se a hora de término de um alerta for conhecida. Caso contrário, defina um período de tempo limite configurável a partir do momento em que o último alerta foi recebido. | 
| GeneratorURL | string | Um link de retorno para o Grafana ou para o Alertmanager externo. | 
| SilenceURL | string | Link para a funcionalidade de silêncio por do Grafana com rótulos para esse alerta pré-preenchidos. Somente para alertas gerenciados pelo Grafana. | 
| DashboardURL | string | Link para o dashboard do Grafana, se a regra de alerta pertencer a um. Somente para alertas gerenciados pelo Grafana. | 
| PanelURL | string | Link para o painel do dashboard do Grafana, se a regra de alerta pertencer a um. Somente para alertas gerenciados pelo Grafana. | 
| Impressão digital | string | Impressão digital que pode ser usada para identificar o alerta. | 
| ValueString | string | Uma string que contém os rótulos e o valor de cada expressão reduzida no alerta. | 

**KeyValue tipo**

O `KeyValue` tipo é um conjunto de pares de key/value strings que representam rótulos e anotações.

Além do acesso direto aos dados armazenados como um `KeyValue`, também existem métodos para classificar, remover e transformar os dados.


| Nome | Argumentos | Retornos | Observações | 
| --- | --- | --- | --- | 
| SortedPairs |  | Lista ordenada de pares de strings de chave e valor |  | 
| Remover | []string | KeyValue | Retorna uma cópia do Key/Value mapa sem as chaves fornecidas. | 
| Nomes |  | []string | Lista de nomes de rótulos | 
| Valores |  | []string | Lista de valores de rótulos | 



## Funções de modelo
<a name="alert-template-functions"></a>

Ao usar funções de modelo, você pode processar rótulos e anotações para gerar notificações dinâmicas. As funções a seguir estão disponíveis.


| Nome | Tipo de argumento | Tipo de retorno | Description | 
| --- | --- | --- | --- | 
| `humanize` | número ou string | string | Converte um número em um formato mais legível, usando prefixos de métricas. | 
| `humanize1024` | número ou string | string | Como o humanize, mas usa 1024 como base em vez de 1000. | 
| `humanizeDuration` | número ou string | string | Converte uma duração em segundos em um formato mais legível. | 
| `humanizePercentage` | número ou string | string | Converte um valor de proporção em uma fração de 100. | 
| `humanizeTimestamp` | número ou string | string | Converte um carimbo de data e hora do Unix em segundos em um formato mais legível. | 
| `title` | string | string | strings.Title, coloca em maiúscula o primeiro caractere de cada palavra. | 
| `toUpper` | string | string | cordas. ToUpper, converte todos os caracteres em maiúsculas. | 
| `toLower` | string | string | cordas. ToLower, converte todos os caracteres em minúsculas. | 
| `match` | padrão, texto | booleano | regexp. MatchString Testes para uma correspondência de expressão regular não ancorada. | 
| `reReplaceAll` | padrão, substituição, texto | string | Regexp.ReplaceAllString Substituição Regexp, não ancorada. | 
| `graphLink` | string: objeto JSON com os campos `expr` e `datasource` | string | Retorna o caminho para a visualização gráfica no Explore para a expressão e a fonte de dados fornecidas. | 
| `tableLink` | string: objeto JSON com os campos `expr` e `datasource` | string | Retorna o caminho para a visualização tabular no Explore para a expressão e a fonte de dados fornecidas. | 
| `args` | []interface{} | map[string]interface{} | Converte uma lista de objetos em um mapa com chaves, por exemplo, arg0, arg1. Use essa função para passar vários argumentos para modelos. | 
| `externalURL` | nothing | string | Retorna uma string representando o URL externo. | 
| `pathPrefix` | nothing | string | Retorna o caminho do URL externo. | 

A tabela a seguir mostra exemplos do uso de cada função.


| Função | TemplateString | Input | Esperados | 
| --- | --- | --- | --- | 
| humanize | { humanize $value } | 1234567,0 | 1,235M | 
| humanize1024 | { humanize1024 $value } | 1048576,0 | 1Mi | 
| humanizeDuration | { humanizeDuration $value } | 899,99 | 14m 59s | 
| humanizePercentage | { humanizePercentage $value } | 0,1234567 | 12,35% | 
| humanizeTimestamp | { humanizeTimestamp $value } | 1435065584.128 | 2015-06-23 13:19:44.128 \+0000 UTC | 
| título | { $value \| title } | aa bB CC | Aa Bb Cc | 
| toUpper | { $value \| toUpper } | aa bB CC | AA BB CC | 
| toLower | { $value \| toLower } | aa bB CC | aa bb cc | 
| match | { match "a\+" $labels.instance } | aa | true | 
| re ReplaceAll | {{re ReplaceAll “localhost :( .\*)” “meu.domínio: $1" $labels.instance}} | localhost:3000 | my.domain:3000 | 
| graphLink | {{ graphLink "{\\"expr\\": \\"up\\", \\"datasource\\": \\"gdev-prometheus\\"}" }} |  | /explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}] | 
| tableLink | {{ tableLink "{\\"expr\\":\\"up\\", \\"datasource\\":\\"gdev-prometheus\\"}" }} |  | /explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}] | 
| args | {{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}} |  | 1 2 | 
| externalURL | { externalURL } |  | http://localhost/path/prefix | 
| pathPrefix | { pathPrefix } |  | /path/prefix | 