Neste documento, descrevemos como modificar um aplicativo Python para coletar dados de trace e métrica usando o framework de código aberto OpenTelemetry e como gravar registros JSON estruturados para saída padrão. Este documento também fornece informações sobre um app Python de amostra que pode ser instalado e executado. O app usa o framework da Web Flask e está configurado para gerar métricas, traces e registros.
Sobre a instrumentação manual e automática
Para essa linguagem, o OpenTelemetry define a instrumentação automática como a prática de coletar telemetria de bibliotecas e frameworks sem fazer alterações no código. No entanto, você tem módulos de instalação e define variáveis de ambiente.
Este documento não descreve as informações automáticas. Para mais informações sobre esse tópico, consulte Instrumentação automática para Python.
Para informações gerais, consulte Instrumentação do OpenTelemetry para Python.
Antes de começar
Enable the Cloud Logging, Cloud Monitoring, and Cloud Trace APIs.
Instrumentar o app para coletar traces, métricas e registros
Para instrumentar o app para coletar dados de rastreamento e métrica e gravar um JSON estruturado para saída padrão, siga as etapas a seguir, conforme descrito nas próximas seções deste documento:
Configurar o OpenTelemetry
Este app de exemplo está configurado para usar o SDK do Python do OpenTelemetry para exportar rastros e métricas usando o protocolo OTLP. Por padrão, o modelo do SDK do Python da OpenTelemetry usa o formato Contexto de Rastreamento do W3C para propagar o contexto do trace, garantindo que os períodos tenham a relação pai-filho correta em um trace.
O exemplo de código a seguir ilustra um módulo Python para configurar o OpenTelemetry: Para ver o exemplo completo, clique em more_vert Mais e selecione Ver no GitHub.
O app Flask depende do Gunicorn para exibir solicitações HTTP seguindo as
recomendações no guia Como implantar na produção do Flask.
O Gunicorn inicia várias cópias do app em execução em processos de worker independentes.
para aumentar a capacidade de processamento. Para garantir que as métricas dos processos do worker não entrem em conflito
entre si, recomendamos que cada processo de worker defina um valor único
do atributo de recurso service.instance.id
. Uma maneira de fazer isso é incluir o
ID de processo no service.instance.id
. Para mais informações, consulte
Colisões de séries temporais.
Para mais informações e opções de configuração, consulte Instrumentação de Python. da OpenTelemetry.
Configurar a geração de registros estruturados
Para gravar registros estruturados vinculados a traces, configure o app para
a saída de registros formatados em JSON para saída padrão com chaves que contêm informações
de trace. O exemplo de código a seguir ilustra como configurar o ambiente
logging
para gerar registros estruturados JSON usando a biblioteca
python-json-logger
e como usar o
pacote opentelemetry-instrumentation-logging
para incluir informações
de trace.
A configuração anterior extrai informações sobre o período ativo da mensagem de registro e, em seguida, adiciona essas informações como atributos ao registro estruturado JSON. Esses atributos podem ser usados para correlacionar um registro com um trace:
logging.googleapis.com/trace
: nome do recurso do trace associado à entrada de registro.logging.googleapis.com/spanId
: o ID do período com o trace associado à entrada de registro.logging.googleapis.com/trace_sampled
: o valor desse campo precisa sertrue
oufalse
.
Para mais informações sobre esses campos, consulte a estrutura
LogEntry
.
Executar um app de exemplo configurado para coletar telemetria
O aplicativo de exemplo usa formatos neutros em relação a fornecedores, incluindo JSON para registros e OTLP
para métricas e traces. A telemetria do app é roteada para o Google Cloud usando
o Collector
do OpenTelemetry configurado com os exportadores do Google. Ela usa o
Flask para atender a solicitações HTTP, e a biblioteca de solicitações para
fazer solicitações HTTP. Para gerar métricas e traces para o cliente HTTP e
servidor, o app de amostra instala as bibliotecas de instrumentação
opentelemetry-instrumentation-flask
e
opentelemetry-instrumentation-requests
:
O app tem dois endpoints:
O endpoint
/multi
é processado pela funçãomulti
. O gerador de carga no app emite solicitações para o endpoint/multi
. Quando esse endpoint recebe uma solicitação, ele envia de três a sete solicitações para o endpoint/single
no servidor local.O endpoint
/single
é processado pela funçãosingle
. Quando esse endpoint recebe uma solicitação, ele fica suspenso por um pequeno atraso e depois responde com uma string.
Fazer o download e implantar o app
Para executar a amostra:
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Clone o repositório:
git clone https://github.com/GoogleCloudPlatform/opentelemetry-operations-python
Acesse o diretório da amostra:
cd opentelemetry-operations-python/samples/instrumentation-quickstart
Crie e execute a amostra:
docker compose up --abort-on-container-exit
Se você não estiver usando o Cloud Shell, execute o aplicativo com a variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
apontando para um arquivo de credenciais. O Application Default Credentials fornece um arquivo de credenciais em$HOME/.config/gcloud/application_default_credentials.json
.# Set environment variables export GOOGLE_CLOUD_PROJECT="PROJECT_ID" export GOOGLE_APPLICATION_CREDENTIALS="$HOME/.config/gcloud/application_default_credentials.json" export USERID="$(id -u)" # Run docker compose -f docker-compose.yaml -f docker-compose.creds.yaml up --abort-on-container-exit
Ver suas métricas
A instrumentação do OpenTelemetry no app de amostra gera métricas do Prometheus, que podem ser visualizadas usando o Metrics Explorer:
Prometheus/http_server_duration_milliseconds/histogram
registra a duração das solicitações do servidor e armazena os resultados em um histograma.Prometheus/http_client_duration_milliseconds/histogram
registra a duração das solicitações do cliente e armazena os resultados em um histograma.
-
No Console do Google Cloud, acesse a página do leaderboard Metrics Explorer:
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoramento.
- No elemento Metric, expanda o menu Selecionar uma métrica,
digite
http_server
na barra de filtro e use os submenus para selecionar um tipo de recurso e métrica específicos:- No menu Active resources, selecione Prometheus Target.
- No menu Categorias de métrica ativas, selecione Instância.
- No menu Métricas ativas, selecione uma métrica de faturamento†.
- Clique em Aplicar.
- Configure a visualização dos dados.
Quando as medições de uma métrica são cumulativas, o Metrics Explorer normaliza automaticamente os dados medidos pelo período de alinhamento, o que resulta na exibição de uma taxa no gráfico. Para mais informações, consulte Tipos, tipos e conversões.
Quando valores inteiros ou duplos são medidos, como acontece com as duas métricas
counter
, o Metrics Explorer soma automaticamente todas as séries temporais. Para visualizar os dados das rotas HTTP/multi
e/single
, defina o primeiro menu da entrada Agregação como Nenhum.Para mais informações sobre como configurar um gráfico, consulte Selecionar métricas ao usar o Metrics Explorer.
Visualizar os rastros
Para visualizar os dados de trace, faça o seguinte:
-
No console do Google Cloud, acesse a página Explorador de traces:
Acessar o Explorador de traces
Também é possível encontrar essa página usando a barra de pesquisa.
- No gráfico de dispersão, selecione um rastro com o URI de
/multi
. No diagrama de Gantt no painel Detalhes do trace, selecione o período rotulado como
/multi
.Um painel é aberto com informações sobre a solicitação HTTP. Esses detalhes incluem o método, o código de status, o número de bytes e o user agent do autor da chamada.
Para visualizar os registros associados a esse trace, selecione a guia Registros e eventos.
A guia mostra registros individuais. Para exibir os detalhes da entrada de registro, expanda a entrada de registro. Também é possível clicar em Ver registros e ver o registro usando a Análise de registros.
Para mais informações sobre como usar o explorador do Cloud Trace, consulte Encontrar e explorar traces.
Acessar os registros
Na Análise de registros, é possível inspecionar os registros e visualizar os traces associados, quando eles existirem.
-
No console do Google Cloud, acesse a página do Análise de registros.
Acessar a Análise de registros
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.
Localize um registro com a descrição de
handle /multi request
.Para ver os detalhes do registro, expanda a entrada.
Clique em Traces em uma entrada de registro com a mensagem "handle /multi request" e selecione View trace details.
O painel Detalhes do trace é aberto e mostra o trace selecionado.
Para mais informações sobre como usar a Análise de registros, consulte Ver registros usando a Análise de registros.
A seguir
- OpenTelemetry
- Visão geral do OTLP
- Geração de registros estruturados
- Solução de problemas do Managed Service para Prometheus
- Resolver problemas do Cloud Trace