Solução de problemas de políticas de alertas

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Esta página explica por que algumas políticas de alertas podem se comportar de maneira diferente do pretendido e oferece possíveis soluções para essas situações.

Para informações sobre as variáveis que podem afetar uma política de alertas, por exemplo, a janela de duração, consulte Comportamento de políticas de alertas baseadas em métricas.

A política de utilização do disco cria incidentes inesperados

Você criou uma política de alertas para monitorar a capacidade "usada" dos discos em seu sistema. Essa política monitora a métrica agent.googleapis.com/disk/percent_used. Você espera receber uma notificação somente quando a utilização de qualquer disco físico exceder o limite definido na condição. No entanto, essa política cria incidentes quando o uso de cada disco físico é menor que o limite.

Uma causa conhecida de incidentes inesperados para essas políticas é que as condições não estão restritas ao monitoramento de discos físicos. Em vez disso, essas políticas monitoram todos os discos, incluindo discos virtuais, como dispositivos de loopback. Se um disco virtual for criado de forma que sua utilização seja 100%, isso causaria um incidente para a política ser criada.

Por exemplo, veja a saída a seguir do comando df do Linux, que mostra o espaço em disco disponível em sistemas de arquivos montados para um sistema:

$ df
/dev/root     9983232  2337708  7629140   24%  /
devtmpfs      2524080        0  2524080    0%  /dev
tmpfs         2528080        0  2528080    0%  /dev/shm
...
/dev/sda15     106858     3934   102924    4%  /boot/efi
/dev/loop0      56704    56704        0  100%  /snap/core18/1885
/dev/loop1     129536   129536        0  100%  /snap/google-cloud-sdk/150
...

Para esse sistema, uma política de alertas de utilização de disco precisa ser configurada para filtrar as séries temporais dos dispositivos de loopback /dev/loop0 e /dev/loop1. Por exemplo, é possível adicionar o filtro device !=~ ^/dev/loop.*, que exclui todas as séries temporais cujo rótulo device não corresponde à expressão regular ^/dev/loop.*.

A política de tempo de atividade não cria alertas esperados

Você quer receber uma notificação se uma máquina virtual (VM) for reinicializada ou desligada. Para isso, crie uma política de alertas que monitore a métrica compute.googleapis.com/instance/uptime. Você cria e configura a condição para gerar um incidente quando não há dados de métrica. Para definir a condição, use a linguagem de consulta de monitoramento (MQL, na sigla em inglês)1. Você não recebe notificações quando a máquina virtual (VM) é reinicializada ou encerrada.

Esta política de alertas só monitora séries temporais para instâncias de VM do Compute Engine que estão no estado RUNNING. As séries temporais de VMs que estão em qualquer outro estado, como STOPPED ou DELETED, são filtradas antes que a condição seja avaliada. Devido a esse comportamento, não é possível usar uma política de alertas com uma condição de alerta de ausência de métricas para determinar se uma instância de VM está em execução. Para informações sobre os estados da instância de VM, consulte Ciclo de vida da instância da VM.

Para resolver esse problema, crie uma política de alertas para monitorar uma verificação de tempo de atividade. Para endpoints particulares, use as verificações de tempo de atividade particulares.

Uma alternativa possível aos alertas de verificações de tempo de atividade é usar políticas de alertas que monitoram a ausência de dados. É altamente recomendável alertar sobre as verificações de tempo de atividade em vez da ausência de dados: os alertas de ausência podem gerar falsos positivos se houver problemas transitórios com a disponibilidade dos dados do Monitoring.

No entanto, se não for possível usar verificações de tempo de atividade, crie uma política de alertas com MQL que notifica que a VM foi encerrada. Condições definidas por MQL não filtram com antecedência os dados de série temporal com base no estado da instância de VM. Como o MQL não filtra os dados por estados da VM, é possível usá-lo para detectar a ausência de dados das VMs que foram encerradas.

Considere a seguinte condição da MQL que monitora a métrica compute.googleapis.com/instance/cpu/utilization:

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
|absent_for 3m

Se uma VM monitorada por essa condição for encerrada, um incidente será gerado três minutos depois e as notificações serão enviadas. O valor de absent_for precisa ter pelo menos três minutos.

