Alertas: erros com base em registros em tópicos do Pub/Sub

1. Introdução

Última atualização:21 de junho de 2023

Como alertar sobre erros com base em registros para disponibilidade

Alertas com base em registros podem ser usados para determinar a disponibilidade de um aplicativo monitorando eventos ou padrões específicos nos registros*.* Ao receber alertas sobre falhas temporárias ou outros problemas enfrentados pelos usuários, você pode tomar medidas para minimizar o impacto para seus usuários e clientes.

Embora as verificações de tempo de atividade forneçam um resumo geral da disponibilidade, pode ser mais preciso usar mensagens de erro derivadas de registros como indicadores de tipos mais específicos de indisponibilidade e ter uma noção da proporção de usuários que está tendo um problema.

Os erros podem surgir de várias causas, desde erros do usuário até manutenção de sistemas, atualizações e até mesmo fatores externos ao sistema, como mau tempo. A chave no alerta não é tentar antecipar todas as causas possíveis, mas escolher alguns sintomas importantes que podem servir como início para a solução de problemas.

Tópicos do Pub/Sub como um canal de notificação de alerta

Um tópico do Pub/Sub pode ser usado como um canal de notificação do Google Cloud Monitoring para enviar alertas a uma assinatura do Pub/Sub. Dessa forma, é possível integrar os alertas do Cloud Monitoring a outros sistemas, incluindo serviços de notificação de terceiros.

Para usar um tópico do Pub/Sub como um canal de notificação, primeiro você precisa criar um tópico e uma assinatura do Pub/Sub. Em seguida, você precisa criar um canal de notificação do Cloud Monitoring que use o tópico do Pub/Sub como destino.

Quando um alerta é acionado, o Cloud Monitoring envia uma mensagem para o tópico do Pub/Sub. O assinante da assinatura do Pub/Sub pode processar a mensagem e tomar as medidas adequadas.

O que você vai criar

Neste codelab, você vai implantar um app e criar um tópico do Pub/Sub e um alerta com base em registros que verifica erros em uma parte específica do app e usa o tópico do Pub/Sub como um canal de notificação.

O que você vai aprender

  • Como criar um tópico do Pub/Sub
  • Como criar um alerta com base em registros

O foco deste codelab é criar um alerta para erros. Conceitos não relevantes e códigos do aplicativo são citados rapidamente e fornecidos para que você simplesmente os copie e cole.

O que é necessário

  • Uma conta do Google Cloud com permissões para:
  • Implantar aplicativos do Cloud Run
  • Criar tópicos Pub/Sub
  • Criar alertas

2. Etapas da configuração

Selecionar ou criar um projeto do Google Cloud

Para selecionar um projeto, use o menu suspenso:

b35bf95b8bf3d5d8.png

Para criar um novo projeto no Google Cloud, siga estas etapas:

  1. Acesse o Console do Google Cloud Platform.
  2. Clique no botão Criar projeto.
  3. Insira um nome para seu projeto.
  4. Selecione uma conta de faturamento para seu projeto.
  5. Clique no botão Criar.

Seu projeto será criado, e você será direcionado para o painel dele. A partir daí, você pode começar a usar os serviços do Google Cloud.

Veja alguns detalhes adicionais sobre cada etapa:

  • Nome:o nome do projeto precisa ser exclusivo na organização.
  • Conta de faturamento:você pode usar uma conta de faturamento atual ou criar uma nova.
  • Criar:depois de inserir todas as informações necessárias, clique no botão Criar para criar o projeto.

Para mais informações, consulte a documentação do Google Cloud sobre a criação de projetos.

3. Implantar o aplicativo de API

Sobre o que é o aplicativo ou API de exemplo?

Nosso aplicativo é um aplicativo simples da API Inventory que expõe um endpoint da API REST com algumas operações para listar os itens de inventário e receber a contagem específica de inventário de itens.

Depois de implantar a API e presumindo que ela está hospedada em https://<somehost>, podemos acessar os endpoints da API da seguinte maneira:

https://<somehost>/inventory

Isso listará todos os itens de produto com os níveis de estoque disponíveis.

https://<somehost>/inventory/{productid}

Isso vai fornecer um registro único com o productid e o nível de estoque disponível para esse produto.

Os dados de resposta retornados estão no formato JSON.

