Este tópico descreve a sintaxe das condições de disparo em regras de alerta.
Você pode usar variáveis para referenciar campos de log na condição de disparo de uma regra de alerta. Para avaliar a regra de alerta, o Simple Log Service executa consultas de log com base nas instruções de consulta especificadas na regra de alerta e verifica se os resultados atendem à condição de disparo. Se a condição de disparo for atendida, um alerta será acionado.
Limites
Esta seção lista os limites das condições de disparo:
Números negativos devem ser colocados entre parênteses (), por exemplo, x+(-100)<100.
Valores numéricos são convertidos em números de ponto flutuante de 64 bits. Portanto, o resultado da avaliação de uma regra de alerta pode ser impreciso quando uma comparação está envolvida.
Um nome de variável pode conter apenas letras e dígitos e deve começar com uma letra.
Uma condição de disparo deve ter de 1 a 128 caracteres.
Se uma regra de alerta estiver associada a vários gráficos, várias consultas serão executadas durante cada avaliação da regra de alerta. Assim, vários conjuntos de entradas de log são retornados como resultados da consulta. O Simple Log Service seleciona uma entrada de log de cada conjunto e verifica se a combinação das entradas selecionadas atende à condição de disparo. Para cada avaliação de regra de alerta, o Simple Log Service verifica no máximo 1.000 combinações de entradas de log. Um alerta será acionado se uma das combinações atender à condição de disparo.
Uma regra de alerta pode ser associada a no máximo três gráficos ou instruções de consulta.
Se o resultado de uma condição de disparo for true, a condição de disparo foi atendida. Nesse caso, um alerta será acionado. Por exemplo, se a condição de disparo for 100+100, o resultado será 200 e nenhum alerta será acionado.
O Simple Log Service reserva duas palavras: true e false. Também reserva dois caracteres especiais: cifrão ($) e ponto (.). Essas palavras e caracteres especiais não podem ser usados como variáveis.
Sintaxe
A tabela a seguir lista a sintaxe usada nas condições de disparo.
Tipo de sintaxe | Operação | Descrição |
Operadores aritméticos | Compatível com os operadores de adição (+), subtração (-), multiplicação (*), divisão (/) e módulo (%).
|
|
Operadores de comparação | Compatível com oito operadores de comparação: maior que (>), maior ou igual a (>=), menor que (<), menor ou igual a (<=), igual a (==), diferente de (!=), correspondência (=~) e não correspondência (!~). null
|
|
Operadores lógicos | Compatível com os operadores AND (&&) e OR (||). |
|
Operador NOT | Compatível com o operador NOT (!). | !(a < 1 && a > 100) |
Constantes numéricas | Compatível com constantes numéricas. O Simple Log Service converte constantes numéricas em números de ponto flutuante de 64 bits. | x > 100 |
Constantes de string | Compatível com constantes de string no formato 'String', por exemplo, 'string'. | foo == 'string' |
Constantes booleanas | Compatível com true e false. | (x > 100) == true |
Parênteses | Compatível com parênteses (). Você pode usar parênteses para substituir a ordem de precedência padrão e forçar o Simple Log Service a avaliar a parte delimitada de uma condição de disparo antes da parte não delimitada. | x * (y + 100) > 100 |
Função contains | Compatível com a função contains. A função contains verifica se uma string contém uma substring. Por exemplo, contains(foo, 'hello') retorna true se a string referenciada pela variável foo incluir a substring hello. | contains(foo, 'hello') |
Condições de disparo em regras de alerta associadas a vários gráficos
Sintaxe
Uma regra de alerta pode ser associada a várias instruções de consulta. Se você quiser usar uma variável na condição de disparo para referenciar um campo do resultado de uma instrução de consulta, prefixe a variável com o número sequencial da instrução de consulta no formato $N.fieldname. O número sequencial de uma instrução de consulta é o mesmo do gráfico que plota o resultado da instrução de consulta. Para mais informações, consulte Como posso ver o número sequencial de um gráfico? O intervalo de valores de N é de 0 a 2, pois cada regra de alerta está associada a no máximo três instruções de consulta. Por exemplo, $0.foo referencia o valor do campo foo do resultado da primeira instrução de consulta. Se uma regra de alerta estiver associada a apenas uma instrução de consulta, não é necessário especificar o prefixo na condição de disparo.
Avaliação
Durante a avaliação de uma regra de alerta, se várias consultas forem executadas e vários conjuntos de entradas de log forem retornados como resultados, o Simple Log Service usa apenas os resultados cujos campos são referenciados na condição de disparo. Por exemplo, três conjuntos de entradas de log são retornados. O número de entradas de log no primeiro conjunto é z, no segundo conjunto é y e no terceiro conjunto é z. Se a condição de disparo for $0.foo > 100 && $1.bar < 100, o Simple Log Service usa apenas o primeiro e o segundo conjunto durante a avaliação da regra de alerta. O Simple Log Service seleciona uma entrada de log de cada um dos dois conjuntos e verifica se a combinação das entradas selecionadas atende à condição de disparo. O Simple Log Service verifica x × y combinações. Se o resultado de x × y exceder 1.000, o Simple Log Service verificará apenas 1.000 combinações. Se uma das combinações atender à condição de disparo, o Simple Log Service acionará um alerta.
Implementação de operadores
O Simple Log Service converte todos os valores numéricos em números de ponto flutuante de 64 bits.
Uma constante de string deve ser delimitada por aspas simples ('') ou aspas duplas (""), por exemplo, 'string' ou "string".
Os valores booleanos incluem true e false.
Operador | Implementação | ||
Operação entre variáveis | Operação entre uma constante não string e uma variável | Operação entre uma constante de string e uma variável | |
Operadores aritméticos: adição (+), subtração (-), multiplicação (*), divisão (/) e módulo (%) | Antes de aplicar um operador aritmético, os operandos esquerdo e direito são convertidos em números de ponto flutuante de 64 bits. | Não compatível. | |
Operadores de comparação: maior que (>), maior ou igual a (>=), menor que (<), menor ou igual a (<=), igual a (==) e diferente de (!=) | O Simple Log Service usa as seguintes regras de comparação, classificadas por ordem de precedência:
| Os operandos esquerdo e direito são convertidos em números de ponto flutuante de 64 bits e comparados com base na ordem numérica. | Os operandos esquerdo e direito são convertidos em strings e comparados com base na ordem lexicográfica. |
Operadores de expressão regular: correspondência de regex (=~) e não correspondência de regex (!~) | Antes de aplicar um operador de correspondência, os operandos esquerdo e direito são convertidos em strings. | Não compatível. | Antes de aplicar um operador de correspondência, os operandos esquerdo e direito são convertidos em strings. |
Operadores lógicos: AND (&&) e OR (||) | Um operador lógico não pode ser aplicado a campos de log. Os operandos esquerdo e direito devem ser expressões condicionais. O resultado de um operador lógico é do tipo de dado booleano. | ||
Operador NOT (!) | O operador NOT não pode ser aplicado a campos de log. O operando direito deve ser uma expressão condicional. O resultado do operador NOT é do tipo de dado booleano. | ||
Função contains | Antes de executar a função contains, os parâmetros de entrada são convertidos em strings. | Não compatível. | Antes de executar a função contains, os parâmetros de entrada são convertidos em strings. |
Parênteses () | Os parênteses são usados para substituir a ordem de precedência padrão e forçar o Simple Log Service a avaliar a parte delimitada de uma condição de disparo antes da parte não delimitada. | ||
Exemplos
-
Exemplo 1: Acionar um alerta se a taxa de sucesso de tarefas cair abaixo de 90% e a latência exceder 60 segundos em um intervalo de tempo de 1 dia (relativo). Defina o nome do alerta como Alerta de latência de tarefas e associe dois gráficos: o Gráfico 0 é chamado Taxa de sucesso de tarefas, com a instrução de consulta
* | select round(sum(case when code = 200 then 1 else 0 end) * 100.0 / count(*), 2) as successe um intervalo de tempo de consulta de 1 dia (relativo); o Gráfico 1 é chamado Status de latência, com a instrução de consultadelay > 0 | select time_series(__time__, '10m', '%m-%d %H:%i', '0') as time, round(avg(delay)/100, 3) as delay group by time order by time limit 14400e um intervalo de tempo de consulta de 1 dia (relativo). Defina o intervalo de avaliação como um intervalo fixo de 15 minutos e defina a condição de disparo como$0.success < 90 && $1.delay > 60. -
Exemplo 2: Acionar um alerta se o código de status 500 ocorrer 10 vezes em 15 minutos. Defina o nome do alerta como Alerta de código de status 500. Associe o Gráfico 0, chamado Distribuição de status de resposta, com a instrução de consulta
* | SELECT status, COUNT(*) as total GROUP BY statuse um intervalo de tempo de consulta de 15 minutos (relativo). Defina o intervalo de avaliação como um intervalo fixo de 15 minutos e defina a condição de disparo como$0.status == 500 && $0.total > 10. -
Exemplo 3: Acionar um alerta se a taxa de processamento cair abaixo de 1.000 entradas por segundo em 1 hora. Defina o nome do alerta como Alerta de baixa taxa de processamento de dados. Associe o Gráfico 0, chamado Taxa de processamento (linhas/s), com a instrução de consulta
__topic__: __etl-log-status__ AND __tag__: __schedule_type__: Resident and event_id: "shard_worker:metrics:checkpoint" | select time_series(__time__, '1m', '%y/%m/%d %H:%i', '0') as dt, round(sum("progress.accept") / 60.0, 3) as "accept", round(sum("progress.dropped") / 60.0, 3) as "dropped", round(sum("progress.delivered") / 60.0, 3) as "delivered", round(sum("progress.failed") / 60.0, 3) as "failed" group by dt order by dt asc limit 10000e um intervalo de tempo de consulta de 1 hora (relativo). Defina o intervalo de avaliação como um intervalo fixo de 1 hora e defina a condição de disparo como$0.accept < 1000.