Para mais informações sobre o MQL, consulte Políticas de alertas com MQL.

1: MQL é uma linguagem expressiva baseada em texto que pode ser usada com chamadas da API Cloud Monitoring e no console do Google Cloud. Para configurar uma condição com o MQL ao usar o console do Google Cloud, selecione o Editor de consultas.

Causas comuns para incidentes anômalos

Você criou uma política de alertas e a política parece criar incidentes prematuramente ou incorretamente.

Há diferentes motivos pelos quais você pode receber notificações de incidentes que parecem estar incorretos:

  • Se houver uma lacuna nos dados, especialmente para as políticas de alertas com condições de ausência de métrica ou de limite menor, poderá ser criado um incidente que parece anômalo. Determinar se existe uma lacuna nos dados pode não ser fácil. Às vezes, a lacuna está oculta e, em outras, foi corrigida automaticamente.

    • Por exemplo, nos gráficos, as lacunas podem ser ocultadas porque os valores dos dados ausentes são interpolados. Mesmo quando vários minutos de dados estão ausentes, o gráfico conecta pontos ausentes pela continuidade visual. Uma lacuna desse tipo nos dados subjacentes é suficiente para que uma política de alertas crie um incidente.

    • Os pontos nas métricas com base em registros podem chegar com atraso e ser preenchidos, por até 10 minutos no passado. O comportamento de preenchimento corrige a lacuna efetivamente. Ela é preenchida quando os dados chegam. Assim, uma lacuna em uma métrica com base em registros que não pode mais ser vista pode ter causado a ocorrência de uma política de alertas para criar um incidente.

  • As condições de ausência de métrica e de limite máximo são avaliadas em tempo real, com um pequeno atraso na consulta. O status da condição pode mudar entre o momento em que ela é avaliada e o momento em que o incidente correspondente fica visível no Monitoring.

  • As condições configuradas para criar um incidente em uma única medida podem resultar em incidentes que parecem ser prematuros ou incorretos. Para evitar essa situação, garanta que várias medições sejam necessárias antes de um incidente ser criado. Para isso, defina o campo de duração de uma condição como mais que o dobro da taxa de amostragem da métrica.

    Por exemplo, se uma métrica for amostrada a cada 60 segundos, defina a duração para pelo menos 3 minutos. Se você definir o campo de duração como o valor mais recente, ou equivalente a zero segundo, uma única medição poderá fazer com que um incidente seja criado.

  • Quando a condição de uma política de alertas é editada, pode levar vários minutos para que a alteração seja propagada por toda a infraestrutura de alertas. Durante esse período, talvez você receba notificações de incidentes que atenderam às condições originais da política de alertas.

  • Quando os dados de série temporal chegam, pode levar até um minuto para que os dados sejam propagados em toda a infraestrutura de alertas. Quando o período de alinhamento é definido como um minuto ou para a amostra mais recente, a latência de propagação pode fazer parecer que a política de alertas está sendo acionada incorretamente. Para reduzir a possibilidade dessa situação, use um período de alinhamento de pelo menos cinco minutos.

A política de várias condições cria várias notificações

Você criou uma política de alertas que contém várias condições e as associou a um AND lógico. Você espera receber uma notificação e ter um incidente criado quando todas as condições forem atendidas. No entanto, você recebe várias notificações e vê que vários incidentes foram criados.

Se uma política de alertas contiver várias condições unidas por um AND lógico, e se essa política for acionada, para cada série temporal que resultar em uma condição atendida, a política envia uma notificação e cria um incidente. Por exemplo, se você tiver uma política com duas condições e cada uma delas monitorar uma série temporal, dois incidentes serão abertos e você receberá duas notificações.

Não é possível configurar o Cloud Monitoring para criar um único incidente e enviar uma única notificação.

Para mais informações, consulte Notificações por incidente.

Não foi possível ver os detalhes do incidente devido a um erro de permissão

Navegue até a página de incidentes no console do Google Cloud e selecione um incidente para visualizar. Você espera a página de detalhes ser aberta. No entanto, a página de detalhes não é aberta e uma mensagem "Permissão negada" é exibida.

