Todos os produtos
Search
Central de documentação

Simple Log Service:Sintaxe para novos modelos de alerta

Última atualização: Jul 03, 2026

O Simple Log Service oferece suporte a duas versões de sintaxe de modelo de alerta: nova e original. A nova sintaxe utiliza uma abordagem semelhante à do Python para permitir renderização personalizada mais flexível e avançada das notificações de alerta.

Visão geral

Em comparação com os modelos originais, os novos modelos de alerta utilizam sintaxe semelhante à do Python para oferecer lógica de renderização personalizada mais flexível, além de conteúdo e estilos de notificação otimizados, como escape de caracteres Markdown. As principais vantagens incluem:

  • Renderização dinâmica baseada nos níveis de severidade do alerta, com uso de fontes coloridas para distinguir cada nível.

  • Renderização iterativa dos resultados da consulta de alerta em lista ou tabela no e-mail.

  • Funções integradas para codificação e decodificação Base64 e operações aritméticas em valores numéricos.

A nova sintaxe é totalmente compatível com a original, mas usa tipos, valores e estilos diferentes para os atributos de alerta. Recomendamos usar apenas a nova sintaxe e evitar misturar as duas.

Início rápido

Os exemplos a seguir mostram o conteúdo da notificação definido nos novos modelos de alerta.

  • Conteúdo do alerta:

    {
        "alert_id": "test-alert",
        "alert_name": "PV/UV Alert",
        "project": "project-1",
        "status": "firing",
        "severity": 6,
        "labels": {
            "app": "nginx",
            "host": "host-1"
        },
        "results": [
            {
                "project": "project-1",
                "logstore": "logstore-1",
                "query": "* | select count(*) as pv"
            },
            {
                "project": "project-2",
                "logstore": "logstore-2",
                "query": "* | select count(distinct user_id) as uv"
            }
        ]
    }
  • Configuração do modelo de alerta:

    - Alert ID: {{ alert.alert_id }}
    - Alert Name: {{ alert.alert_name }}
    - Project: {{ alert.project }}
    - Status: {% if alert.status == "firing" %}FIRING{% else %}RESOLVED{% endif %}
    - Labels:
    {%- for key, val in alert.labels.items() %}
        - {{ key }}: {{ val }}
    {%- endfor %}
    - Query: {{ alert.results[0].query }}
  • Resultado da saída:

    - Alert ID: test-alert
    - Alert Name: PV/UV Alert
    - Project: project-1
    - Status: FIRING
    - Labels:
        - app: nginx
        - host: host-1
    - Query: * | select count(*) as pv

Sintaxe básica

Data types

A tabela a seguir descreve os tipos de dados compatíveis com a sintaxe semelhante à do Python.

Tipo de dado

Descrição

Number

Os números compatíveis incluem inteiros e pontos flutuantes. Exemplos: 3 e -1.

String

Coloque a string entre aspas simples ('') ou duplas (""). Exemplos: "foo" e 'bar'.

Se a string contiver caracteres especiais, use barra invertida (\) para escapá-los. Por exemplo, \foo deve ser escapado como "\\foo".

Boolean

Os valores booleanos compatíveis são True e False.

Null

None.

List

Uma lista pode ser chamada de array ou slice em outras linguagens de programação. Exemplo: ['foo', 'bar'].

Dictionary

Um dicionário pode ser chamado de objeto em outras linguagens de programação. Exemplo: {'foo': 'bar'}.

Delimiters

Delimitador

Cenário de uso

Exemplo

{{ }}

Marca o início e o fim de uma variável ou expressão.

  • Número: {{ 123 }}

  • String: {{ "abc" }} or {{ 'xyz' }}

    Coloque a string entre aspas duplas ("") ou simples ('').

  • Variável: {{ alert.alert_name }}

  • Expressão: {{ alert.project + '/' + alert.alert_id }}

{% %}

Marca o início e o fim de uma instrução.

{% if alert.status == 'firing' %}FIRING{% else %}RESOLVED{% endif %}