Observação: esse aplicativo de API é apenas para fins de demonstração e não representa uma implementação de API segura e robusta. Ele oferece um aplicativo rápido para você conhecer o objetivo principal do laboratório, ou seja, as Operações do Google Cloud.

Dados de amostra e solicitação/resposta de API

O aplicativo não é alimentado por um banco de dados no back-end para manter as coisas simples. Ele contém três exemplos de IDs de produtos e seus níveis de inventário disponíveis.

ID do produto

Nível de inventário disponível

I-1

10

I-2

20

I-3

30

Os exemplos de solicitação e resposta da API são mostrados abaixo:

Solicitação de API

Resposta da API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

Clone o repositório

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

bce75f34b2c53987.png

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

f6ef2b5f13479f3a.png

Essa máquina virtual tem todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito com apenas um navegador.

Configurar a gcloud

No Cloud Shell, defina o ID do projeto e salve-o como a variável PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

Agora execute este comando:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

Isso vai criar uma pasta chamada cloud-code-sample-repository.

(Opcional) Executar o aplicativo no Cloud Shell

Para executar o aplicativo localmente, siga estas etapas:

  1. No terminal, use o seguinte comando para acessar a versão em Python da API:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. No terminal, insira o comando a seguir. No momento em que este artigo foi escrito, o Cloud Shell vem com o Python 3.9.x instalado, e usaremos a versão padrão. Se você planeja executá-lo localmente no seu laptop, use o Python 3.8+:

$ python app.py

  1. Execute o comando a seguir para iniciar o servidor Python localmente.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

Clique em Visualizar na porta 8080. 5. Uma janela do navegador será aberta. Um erro 404 será exibido. Tudo bem. Modifique "URL" para incluir apenas "/inventory" após o nome do host.

Por exemplo: na minha máquina, será assim:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Isso exibirá a lista de itens de inventário como explicado anteriormente:

709d57ee2f0137e4.png

  1. Você pode parar o servidor agora acessando o terminal e pressionando Ctrl-C

Implantar o aplicativo

Agora vamos implantar esse aplicativo de API no Cloud Run. O processo envolvia a utilização do cliente de linha de comando gcloud para executar o comando e implantar o código no Cloud Run.

No terminal, execute o seguinte comando gcloud:

$ gcloud run deploy --source .

Isso fará várias perguntas, e alguns dos pontos são mencionados abaixo:

  1. Nome do serviço (python-flask-api): use esse padrão ou escolha algo como my-inventory-api
  2. API [run.googleapis.com] não ativada no projeto [613162942481]. Deseja ativar e tentar novamente (isso levará alguns minutos)? (y/N)? S
  3. Especifique uma região: escolha 31 (us-west-1)
  4. A API [artifactregistry.googleapis.com] não foi ativada no projeto [613162942481]. Deseja ativar e tentar novamente (isso levará alguns minutos)? (y/N)? S
  5. A implantação da origem requer um repositório Docker do Artifact Registry para armazenar contêineres criados. Um repositório chamado [cloud-run-source-deploy] na região [us-west1] será criado.
  6. Do you want to continue (Y/n)? S
  7. Permitir invocações não autenticadas para [my-inventory-api] (y/N)? S

Isso vai iniciar o processo de conteinerização, envio do código-fonte para o Artifact Registry e implantação do serviço + revisão do Cloud Run. Você deve ser paciente durante esse processo (pode levar de 3 a 4 minutos) e o URL do serviço será mostrado a você para ver o processo sendo concluído.

Veja abaixo um exemplo de execução:

87ba8dbf88e8cfa4.png

Testar o aplicativo

Agora que implantamos o aplicativo no Cloud Run, você pode acessar o aplicativo da API da seguinte maneira:

  1. Anote o URL do serviço da etapa anterior. Por exemplo, na minha configuração, ele aparece como https://my-inventory-api-bt2r5243dq-uw.a.run.app. Vamos chamá-lo de <SERVICE_URL>.
  2. Abra um navegador e acesse estes três URLs dos endpoints da API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Ela deve estar de acordo com as especificações que fornecemos em uma seção anterior com um exemplo de solicitação e resposta de API.

Receber detalhes do serviço do Cloud Run

