1. Introdução
Última atualização:21 de junho de 2023
Alertas sobre erros com base em registros para disponibilidade
Os alertas baseados 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 interrupções ou outros problemas que afetam os usuários, você pode tomar medidas para minimizar o impacto nos usuários e clientes.
Embora as verificações de tempo de atividade forneçam um panorama 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 ideia de qual proporção de usuários está enfrentando um problema.
Os erros podem surgir por vários motivos, desde falhas do usuário até manutenção e upgrades de sistemas, e até mesmo fatores externos ao sistema, como mau tempo. O importante nos alertas não é tentar antecipar todas as causas possíveis, mas escolher alguns sintomas principais que podem servir como ponto de partida 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. Isso permite integrar seus 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 crie um tópico e uma assinatura do Pub/Sub. Em seguida, crie 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, 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 baseado em registros
Este codelab se concentra na criação de um alerta para erros. Conceitos não relevantes e código 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 atual, use o menu suspenso:

Para criar um projeto no Google Cloud, siga estas etapas:
- Acesse o Console do Google Cloud Platform.
- Clique no botão Criar projeto.
- Insira um nome para seu projeto.
- Selecione uma conta de faturamento para o projeto.
- Clique no botão Criar.
Seu projeto será criado, e você vai acessar o painel dele. A partir daí, você pode começar a usar os serviços do Google Cloud.
Confira mais detalhes sobre cada etapa:
- Nome:o nome do projeto precisa ser exclusivo na sua 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 seu projeto.
Para mais informações, consulte a documentação do Google Cloud sobre como criar projetos.
3. Implantar o aplicativo de API
Qual é o assunto do aplicativo ou da API de exemplo?
Nosso aplicativo é um aplicativo simples da API Inventory que expõe um endpoint de API REST com algumas operações para listar os itens do inventário e receber a contagem de inventário de um item específico.
Depois de implantar a API e supondo que ela esteja hospedada em https://<somehost>, podemos acessar os endpoints da API da seguinte maneira:
https://<somehost>/inventory
Isso vai listar todos os itens de produto com os níveis de inventário disponíveis.
https://<somehost>/inventory/{productid}
Isso vai fornecer um único registro com o productid e o nível de inventário disponível para esse produto.
Os dados de resposta retornados estão no formato JSON.
Observação: este aplicativo de API é apenas para fins de demonstração e não representa uma implementação de API segura e robusta. O objetivo é ter um aplicativo rápido disponível para explorar o propósito principal do laboratório, ou seja, as operações do Google Cloud.
Dados de amostra e solicitação/resposta da API
O aplicativo não é alimentado por um banco de dados no back-end para simplificar. Ele contém três exemplos de IDs de produtos e os níveis de estoque disponíveis.
ID do produto | Nível de inventário disponível |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
Confira abaixo um exemplo de solicitação e resposta da API:
Solicitação de API | Resposta da API |
https://<somehost>/inventory | [ { "I-1": 10, "I-2": 20, "I-3": 30 }] |
https://<somehost>/inventory/I-1 | { "productid": "I-1", "qty": 10} |
https://<somehost>/inventory/I-2 | { "productid": "I-2", "qty": 20} |
https://<somehost>/inventory/I-200 | { "productid": I-200, "qty": -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:

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:

Essa máquina virtual contém 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 apenas com 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 o seguinte comando:
$ git clone https://github.com/rominirani/cloud-code-sample-repository.git
Isso vai criar uma pasta chamada "cloud-code-sample-repository" nessa pasta.
(Opcional) Executar o aplicativo no Cloud Shell
Para executar o aplicativo localmente, siga estas etapas:
- No terminal, navegue até a versão em Python da API com o seguinte comando:
$ cd cloud-code-sample-repository
$ cd python-flask-api
- No terminal, forneça o seguinte comando (no momento da redação, o Cloud Shell vem com o Python 3.9.x instalado e vamos usar a versão padrão. Se você planeja executar o código localmente no seu notebook, use o Python 3.8 ou mais recente:
$ python app.py
- É possível executar o comando a seguir para iniciar o servidor Python localmente.

Clique em "Visualizar na porta 8080". 5. Uma janela do navegador será aberta. Você vai receber um erro 404, mas não tem problema. Modifique o URL para que ele tenha apenas /inventory após o nome do host.
Por exemplo, na minha máquina, ele aparece assim:
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
Isso vai mostrar a lista de itens de inventário, conforme explicado anteriormente:

- Para interromper o servidor, acesse o terminal e pressione Ctrl-C.
Implantar o aplicativo
Agora vamos implantar esse aplicativo de API no Cloud Run. O processo envolveu o uso do cliente de linha de comando gcloud para executar o comando de implantação do código no Cloud Run.
No terminal, execute o seguinte comando gcloud:
$ gcloud run deploy --source .
Isso vai fazer várias perguntas, e alguns dos pontos estão mencionados abaixo:
- Nome do serviço (python-flask-api): use o padrão ou escolha algo como my-inventory-api
- API [run.googleapis.com] not enabled on project [613162942481]. Would you like to enable and retry (this will take a few minutes)? (y/N)? S
- Especifique uma região: escolha 31 (us-west-1)
- API [artifactregistry.googleapis.com] not enabled on project [613162942481]. Would you like to enable and retry (this will take a few minutes)? (y/N)? S
- A implantação da origem exige um repositório do Docker do Artifact Registry para armazenar contêineres criados. Um repositório chamado [cloud-run-source-deploy] na região [us-west1] será criado.
- Do you want to continue (Y/n)? S
- Allow unauthenticated invocations to [my-inventory-api] (y/N)? S
Eventualmente, isso vai iniciar o processo para pegar seu código-fonte, colocar em contêineres, enviar para o Artifact Registry e implantar o serviço e a revisão do Cloud Run. Tenha paciência durante esse processo, que pode levar de 3 a 4 minutos. Ele será concluído com o URL do serviço mostrado.
Confira um exemplo de execução abaixo:

Testar o aplicativo
Agora que implantamos o aplicativo no Cloud Run, é possível acessar o aplicativo de API da seguinte maneira:
- 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 chamar isso de<SERVICE_URL>. - Abra um navegador e acesse os três URLs a seguir para os endpoints da API:
<SERVICE_URL>/inventory<SERVICE_URL>/inventory/I-1<SERVICE_URL>/inventory/I-100
Ela precisa estar de acordo com as especificações que fornecemos em uma seção anterior com exemplos de solicitação e resposta da 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é o Cloud Run. Isso vai mostrar a lista de serviços em execução no Cloud Run. O serviço que você acabou de implantar vai aparecer. Dependendo do nome selecionado, você vai ver algo assim:

Clique no nome do serviço para ver os detalhes. Confira abaixo os detalhes da amostra:

Observe o URL, que é apenas o URL do serviço que você pode inserir no navegador e acessar a API Inventory que acabamos de implantar. Confira as métricas e outros detalhes.
Vamos começar com o pacote de operações do Google Cloud.
4. Criar 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:
- Pesquise Pub/Sub na caixa de pesquisa e acesse o serviço.

- Clique na guia Tópicos se ela ainda não estiver aberta.

- Clique no botão Criar tópico.

- Insira um nome fácil de reconhecer para o tema.

- Clique no botão Criar.

- Copie o Nome do tópico usando o botão do ícone de cópia. Você vai precisar dele na próxima seção.

5. Criar uma política de alertas para erros
Como analisar registros de erros
Para conferir os registros de erros do aplicativo:
Clique na guia Registro.
Isso vai mostrar uma interface de registro em que você pode selecionar/desmarcar especificamente vários recursos (projeto, recurso do Google Cloud, nomes de serviços etc.) junto com níveis de registro para filtrar as mensagens de registro conforme necessário.

Simule 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://<SERVICE_URL>/inventory/I-999
Agora vamos pesquisar todos os AVISOS gerados pela nossa API quando um ID de produto incorreto é fornecido na consulta.
Criar uma política de alertas personalizada com base em registros para erros
Suponha que queremos ficar atentos à ocorrência de uma mensagem de erro muito específica para parte do aplicativo. Por exemplo, se notarmos um grande número de erros ao pesquisar IDs de produtos. Esse problema é um sintoma de muitos problemas possíveis (um link ruim, inconsistência no banco de dados ou um bot enumerando 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 que queremos conhecer. Para alertar sobre isso, precisamos criar uma política com base nos dados dos nossos registros de erros.
- Na caixa de consulta, insira os seguintes parâmetros de consulta:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"
O código será semelhante a este:

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

- Para converter o exemplo acima em um alerta, clique no botão Criar alerta que aparece na Análise de registros logo abaixo do campo de consulta, à direita:

- Isso vai abrir o formulário para criar uma política de alertas baseada em registros.

- Use a consulta inicial para registros a serem incluídos no alerta:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

- Defina a frequência de notificação e a duração do incidente. Para o exemplo, use os valores mínimos para cada um:

- Por fim, em "Quem será notificado?", selecione o canal de notificação do Pub/Sub que você criou antes:

- Clique em Salvar. Para ver e gerenciar a política de alertas, acesse a página Alertas e verifique em "Políticas":

6. Parabéns
Parabéns, você configurou com sucesso sua verificação de tempo de atividade para enviar alertas ao Pub/Sub.