{# #}

Marca o início e o fim de um comentário. Comentários não aparecem nas notificações de alerta.

{# this is a comment #}

Removal of empty strings

Por padrão, o Simple Log Service ignora espaços entre um delimitador e a expressão interna. Por exemplo, tanto {{ 23 }} < {{ 45 }} quanto {{23}} < {{45}} são renderizados como 23 < 45. No entanto, caracteres de espaço em branco (espaços, tabulações e quebras de linha) fora dos delimitadores são preservados. Por exemplo, {{ 23 }} < {{ 45 }} é renderizado como 23 < 45, e não como 23<45.

Para remover espaços em branco indesejados à esquerda ou à direita de um delimitador, adicione um hífen (-) ao lado dele. Por exemplo, {{ 23 -}} < {{- 45 }} é renderizado como 23<45.

  • {{-, {{%- e {#- removem todos os espaços em branco à esquerda do delimitador.

  • -}}, -%} e -%} removem todos os espaços em branco à direita do delimitador.

Importante
  • Não insira espaços entre o hífen (-) e o delimitador. Por exemplo, o hífen em {{- 3 }} é válido e renderiza o número como 3. Porém, o hífen em {{ - 3 }} é tratado como sinal de menos e renderiza o número como -3.

  • O hífen afeta apenas os espaços em branco fora dos delimitadores, não o conteúdo interno. Por exemplo, {{ "hello " }} {{- "world"}} é renderizado como hello world.

Conditional statements

Instruções condicionais avaliam valores de parâmetros e expressões lógicas para controlar a renderização.

  • Se a cláusula if for seguida por uma constante ou variável, ela será avaliada como verdadeira ou falsa. O valor booleano false, o número 0, a string vazia "", null, o array vazio [] e o objeto vazio {} são avaliados como falso. Todos os outros valores são avaliados como verdadeiro.

  • Caso a cláusula if seja seguida por uma expressão lógica, o resultado da expressão é avaliado como verdadeiro ou falso. Por exemplo, {{ if alert.severity >= 8 }} verifique se a severidade do alerta é 8 ou superior.

A tabela a seguir descreve os fluxos condicionais compatíveis.

Fluxo de controle

Exemplo

if

{% if alert.severity >= 8 %}
Critical alert
{% endif %}

if-else

{% if alert.severity >= 8 %}
Critical alert
{% else %}
Normal alert
{% endif %}

if-elif

{% if alert.severity >= 8 %}
Critical alert
{% elif alert.severity >= 4 %}
Normal alert
{% endif %}

if-elif-else

{% if alert.severity >= 8 %}
Critical alert
{% elif alert.severity >= 4 %}
Normal alert
{% else %}
Notification
{% endif %}

Instrução aninhada

{% if alert.severity >= 8 %}
Critical alert
{% else %}
{% if alert.severity >= 4 %}
Normal alert
{% else %}
Notification
{% endif %}
{% endif %}

Iterations

Instruções de loop iteram sobre arrays e objetos. A tabela a seguir descreve as instruções de loop compatíveis.

Instrução de loop

Exemplo

Instruções de loop em arrays

{% for result in alert.results %}
{{ result }}
{% endfor %}

Instruções de loop com subscritos em arrays

A função enumerate itera sobre subscritos de array. Para obter mais informações sobre a função enumerate, consulte Funções integradas em modelos de alerta.

{% for index, result in enumerate(alert.results) %}
{{ index }}: {{ result }}
{% endfor %}

Os subscritos começam em 0 por padrão. Use o parâmetro start na função enumerate para especificar um subscrito inicial personalizado. Exemplo:

{% for index, result in enumerate(alert.results, start=1) %}
{{ index }}: {{ result }}
{% endfor %}

Instruções de loop em objetos

A função items() converte um objeto em um array de pares chave-valor no formato Key:Value para iteração.

{% for key, val in alert.labels.items() %}
    {{ key }}: {{ val }}
    {% endfor %}

Instruções aninhadas

{% for result in alert.fire_results %}
{% for key, val in result.items() %}
{{ key }}: {{ val }}
{% endfor %}
{% endfor %}

Escape characters

Para evitar que o Simple Log Service analise strings de caracteres especiais como {{, escape-as. O exemplo a seguir mantém todo o conteúdo entre {% raw %} e {% endraw %} exatamente como está:

  • Configuração do modelo de alerta

    {% raw %}
    {% for result in alert.results %}
    {{ result }} {% endfor %} {% endraw %}
  • Resultado

    {% for result in alert.results %}
    {{ result }}
    {% endfor %}

Functions

Os modelos de alerta fornecem funções integradas para configurar formatos e estilos de notificação de forma flexível. Para obter mais informações, consulte Funções de modelo integradas.

Por exemplo, para enviar notificações de alerta em formato JSON usando uma URL de webhook, utilize a seguinte configuração de modelo:

  • Instrução de consulta com quebra de linha incluída

    * |
    select count(*) as cnt
  • Comparação entre diferentes configurações de modelo de alerta

    Item

    Modelo de alerta

    Resultado

    Observações

    Nenhuma função utilizada

    {
        "query": "{{ alert.results[0].query }}"
    }
    {
        "query": "* |
    select count(*) as pv"
    }

    O formato JSON é inválido.

    Função quote utilizada

    {
        "query": {{ quote(alert.results[0].query) }}
    }
    {
        "query": "* | \nselect count(*) as pv"
    }

    O formato JSON é válido.

Filters

Quando funções aninhadas como {{ block(to_list(alert.labels)) }} tornam-se difíceis de ler, use filtros. Os filtros usam barras verticais (|) como operadores e suportam encadeamento de métodos. Especifique os filtros no formato {{ xxx | filiter1 | filter2 | ... }}. Por exemplo, {{ blockquote(to_list(alert.labels)) }} equivale a {{ alert.labels | to_list | blockquote }}.

Antes de usar filtros com uma função integrada, verifique se a função oferece suporte a eles. A maioria das funções integradas nos novos modelos de alerta suporta filtros. Para obter mais informações, consulte Funções de modelo integradas.

Importante
  • Se uma função integrada não tiver parâmetros, não será possível usar filtros.

  • Para funções integradas com um único parâmetro, recomendamos o uso da sintaxe de filtro. O formato é {{ arg | fn }}. Por exemplo, {{ abs(-1) }} equivale a {{ -1 | abs }}.

  • Caso uma função integrada tenha vários parâmetros e todos, exceto o primeiro, possuam valores padrão, é possível usar filtros. Se precisar especificar valores para todos os parâmetros, recomendamos chamar a função diretamente em vez de usar filtros.

Operators

A tabela a seguir descreve os operadores compatíveis. Para obter mais informações sobre prioridades de operadores, consulte Precedência de operadores.

Categoria

Operador

Descrição

Operações aritméticas

+

Executa uma operação de adição.

-

Executa uma operação de subtração.

*

Executa uma operação de multiplicação.

/

Divisão. Retorna um número de ponto flutuante.

//

Divisão. Retorna um número inteiro.

%

Executa uma operação de módulo.

Operações comparativas

==

Avalia se um valor é igual a outro.

!=

Avalia se um valor é diferente de outro.

>

Avalia se um valor é maior que outro.

>=

Avalia se um valor é maior ou igual a outro.

<

Avalia se um valor é menor que outro.

<=

Avalia se um valor é menor ou igual a outro.

Operações lógicas

and

Especifica uma relação E (AND).

or

Especifica uma relação OU (OR).

not

Especifica uma relação NÃO (NOT).

Outras operações

in

Verifica se um valor está incluído em outro e retorna um valor booleano. Suporta arrays, objetos e strings.

  • Array: {{ 1 in [1, 2, 3] }}

  • Objeto: {{ "foo" in {"foo": "bar" } }}

  • String: {{ "ll" in "hello" }}

()

Especifica uma combinação de operações. Exemplo: {{ a > b and (a > c or b > c) }}.

Variáveis de alerta

Nos novos modelos de alerta, as variáveis de alerta usam o formato alert.xxx. Por exemplo, alert.project é uma variável de alerta válida. Para obter mais informações, consulte Variáveis em modelos de alerta.

Exemplos de configuração

  • Exemplo 1: Exibir informações de alerta com base no status do alerta.

    Quando um alerta é disparado, o status, o nível de severidade e o resultado são fornecidos. Quando um alerta é resolvido, apenas o status é fornecido.

    • A seguinte configuração de modelo não inclui funções:

      {% if alert.status == "firing" %}
      - Status: <font color="#E03C39">Firing</font>
      - Severity level: {{ alert.severity | format_severity }}
      - Results: {{ alert.results | to_json }}
      {% else %}
      - Status: <font color="#72C140">Cleared</font>
      {% endif %}
    • A seguinte configuração de modelo inclui funções:

      As funções format_status e format_severity simplificam a configuração do modelo:

      - Status: {{ alert.status | format_status }}
      {% if alert.status == "firing" %}
      - Severity level: {{ alert.severity | format_severity }}
      - Results: {{ alert.results | to_json }}
      {% endif %}
  • Exemplo 2: Exibir informações de alerta em formato estruturado.

    Os rótulos de alerta são convertidos em um array formatado em Markdown.

    • A seguinte configuração de modelo não inclui funções:

      - Project: {{ alert.project }}
      - Alert name: {{ alert.alert_name }}
      - Label:
      {%- for key, val in alert.labels.items() %}
      > - {{ key }}: {{ val }}
      {%- endfor %}
    • A seguinte configuração de modelo inclui funções:

      As funções to_list e blockquote simplificam a configuração do modelo.

      - Project: {{ alert.project }}
      - Alert name: {{ alert.alert_name }}
      - Label:
      {{ alert.labels | to_list | blockquote }}