Correlacione resultados de monitoramento em vários conjuntos de resultados de consulta usando operações de conjunto e configure alertas de ausência de dados para detectar interrupções na coleta.
Tempestividade do monitoramento
-
Funcionamento do monitoramento
O sistema de alertas executa periodicamente a instrução de consulta configurada com base na Check Frequency, processa os dados em um intervalo de tempo especificado e avalia os resultados em relação à condição de alerta. O alerta é acionado quando a condição é avaliada como verdadeira.
-
Análise de problemas de tempestividade
-
Latência de indexação de dados: existe um atraso entre a gravação dos dados no Simple Log Service e sua disponibilidade para consulta. Mesmo um atraso curto pode causar perda de dados.
Por exemplo, uma verificação de alerta é executada às 12:03:30. A consulta está configurada para um intervalo de tempo relativo do último minuto, e a Check Frequency está definida como um intervalo fixo de 1 minuto. Isso estabelece o intervalo de tempo da consulta como [12:02:30, 12:03:30). Uma entrada de log gravada às 12:03:29 pode não estar indexada e disponível para consulta até as 12:03:30, podendo ser ignorada pela consulta.
-
Precisão da consulta: quando logs com timestamps diferentes dentro do mesmo minuto são gravados em lote, o Simple Log Service pode indexar todo o lote usando o timestamp do log mais antigo.
Por exemplo, uma verificação de alerta é executada às 12:03:30 com um intervalo de tempo relativo de um minuto, ou seja, [12:02:30, 12:03:30). Suponha que várias entradas de log sejam gravadas em lote às 12:02:50, mas seus timestamps individuais sejam 12:02:20, 12:02:50 e assim por diante. Todo o lote pode ser indexado sob o timestamp 12:02:20. Como resultado, uma consulta que usa o intervalo de tempo [12:02:30, 12:03:30) não encontrará esses logs.
-
-
Recomendações para otimizar a tempestividade
-
Priorizando a precisão: siga estas recomendações se você precisar de alta precisão nos alertas, sem duplicatas ou perdas.
Para resolver a latência de indexação de dados: na caixa de diálogo Query Statistics, defina um Query Time Range relativo que termine ligeiramente no passado. Por exemplo, defina o Start At relativo para 70 segundos atrás e o End Time para 10 segundos atrás. Essa margem de 10 segundos ajuda a evitar a perda de dados causada por atrasos de indexação.
Para resolver imprecisões na consulta: na caixa de diálogo Query Time Range, alinhe seu Query Time Range a janelas de tempo fixas, como 1 Minute (Time Frame), 5 Minute (Time Frame) ou 1 Hour (Time Frame). Defina a Check Frequency para corresponder à janela de tempo selecionada, como 1 minuto, 5 minutos ou 1 hora.
-
Priorizando a tempestividade: siga estas recomendações se você precisar de alertas imediatos e puder tolerar a possibilidade de alertas duplicados.
Para resolver a latência de indexação de dados: na caixa de diálogo Query Statistics, em Query Time Range, mova o horário relativo de Start At mais para o passado, por exemplo, para 70 segundos atrás (relativo).
Para resolver imprecisões na consulta: na caixa de diálogo Query Statistics, garanta que o Query Time Range seja amplo o suficiente para cobrir o intervalo anterior, por exemplo, definindo-o como 90 segundos relativos e configurando a Check Frequency para 1 minuto.
-
Associação de resultados de consulta e análise
O sistema de alertas do Simple Log Service trata os resultados de consulta como conjuntos e oferece suporte ao monitoramento correlacionado entre múltiplos conjuntos.
Na página de configuração, cada consulta é identificada por um número (0, 1 ou 2) e inclui um editor de consultas e configurações de intervalo de tempo. Consultas adjacentes são vinculadas pela lista suspensa de set operations. Use os botões de ordenação para reorganizar ou excluir consultas. A opção Grouped Evaluation encontra-se na parte inferior.
O Simple Log Service suporta monitoramento correlacionado em até três conjuntos.
Por padrão, as primeiras 1.000 linhas dos resultados da consulta são usadas nas operações de conjunto. Se você usar três consultas e definir a set operation com um valor diferente de No Merge, apenas as primeiras 100 linhas de cada consulta serão utilizadas.
-
Ao utilizar três conjuntos, o sistema executa primeiro uma operação de conjunto nos dois primeiros conjuntos e, em seguida, realiza uma segunda operação entre esse resultado e o terceiro conjunto. Por exemplo:
Conjunto A LEFT JOIN Conjunto B LEFT JOIN Conjunto C: o sistema executa primeiro um LEFT JOIN entre o Conjunto A e o Conjunto B e, depois, une esse resultado ao Conjunto C usando outro LEFT JOIN.
Conjunto A JOIN Conjunto B INNER JOIN Conjunto C: o sistema executa primeiro um JOIN entre o Conjunto A e o Conjunto B e, depois, une esse resultado ao Conjunto C usando um INNER JOIN.
Conjunto A LEFT EXCLUDE JOIN Conjunto B No Merge Conjunto C: o sistema executa um LEFT EXCLUDE JOIN entre o Conjunto A e o Conjunto B, ignorando o Conjunto C.
A lista suspensa de set operations oferece as nove opções a seguir.
|
Set operations |
Ilustração |
Descrição |
|
|
Os dois conjuntos não são associados. O Conjunto A fornece os resultados da consulta, enquanto o Conjunto B serve apenas como source de variáveis para o modelo de notificação de alerta. |
|
|
Nenhuma |
Combina cada linha do Conjunto A com cada linha do Conjunto B. Esta operação é normalmente usada para filtrar dados para avaliação. |
|
|
|
Mescla dados do Conjunto B nas linhas correspondentes do Conjunto A, alinhando as linhas pelo nome do campo. |
|
|
|
Retorna apenas linhas do Conjunto A que possuem uma linha correspondente no Conjunto B. Isso efetivamente usa o Conjunto B como uma lista de permissões para o Conjunto A. |
|
|
|
Enriquece o Conjunto A com dados correspondentes do Conjunto B. Neste caso, o Conjunto B atua como uma tabela de dimensões para o Conjunto A. |
|
|
|
Enriquece o Conjunto B com dados correspondentes do Conjunto A. Neste caso, o Conjunto A atua como uma tabela de dimensões para o Conjunto B. |
|
|
|
Mescla todas as linhas do Conjunto A e do Conjunto B, enriquecendo as linhas correspondentes com dados do outro conjunto. |
|
|
|
Retorna apenas linhas do Conjunto A que não têm correspondência no Conjunto B. Isso efetivamente usa o Conjunto B como uma lista de bloqueios para o Conjunto A. |
|
|
|
Retorna apenas linhas do Conjunto B que não têm correspondência no Conjunto A. Isso efetivamente usa o Conjunto A como uma lista de bloqueios para o Conjunto B. |
No merge
-
Requisito
Monitore logs de acesso do NGINX. Acione um alerta se o número de erros 5xx exceder 500 em um período de 15 minutos. O alerta deve listar os hosts específicos que retornaram erros.
A configuração é a seguinte: a consulta para Query and Statistics 0 é
status > 500 | select count(1) as cnt, e a set operation está definida como No merge. A consulta para Query and Statistics 1 éstatus > 500 | select host, count(1) as pv group by host order by pv desc limit 5. A group evaluation está definida como No Grouping, e a trigger condition está definida como has data, com a condiçãocnt > 500.-
Resultado
-
Resultados da Query and Statistics 0
Conta o número de erros 5xx dentro de um período de 15 minutos.
cnt
1234
-
Resultados da Query and Statistics 1
Identifica os 5 principais hosts com o maior número de erros 5xx dentro de um período de 15 minutos e suas respectivas contagens de erros.
host
pv
host1
60
host2
55
host3
47
host4
45
host5
30
-
Resultado da operação de conjunto
Quando a set operation está definida como No merge, a operação de conjunto retorna o resultado da Query and Statistics 0.
-
CROSS JOIN
-
Exemplo 1
-
Requisito
Monitore logs de acesso do Object Storage Service (OSS) e do Server Load Balancer (SLB). Acione um alerta se a contagem combinada de erros 4xx do OSS e erros 5xx do SLB exceder 1.000 em um período de 15 minutos.
Configuração: a consulta para Query Statement 0 é
status >= 400 and status < 500 | select count(1) as pv, e Set Operations está definido como CROSS JOIN. A consulta para Query Statement 1 éstatus >= 500 | select count(1) as pv. Para a regra de alerta, Group Evaluation está definido como Ungrouped, e a Trigger Condition está definida como Data exists com a condição($0.pv + $1.pv) > 1000.-
Resultados
-
Resultados da query statement 0
O número de erros 4xx do OSS em um período de 15 minutos.
pv
890
-
Resultados da query statement 1
O número de erros 5xx do SLB em um período de 15 minutos.
pv
567
-
Resultados da operação de conjunto
Quando Set Operations está definido como CROSS JOIN, os resultados são os seguintes:
$0.pv
$1.pv
890
567
-
-
-
Exemplos adicionais
-
Resultados da query statement 0
a
b
a1
b1
a2
b2
a5
b5
-
Resultados da query statement 1
a
c
a1
c1
a3
c3
-
Resultados da operação de conjunto
Quando Set Operations está definido como CROSS JOIN, os resultados são os seguintes:
$0.a
b
$1.a
c
a1
b1
a1
c1
a1
b1
a3
c3
a2
b2
a1
c1
a2
b2
a3
c3
a5
b5
a1
c1
a5
b5
a3
c3
-
-
Exemplo 1
-
Requisito
Monitore logs de acesso do Nginx de dois LogStores, um na região China (Beijing) e outro na região China (Shanghai). Acione um alerta se o número total de hosts com mais de 30 erros 5xx em ambos os LogStores exceder 10 em um intervalo de 15 minutos.
A configuração é a seguinte: para Query Statistics 0, a instrução de consulta é
status > 500 | select host, count(*) as pv group by host having pv > 30, e a Set Operation é JOIN. Para Query Statistics 1, a instrução de consulta éstatus > 500 | select host, count(*) as pv group by host having pv > 30, Group Evaluation é No Grouping, e a Trigger Condition é has specific number of results maior que 10.-
Resultado
-
Resultados da Query Statement 0
Esta consulta identifica hosts com mais de 30 erros 5xx em um período de 15 minutos e lista suas respectivas contagens de erros.
Host
Pv
host1
60
host2
55
host3
47
host4
45
host5
31
-
Resultados da Query Statement 1
Esta consulta identifica hosts com mais de 30 erros 5xx em um período de 15 minutos e lista suas respectivas contagens de erros.
Host
Pv
hosta
70
hostb
45
hostc
44
hostd
42
-
Resultado da operação de conjunto
Quando Set Operations está definido como JOIN, o resultado combinado é:
Host
Pv
host1
60
host2
55
host3
47
host4
45
host5
31
hosta
70
hostb
45
hostc
44
hostd
42
-
-
-
Outros exemplos
-
Se os campos de resultado de duas Query Statements não coincidirem, a operação JOIN preenche os campos não correspondentes com None.
-
Resultados da Query Statement 0
A
B
a1
b1
a2
b2
-
Resultados da Query Statement 1
B
C
b1
c1
b2
c2
-
Resultado da operação de conjunto
A
B
C
a1
b1
None
a2
b2
None
None
b1
c1
None
b2
c2
-
-
Ao usar três Query Statements, o sistema executa primeiro uma operação de conjunto na Query Statement 0 e na Query Statement 1 e, em seguida, une esse resultado aos resultados da Query Statement 2.
-
Resultados da Query Statement 0
A
B
a1
b1
a2
b2
-
Resultados da Query Statement 1
A
B
a1
b11
a2
b22
a3
b33
-
Resultado da união da Query Statement 0 e Query Statement 1
O resultado da operação INNER JOIN com a condição $0.a == $1.a é:
A
$0.b
$1.b
a1
b1
b11
a2
b2
b22
-
Resultados da Query Statement 2
A
B
a3
b333
a4
b444
-
Resultado da operação de conjunto final
O resultado final da operação JOIN é:
NotaOs valores do campo b nos resultados da Query Statement 2 preenchem a coluna $0.b no resultado final.
A
$0.b
$1.b
a1
b1
b11
a2
b2
b22
a3
b333
None
a4
b444
None
-
-
-
Exemplo 1
-
Requisito
Monitore o número de erros 5xx em um bucket especificado. Acione um alerta se a contagem exceder 1.000 dentro de um período de 15 minutos. Para atender a esse requisito, adicione dados de resource para manter uma lista de permissões de buckets.
A configuração é a seguinte: a instrução de consulta para Query Statement 0 é
status >=500 | select bucket, count(*) as pv group by bucket having pv > 1000 limit 1000. Set Operations está definido como INNER JOIN com a condição de junção$0.bucket = $1.bucket. Para Query Statement 1, a source de dados OSS (user.test) está selecionada, especificando os buckets bucket_03, bucket_04, bucket_05 e bucket_06. Group Evaluation está definido como Ungrouped, e a Trigger Condition está definida como Data exists.-
Resultados
-
Resultados da Query Statement 0
Identifica buckets que têm mais de 1.000 erros 5xx dentro de um período de 15 minutos.
Bucket
Pv
bucket_01
1600
bucket_02
1550
bucket_03
1470
bucket_04
1450
-
Resultados da Query Statement 1
Os dados de resource para os buckets.
Bucket
Description
bucket_03
for dev team
bucket_04
for test team
bucket_05
for service team
bucket_06
for support team
-
Resultados da operação de conjunto
Quando Set Operation está definido como INNER JOIN com a condição $0.bucket == $1.bucket, o resultado da operação de conjunto é o seguinte:
Bucket
Pv
Description
bucket_03
1470
for dev team
bucket_04
1450
for test team
-
-
-
Exemplo 2
-
Requisito
Dois logstores, um na região China (Beijing) e outro na região China (Shanghai), armazenam logs de acesso do Nginx. A cada 15 minutos, o sistema consulta clientes com mais de 30 erros 5xx. Um alerta é acionado se ocorrerem erros 5xx em ambas as regiões e a contagem de erros na região China (Beijing) exceder a da região China (Shanghai).
A configuração é a seguinte: a instrução de consulta para Query Statement 0 é
status >= 500 | select client_ip, count(1) as pv group by client_ip having pv > 30. Set Operations está definido como INNER JOIN com as condições de junção$0.client_ip = $1.client_ipe$0.pv > $1.pv. A instrução de consulta para Query Statement 1 éstatus >= 500 | select client_ip, count(1) as pv group by client_ip having pv > 30. Group Evaluation está definido como Ungrouped, e a Trigger Condition está definida como Data exists.-
Resultados
-
Resultados da Query Statement 0
Identifica clientes na região China (Beijing) que têm mais de 30 erros 5xx dentro de um período de 15 minutos e suas contagens de erros.
Client ip
Pv
192.0.2.4
60
192.0.2.5
55
192.0.2.6
47
192.0.2.7
45
192.0.2.8
31
-
Resultados da Query Statement 1
Identifica clientes na região China (Shanghai) que têm mais de 30 erros 5xx dentro de um período de 15 minutos e suas contagens de erros.
Client ip
Pv
192.0.2.5
70
192.0.2.6
45
192.0.2.7
44
192.0.2.8
42
192.0.2.9
42
-
Resultados da operação de conjunto
Quando Set Operations está definido como INNER JOIN, $0.client_ip == $1.client_ip e $0.pv > $1.pv, o resultado da operação de conjunto é o seguinte:
Client ip
Pv
192.0.2.6
47
192.0.2.7
45
-
-
-
Outros exemplos
Se os conjuntos de resultados de duas instruções de consulta contiverem campos com nomes idênticos que não sejam chaves de junção, o sistema adicionará automaticamente os prefixos $0. e $1. a esses nomes de campo no conjunto de resultados final.
-
Resultados da Query Statement 0
A
B
C
D
a1
b1
c1
d1
a2
b2
c2
d2
a3
b3
c3
d3
-
Resultados da Query Statement 1
A
B
C
a1
b11
c11
a2
b22
c22
-
Resultados da operação de conjunto
Quando a Set Operation é INNER JOIN e $0.a == $1.a, o resultado da operação de conjunto é o seguinte:
A
$0.b
$0.c
D
$1.b
$1.c
a1
b1
c1
d1
b11
c11
a2
b2
c2
d2
b22
c22
-
-
Resultados da query statement 0
A
B
a1
b1
a2
b2
a3
b3
-
Resultados da query statement 1
A
B
C
a1
b11
c1
a2
b22
c2
-
Resultados da operação de conjunto
Quando Set Operations está definido como LEFT JOIN com a condição de junção $0.a == $1.a, o resultado é o seguinte:
A
$0.b
$1.b
C
a1
b1
b11
c1
a2
b2
b22
c2
a3
b3
None
None
-
Resultados da Query 0
a
b
c
a1
b11
c1
a2
b22
c2
-
Resultados da Query 1
a
b
a1
b1
a2
b2
a3
b3
-
Resultado da operação de conjunto
Quando Set Operations está definido como RIGHT JOIN com a condição $0.a == $1.a, o resultado é:
a
$0.b
c
$1.b
a1
b11
c1
b1
a2
b22
c2
b2
a3
NULL
NULL
b3
-
Dados de source 0
a
b
c
a1
b1
c1
a2
b2
c2
a5
b5
c3
-
Dados de source 1
a
b
d
a1
b11
d1
a2
b22
d2
a3
b33
d3
-
Resultados da operação de conjunto
Ao definir o parâmetro Set Operations como FULL JOIN com a condição de junção $0.a == $1.a, o resultado é o seguinte:
a
$0.b
c
$1.b
d
a1
b1
c1
b11
d1
a2
b2
c2
b22
d2
a5
b5
c3
None
None
a3
None
None
b33
d3
-
Requisito
Monitore erros 5xx para todos os buckets, exceto aqueles na lista de bloqueios. Acione um alerta se a contagem de erros exceder 1.000 em um período de 15 minutos. Para isso, use dados de resource para manter a lista de bloqueios de buckets.
A configuração é a seguinte: a consulta para Query Statement 0 é
status >=500 | select bucket, count(*) as pv group by bucket having pv > 1000 limit 1000. A set operation está definida como LEFT EXCLUDE JOIN com a condição de junção$0.bucket = $1.bucket. Para Query Statement 1, a source de dados OSS é (user.test) e os buckets são bucket_03 e bucket_04. Group Evaluation está definido como Ungrouped, e a trigger condition está definida como data exists.-
Resultado
-
Resultados da Query Statement 0
Identifica buckets que têm mais de 1.000 erros 5xx dentro de um período de 15 minutos.
Bucket
Pv
bucket_01
1060
bucket_02
1055
bucket_03
1047
bucket_04
1045
-
Resultados da Query Statement 1
Os dados de resource para os buckets.
Bucket
Description
bucket_03
for dev team
bucket_04
for test team
-
Resultado da operação de conjunto
Quando a set operation está definida como LEFT EXCLUDE JOIN com a condição $0.bucket = $1.bucket, o resultado é o seguinte:
Bucket
Pv
bucket_01
1060
bucket_02
1055
-
-
Requisito
Monitore erros 5xx para todos os buckets que não estão na lista de bloqueios. Acione um alerta se a contagem de erros exceder 1.000 dentro de um período de 15 minutos. Para isso, adicione dados de resource para manter a lista de bloqueios de buckets.
Configure as definições da seguinte forma: para Query Statement 0, selecione a source de dados OSS (user.test) e especifique bucket_03 e bucket_04. Defina Set Operations como RIGHT EXCLUDE JOIN, com a condição de junção
$0.bucket = $1.bucket. Para Query Statement 1, defina a instrução de consulta comostatus > 500 | select bucket, count(*) as pv group by bucket having pv > 1000 limit 1000. Defina Group Evaluation como No Grouping e a Trigger Condition como Data exists.-
Resultado
-
Resultados da Query Statement 0
Retorna os dados de resource para os buckets na lista de bloqueios.
Bucket
Description
bucket_03
for dev team
bucket_04
for test team
-
Resultados da Query Statement 1
Retorna buckets com mais de 1.000 erros 5xx em um período de 15 minutos.
Bucket
Pv
bucket_01
60
bucket_02
55
bucket_03
47
bucket_04
45
-
Resultado da operação de conjunto
Quando Set Operations está definido como RIGHT EXCLUDE JOIN com a condição de junção $0.bucket = $1.bucket, o resultado é o seguinte:
Bucket
Pv
bucket_01
60
bucket_02
55
-
A utilização de CPU excede 95%.
Nenhum dado é retornado pela consulta e análise.
-
Query statistics: especifique uma consulta para calcular a utilização de CPU.
* | select promql_query_range('cpu_util') from metrics limit 1000 -
Trigger Condition: Data matches the expression, value>95, Severity: Medium
Se o campo value nos resultados da consulta e análise exceder 95, um alerta de severidade média será acionado.
Threshold of Continuous Triggers: o número de vezes consecutivas que a condição de acionamento deve ser atendida antes que um alerta seja gerado.
-
No-data alert: ative a chave no-data alert e defina a severidade e a anotação.
Quando ativado, um alerta é acionado se o número de consultas consecutivas que não retornam dados exceder o limiar de acionamento contínuo.
Defina uma severidade e uma anotação separadas para alertas de ausência de dados.
Join
Inner join
LEFT JOIN
Right join
Full join
LEFT EXCLUDE JOIN
Right exclude join
Alerta de ausência de dados
Alertas de ausência de dados detectam perdas de dados despercebidas durante a coleta. Por exemplo, crie uma regra de alerta para monitorar a utilização de CPU de cada host e receba uma notificação de alerta se qualquer uma das seguintes condições for atendida:
Configure a regra de alerta da seguinte forma:
A página é configurada da seguinte maneira:
Para grouping evaluation, selecione Automatic by label. Na seção Add annotation, defina o título como ${alert_name} alert triggered e a descrição como ${alert_name} alert triggered. Desative automatic annotation e recovery notification. Em advanced settings, defina o continuous trigger threshold como 1. Ative no-data alert e defina sua severity como Medium, seu título de anotação como ${alert_name}: No data e sua descrição como No data was returned when this alert rule was evaluated.







