Eu mergulhei na integração do Stackdriver Trace no Google Cloud Run. Posso fazê-lo funcionar com o agente, mas estou incomodado com algumas perguntas.
Dado que
- O agente Stackdriver agrega traços em um pequeno buffer e os envia periodicamente.
- O acesso à CPU é restrito quando um serviço Cloud Run não está manipulando uma solicitação.
- Não há gancho de desligamento para os serviços Cloud Run; você não pode limpar o buffer antes do desligamento: o contêiner recebe apenas um SIGKILL . Este é um sinal que você não pode captar do seu aplicativo.
- A execução de um processo em segundo plano que envia informações para fora do ciclo de solicitação-resposta parece violar o contrato do Knative Container Runtime
- As coleções de dados de log estão documentadas e não exigem a execução de um agente, mas não existe uma solução para telemetria.
- Encontrei um relatório de alguém com rastreamentos perdidos no Cloud Run usando a abordagem baseada em agente
Como o Google faz
Entrei no código-fonte do Cloud Endpoints ESP (a integração do Cloud Run está na versão beta) para ver se eles o resolvem de uma maneira diferente, mas o mesmo padrão é usado: há um buffer com rastreamentos (1s) e é limpo periodicamente.
Questão
Enquanto minha integração de rastreamento parece funcionar na minha configuração de teste, estou preocupado com rastreios incompletos e ausentes quando executo isso em um ambiente de produção.
Esse é um problema hipotético ou um problema real?
Parece que a maneira correta de abordar isso é escrever telemetria nos logs, em vez de usar um processo do agente. Isso é suportado pelo Stackdriver Trace?