Implantamos nosso serviço de API no Cloud Run, um ambiente de computação sem servidor. É possível acessar o serviço do Cloud Run pelo console do Google Cloud a qualquer momento.

No menu principal, navegue até Cloud Run. Isso vai mostrar a lista de serviços em execução no Cloud Run. O serviço que você acabou de implantar será exibido. Dependendo do nome selecionado, você verá algo parecido com isto:

2633965c4bc957cc.png

Clique no nome do serviço para exibir os detalhes. Os detalhes do exemplo são mostrados abaixo:

33042ae64322ce07.png

Observe o URL, que nada mais é do que o URL de serviço que você pode inserir no navegador e acessar a API Inventory que acabamos de implantar. Confira "Métricas" e outros detalhes.

Vamos começar com o pacote de operações do Google Cloud.

4. Crie um tópico do Pub/Sub para receber a notificação de alerta

Para criar um tópico do Pub/Sub, siga estas etapas no Console do Google Cloud:

  1. Pesquise Pub/Sub na caixa de pesquisa e acesse o Pub/Sub. 935028bd8f6328ef.png
  2. Clique na guia Tópicos se ainda não estiver nela. 7fd8bf91386a88fd.png
  3. Clique no botão Criar tópico. cd9d197f9023c41b.png
  4. Insira um nome reconhecível para seu tópico.

173f313b4a3c4934.png

  1. Clique no botão Criar. ca9a02477da21a44.png
  2. Copie o Nome do tópico usando o botão de ícone de cópia. Você vai precisar dele na próxima seção.

20848252ee83df93.png

5. Criar uma política de alertas para erros

Como analisar registros de erros

Para ver os registros de erros do aplicativo:

Clique na guia Geração de registros.

Isso vai mostrar uma interface de registro onde é possível marcar/desmarcar vários recursos (projeto, recurso do Google Cloud, nomes de serviço etc.) junto com níveis de registro para filtrar as mensagens conforme necessário.

6605b68395185b89.png

Simular algumas solicitações inválidas para o serviço de inventário fornecendo IDs de produtos que não sejam I-1, I-2 e I-3. Por exemplo: uma solicitação incorreta é:

https://&lt;SERVICE_URL&gt;/inventory/I-999

Agora vamos pesquisar todos os WARNINGs que foram gerados pela nossa API quando um ID de produto incorreto for fornecido na consulta.

Como criar uma política de alertas personalizada com base em registros para erros

Suponha que queremos prestar atenção na ocorrência de uma mensagem de erro muito específica para parte do aplicativo. Diga se notarmos um grande número de erros ao procurar IDs de produtos. Esse problema é sintoma de muitos problemas possíveis (um link defeituoso, inconsistência no banco de dados ou um bot que enumera nosso site). Embora seja difícil ou impossível imaginar todas as causas possíveis, o aplicativo que envia essa mensagem mesmo uma vez é um problema de alto nível do qual queremos estar cientes. Para alertar sobre isso, precisamos criar uma política com base nos dados em nossos registros de erros.

  1. Na caixa de consulta, insira os seguintes parâmetros:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "AVISO no app: solicitação de inventário recebida para ID do produto incorreto"

O código será semelhante a este:

f672154cfebf0051.png

  1. Clique em Executar consulta. Isso vai mostrar todas as solicitações que chegaram e têm esse problema.

77c190e3a2fab6bf.png

  1. Para converter o que foi descrito acima em um alerta, clique no botão Criar alerta exibido na Análise de registros, logo abaixo do campo de consulta, à direita:

4cd3fcf142189376.png

  1. Isso abrirá o formulário para criar uma política de alertas com base em registros.

b82446854bad87fc.png

  1. Use a consulta inicial para incluir os registros no alerta:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. Defina a frequência de notificação e a duração do incidente. Para fins do exemplo, é possível usar os valores mínimos para cada um:

bb3d96448ec998a1.png

  1. Por fim, na seção "Quem deve ser notificado?" selecione o canal de notificação do Pub/Sub criado anteriormente:

3593c48c29d4b76c.png

  1. Clique em Salvar. Para visualizar e gerenciar a política de alertas, visite a página Alertas e acesse Políticas: ca08ea380fb37c91.png

6. Parabéns

Parabéns! Você configurou a verificação de tempo de atividade para enviar alertas ao Pub/Sub.