Para resolver essa situação, verifique se o papel do Identity and Access Management (IAM) é roles/monitoring.viewer ou um que inclua todas as permissões desse papel. Por exemplo, os papéis roles/monitoring.editor e roles/monitoring.admin incluem todas as permissões do papel de leitor.

Papéis personalizados não podem conceder a permissão necessária para ver detalhes do incidente.

Projeto errado com a lista de detalhes do incidente

Você recebe uma notificação de um alerta, e o resumo da condição lista o projeto do Google Cloud em que o alerta foi criado, ou seja, ele lista o projeto do escopo. No entanto, você espera que o incidente liste o nome do projeto do Google Cloud que armazena a série temporal que está causando o acionamento do incidente.

As opções de agregação especificadas na condição de uma política de alertas determinam o projeto do Google Cloud mencionado em uma notificação:

  • Quando as opções de agregação eliminam o rótulo que armazena o ID do projeto, as informações do incidente listam o projeto do escopo. Por exemplo, se você agrupar os dados apenas por zona, o rótulo que armazena o ID do projeto será removido após o agrupamento.

  • Quando as opções de agregação preservam o rótulo que armazena o ID do projeto, as notificações de incidente incluem o nome do projeto do Google Cloud que armazena a série temporal que está causando o acionamento do incidente. Para preservar o rótulo do ID do projeto, não agrupe a série temporal ou inclua o rótulo project_id no campo de agrupamento.

Não foi possível fechar um incidente manualmente

Você recebeu uma notificação sobre um incidente no seu sistema. Você acessa a página de detalhes do incidente e clica em Fechar incidente. Você espera que o incidente seja encerrado. No entanto, você recebe esta mensagem de erro:

Unable to close incident with active conditions.

Só é possível fechar um incidente quando nenhuma observação chega ao período de alerta mais recente. O período de alerta, que normalmente tem um valor padrão de 5 minutos, é definido como parte da condição da política de alertas e é configurável. A mensagem de erro anterior indica que os dados foram recebidos dentro do período de alerta.

O seguinte erro ocorre quando um incidente não pode ser fechado devido a um erro interno:

Unable to close incident. Please try again in a few minutes.

Se você vir a mensagem de erro acima, é possível repetir a operação de fechamento ou permitir que o Monitoring feche automaticamente o incidente.

Para mais informações, consulte Como gerenciar incidentes.

As notificações não são recebidas

Você configura os canais de notificação e espera ser notificado quando ocorrerem incidentes. Você não recebe notificações.

Para informações sobre como resolver problemas com o webhook e as notificações do Pub/Sub, consulte as seguintes seções deste documento:

Para coletar informações sobre a causa da falha, faça o seguinte:

  1. No console do Google Cloud, acesse a página "Explorador de registros":

    Acesse o Explorador de registros

  2. Selecione o projeto do Cloud apropriado.

  3. Consulte os registros para eventos do canal de notificação:

    1. Expanda o menu Nome do registro e selecione notification_channel_events.
    2. Expanda o menu Gravidade e selecione Erro.
    3. Use o menu de Intervalo de tempo para selecionar uma opção.
    4. Clique em Executar consulta.

    As etapas anteriores criam a seguinte consulta:

    logName="projects/PROJECT_ID/logs/monitoring.googleapis.com%2Fnotification_channel_events"
    severity=ERROR
    

    Geralmente, as informações sobre falhas são incluídas na linha de resumo e no campo jsonPayload.

    A linha de resumo e o campo jsonPayload geralmente contêm informações de falha. Por exemplo, quando ocorre um erro de gateway, a linha de resumo inclui "falha com gateway inválido 502".

As notificações de webhook enviadas para o Google Chat não são recebidas

Configure um canal de notificação do webhook no Cloud Monitoring e o webhook para enviar ao Google Chat. No entanto, você não está recebendo notificações ou está recebendo erros 400 Bad Request.

Para resolver esse problema, configure um canal de notificação do Pub/Sub no Cloud Monitoring e configure um serviço do Cloud Run para converter as mensagens do Pub/Sub no formato esperado pelo Chat e entregar a notificação ao Google Chat. Para conferir um exemplo dessa configuração, consulte Como criar notificações personalizadas com o Cloud Monitoring e o Cloud Run.

