Este tutorial ensina como resolver problemas de erros de tempo de execução encontrados quando usa o Eventarc para encaminhar eventos do Cloud Storage para um serviço do Cloud Run não autenticado através dos registos de auditoria do Google Cloud.
Crie um repositório padrão do Artifact Registry
Crie um repositório padrão do Artifact Registry para armazenar a sua imagem de contentor:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Substitua REPOSITORY
por um nome exclusivo para o repositório.
Crie um contentor do Cloud Storage
Crie um contentor do Cloud Storage em cada uma das duas regiões como origem do evento para o serviço do Cloud Run:
Crie um contentor em
us-east1
:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
Crie um contentor em
us-west1
:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
Depois de criar a origem do evento, implemente o serviço de receção de eventos no Cloud Run.
Implemente o recetor de eventos
Implemente um serviço do Cloud Run que receba e registe eventos.
Obtenha o exemplo de código clonando o repositório do GitHub:
Ir
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
Reveja o código deste tutorial, que consiste no seguinte:
Um controlador de eventos que recebe o evento recebido como um CloudEvent no pedido HTTP
POST
:Ir
Java
.NET
Node.js
Python
Um servidor que usa o controlador de eventos:
Ir
Java
.NET
Node.js
Python
Um Dockerfile que define o ambiente operacional do serviço. O conteúdo do Dockerfile varia consoante o idioma:
Ir
Java
.NET
Node.js
Python
Crie a imagem de contentor com o Cloud Build e carregue a imagem para o Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
Implemente a imagem do contentor no Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
Quando a implementação é bem-sucedida, a linha de comandos apresenta o URL do serviço.
Crie um acionador
Depois de implementar um serviço do Cloud Run, configure um acionador para ouvir eventos do Cloud Storage através de registos de auditoria.
Crie um acionador do Eventarc para ouvir eventos do Cloud Storage encaminhados através dos registos de auditoria do Google Cloud:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Esta ação cria um acionador denominado
troubleshoot-trigger
.Para confirmar que
troubleshoot-trigger
foi criado, execute o seguinte comando:gcloud eventarc triggers list
O resultado deve ser semelhante ao seguinte:
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
Gere e veja um evento
Confirme que implementou o serviço com êxito e que pode receber eventos do Cloud Storage.
Crie e carregue um ficheiro para o contentor de armazenamento
BUCKET1
:echo "Hello World" > random.txt gcloud storage cp random.txt gs://${BUCKET1}/random.txt
Monitorize os registos para verificar se o serviço recebeu um evento. Para ver a entrada do registo, conclua os seguintes passos:
Filtre as entradas do registo e devolva o resultado no formato JSON:
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=json
Procure uma entrada de registo semelhante a:
"textPayload": "Detected change in Cloud Storage bucket: ..."
Tenha em atenção que, inicialmente, não é devolvida nenhuma entrada de registo. Isto indica que existe um problema na configuração que tem de investigar.
Investigue o problema
Siga o processo de investigação para saber por que motivo o serviço não está a receber eventos.
Tempo de inicialização
Embora o acionador seja criado imediatamente, pode demorar até dois minutos para que um acionador propague e filtre eventos. Execute o seguinte comando para confirmar que um acionador está ativo:
gcloud eventarc triggers list
O resultado indica o estado do acionador. No exemplo seguinte,
troubleshoot-trigger
vai estar ativo às 14:16:56:
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
Assim que o acionador estiver ativo, carregue novamente um ficheiro para o contentor de armazenamento. Os eventos são escritos nos registos do serviço do Cloud Run. Se o serviço não receber eventos, pode estar relacionado com o tamanho dos eventos.
Registos de auditoria
Neste tutorial, os eventos do Cloud Storage são encaminhados através dos registos de auditoria do Cloud e enviados para o Cloud Run. Confirme que os registos de auditoria estão ativados para o Cloud Storage.
Na Google Cloud consola, aceda à página Registos de auditoria.
- Selecione a caixa de verificação Google Cloud Storage.
- Certifique-se de que os tipos de registos Admin Read, Data Read e Data Write estão selecionados.
Depois de ativar os registos de auditoria do Cloud, carregue novamente o ficheiro para o contentor de armazenamento e verifique os registos. Se o serviço continuar a não receber eventos, isto pode estar relacionado com a localização do acionador.
Localização do acionador
Podem existir vários recursos em localizações diferentes e tem de filtrar os eventos de origens que se encontram na mesma região que o destino do Cloud Run. Para mais informações, consulte as localizações suportadas pelo Eventarc e compreenda as localizações do Eventarc.
Neste tutorial, implementou o serviço do Cloud Run em
us-central1
. Como definiu eventarc/location
como us-central1
, também criou um acionador na mesma localização.
No entanto, criou dois contentores do Cloud Storage nas localizações us-east1
e us-west1
. Para receber eventos dessas localizações, tem de criar acionadores do Eventarc nessas localizações.
Crie um acionador do Eventarc localizado em us-east1
:
Confirme a localização do acionador existente:
gcloud eventarc triggers describe troubleshoot-trigger
Defina a localização e a região para
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Implemente novamente o recetor de eventos criando e implementando a imagem do contentor no Cloud Run.
Crie um novo acionador localizado em
us-east1
:gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Verifique se o acionador foi criado:
gcloud eventarc triggers list
Um acionador pode demorar até dois minutos a inicializar antes de começar a encaminhar eventos.
Para confirmar que o acionador está agora implementado corretamente, gere e veja um evento.
Outros problemas que pode encontrar
Pode encontrar outros problemas ao usar o Eventarc.
Tamanho do evento
Os eventos que envia não podem exceder os limites de tamanho dos eventos.
Um acionador que enviou eventos anteriormente deixou de funcionar
Verifique se a origem está a gerar eventos. Verifique os registos de auditoria da nuvem e certifique-se de que o serviço monitorizado está a emitir registos. Se os registos forem gravados, mas os eventos não forem enviados, contacte o apoio técnico.
Verifique se existe um tópico do Pub/Sub com o mesmo nome do acionador. O Eventarc usa o Pub/Sub como camada de transporte e usa um tópico Pub/Sub existente ou cria automaticamente um tópico e gere-o por si.
- Para ver uma lista de acionadores, consulte
gcloud eventarc triggers list
. Para listar os tópicos do Pub/Sub, execute o seguinte comando:
gcloud pubsub topics list
Verifique se o nome do tópico Pub/Sub inclui o nome do acionador criado. Por exemplo:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Se o tópico do Pub/Sub estiver em falta, crie novamente o acionador para um fornecedor, um tipo de evento e um destino do Cloud Run específicos.
- Para ver uma lista de acionadores, consulte
Confirme que o acionador foi configurado para o serviço.
Na Google Cloud consola, aceda à página Serviços.
Clique no nome do serviço para abrir a respetiva página Detalhes do serviço.
Clique no separador Acionadores.
O acionador do Eventarc associado ao serviço deve ser indicado.
Valide o estado do tópico e da subscrição do Pub/Sub através dos tipos de métricas do Pub/Sub.
Pode monitorizar mensagens não entregues encaminhadas através da métrica
subscription/dead_letter_message_count
. Esta métrica mostra o número de mensagens não entregues que o Pub/Sub encaminha a partir de uma subscrição.Se as mensagens não forem publicadas no tópico, verifique os registos de auditoria da nuvem e certifique-se de que o serviço monitorizado está a emitir registos. Se os registos forem gravados, mas os eventos não forem enviados, contacte o apoio técnico.
Pode monitorizar as subscrições push através da métrica
subscription/push_request_count
e agrupando a métrica porresponse_code
esubcription_id
.Se forem comunicados erros de envio, verifique os registos do serviço do Cloud Run. Se o ponto final de receção devolver um código de estado não OK, indica que o código do Cloud Run não está a funcionar como esperado e tem de contactar o apoio técnico.
Para mais informações, consulte o artigo Crie políticas de alertas de limite métrico.