As notificações de webhook não são recebidas

Você configura um canal de notificação do webhook e espera receber uma notificação quando ocorrerem incidentes. Você não recebe notificações.

Endpoint particular

Não é possível usar webhooks para notificações, a menos que o endpoint seja público.

Para resolver essa situação, use notificações do Pub/Sub combinadas com uma assinatura de pull para esse tópico de notificação.

Ao configurar um canal de notificação do Pub/Sub, as notificações de incidentes são enviadas para uma fila do Pub/Sub que tem controles do Identity and Access Management. Qualquer serviço que possa consultar ou detectar um tópico do Pub/Sub pode consumir essas notificações. Por exemplo, aplicativos executados em máquinas virtuais do App Engine, Cloud Run ou Compute Engine podem consumir essas notificações.

Se você usar uma assinatura pull, uma solicitação será enviada ao Google, que aguarda a chegada de uma mensagem Essas assinaturas exigem acesso ao Google, mas não exigem regras para firewalls ou acesso de entrada.

Endpoint público

Para identificar por que a entrega falhou, examine as entradas de registro do Cloud Logging em busca de informações de falha.

Por exemplo, é possível pesquisar nas entradas de registro pelo recurso de canal de notificação. Para isso, use o Explorador de registros, com um filtro como este:

resource.type="stackdriver_notification_channel"

As notificações do Pub/Sub não são recebidas

Você configura um canal de notificação do Pub/Sub, mas não recebe notificações de alerta.

Para resolver essa condição, tente o seguinte:

  • Verifique se a conta do serviço de notificações existe. As notificações não são enviadas quando a conta de serviço é excluída.

    Para verificar se a conta de serviço existe, faça o seguinte:

    1. No console do Google Cloud, acesse a página IAM:

      Acessar IAM

    2. Procure uma conta de serviço que tenha a seguinte convenção de nomenclatura:

      service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com

      Se essa conta de serviço não estiver listada, selecione Incluir concessões de papel fornecidas pelo Google, conforme mostrado na captura de tela a seguir:

      Selecione a opção "Incluir concessões de papel fornecidas pelo Google".

    Para criar uma conta de serviço de notificações, faça o seguinte:

    1. No console do Google Cloud, selecione Monitoramento

      Acessar Monitoring

    2. Clique em Alertas e em Editar canais de notificação.

    3. Na seção Pub/Sub, clique em Adicionar novo.

      A caixa de diálogo Canal criado do Pub/Sub exibe o nome da conta de serviço que o Monitoring criou.

    4. Clique em Cancelar.

    5. Conceda permissões à conta de serviço para publicar os tópicos do Pub/Sub, conforme descrito em Autorizar conta de serviço.

  • Verifique se a conta de serviço de notificações foi autorizada a enviar notificações para os tópicos de interesse do Pub/Sub.

    Para ver as permissões de uma conta de serviço, use o console do Google Cloud ou o comando da Google Cloud CLI:

    • A página IAM no Console do Google Cloud lista os papéis para cada conta de serviço.
    • A página Tópicos do Pub/Sub no Console do Google Cloud lista cada tópico. Quando você seleciona um tópico, a guia Permissões lista os papéis concedidos às contas de serviço.
    • Para listar todas as contas de serviço e os papéis delas, execute o seguinte comando da Google Cloud CLI:

      gcloud projects get-iam-policy PROJECT_ID
      

      Veja a seguir uma resposta parcial para este comando:

          serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
             role: roles/monitoring.notificationServiceAgent
           - members:
             [...]
             role: roles/owner
           - members:
             - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
             role: roles/pubsub.publisher
      

      A resposta ao comando inclui apenas papéis, e não permissões por tópico.

    • Para listar as vinculações do IAM para um tópico específico, execute o seguinte comando:

      gcloud pubsub topics get-iam-policy TOPIC
      

      Veja a seguir um exemplo de resposta para este comando:

          bindings:
          - members:
            - serviceAccount:service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com
            role: roles/pubsub.publisher
          etag: BwXPRb5WDPI=
          version: 1
      

    Para informações sobre como autorizar a conta de serviço de notificações, consulte Autorizar conta de serviço.