Este documento descreve como modificar um aplicativo Python para coletar dados de rastreamento e métricas usando a estrutura OpenTelemetry de código aberto e como gravar logs JSON estruturados para padronização. Este documento também fornece informações sobre um exemplo de aplicativo Python que você pode instalar e executar. O aplicativo usa a estrutura da web Flask e está configurado para gerar métricas, rastreamentos e logs.
Para saber mais sobre instrumentação, consulte os seguintes documentos:
Sobre instrumentação manual e de código zero
Para esta linguagem, OpenTelemetry define instrumentação de código zero como a prática de coletar telemetria de bibliotecas e estruturas sem fazer alterações no código. No entanto, você precisa instalar módulos e definir variáveis de ambiente.
Este documento não descreve a instrumentação de código zero. Para obter informações sobre esse tópico, consulte Instrumentação de código zero do Python .
Para obter informações gerais, consulte Instrumentação OpenTelemetry para Python .
Antes de começar
Enable the Cloud Logging, Cloud Monitoring, and Cloud Trace APIs.
Instrumente seu aplicativo para coletar rastreamentos, métricas e logs
Para instrumentar seu aplicativo para coletar dados de rastreamento e métricas e escrever JSON estruturado para padronização, execute as etapas a seguir, conforme descrito nas seções subsequentes deste documento:
Configurar OpenTelemetria
Este aplicativo de exemplo está configurado para usar o OpenTelemetry Python SDK para exportar rastreamentos e métricas usando o protocolo OTLP . Por padrão, o OpenTelemetry Python SDK usa o formato W3C Trace Context para propagar trace context , o que garante que os spans tenham o relacionamento pai-filho correto dentro de um trace.
O exemplo de código a seguir ilustra um módulo Python para configurar o OpenTelemetry. Para visualizar o exemplo completo, clique em more_vert Mais e selecione Exibir no GitHub .
O aplicativo Flask depende do Gunicorn para atender solicitações HTTP seguindo as recomendações do guia Deploying to Production do Flask. Gunicorn inicia várias cópias do seu aplicativo em execução em processos de trabalho independentes para aumentar o rendimento. Para garantir que as métricas dos processos de trabalho não entrem em conflito entre si, recomendamos que cada processo de trabalho defina um valor exclusivo para o atributo de recurso service.instance.id
. Uma maneira de fazer isso é incluir o ID do processo em service.instance.id
. Para obter mais informações, consulte Colisões de séries temporais .
Para obter mais informações e opções de configuração, consulte Instrumentação OpenTelemetry Python .
Configurar o registro estruturado
Para gravar logs estruturados vinculados a rastreamentos, configure seu aplicativo para gerar logs no formato JSON para padronizar com chaves que contêm informações de rastreamento. O exemplo de código a seguir ilustra como configurar a biblioteca logging
padrão para gerar logs estruturados JSON usando a biblioteca python-json-logger
e como usar o pacote opentelemetry-instrumentation-logging
para incluir informações de rastreamento.
A configuração anterior extrai informações sobre o intervalo ativo da mensagem de log e, em seguida, adiciona essas informações como atributos ao log estruturado JSON. Esses atributos podem então ser usados para correlacionar um log com um rastreamento:
-
logging.googleapis.com/trace
: nome do recurso do rastreamento associado à entrada de registro. -
logging.googleapis.com/spanId
: o ID do intervalo com o rastreamento associado à entrada de registro. -
logging.googleapis.com/trace_sampled
: o valor deste campo deve sertrue
oufalse
.
Para obter mais informações sobre esses campos, consulte a estrutura LogEntry
.
Execute um aplicativo de exemplo configurado para coletar telemetria
O aplicativo de exemplo usa formatos neutros de fornecedor, incluindo JSON para logs e OTLP para métricas e rastreamentos. A telemetria do aplicativo é roteada para Google Cloud usando o OpenTelemetry Collector
configurado com exportadores do Google. Ele usa Flask para atender solicitações HTTP e a biblioteca de solicitações para fazer solicitações HTTP. Para gerar métricas e rastreamentos para o cliente e servidor HTTP, o aplicativo de exemplo instala as bibliotecas de instrumentação opentelemetry-instrumentation-flask
e opentelemetry-instrumentation-requests
:
O aplicativo tem dois endpoints:
O endpoint
/multi
é tratado pelamulti
função. O gerador de carga no aplicativo emite solicitações para o terminal/multi
. Quando esse endpoint recebe uma solicitação, ele envia entre três e sete solicitações para o endpoint/single
no servidor local.O endpoint
/single
é tratado pela funçãosingle
. Quando esse endpoint recebe uma solicitação, ele fica suspenso por um pequeno atraso e depois responde com uma string.
Baixe e implante o aplicativo
Para executar a amostra, faça o seguinte:
-
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
Vá para o diretório de amostra:
cd opentelemetry-operations-python/samples/instrumentation-quickstart
Crie e execute o exemplo:
docker compose up --abort-on-container-exit
Se você não estiver executando no Cloud Shell, execute o aplicativo com a variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
apontando para um arquivo de credenciais. 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
Veja suas métricas
A instrumentação OpenTelemetry no aplicativo de amostra gera métricas do Prometheus que você pode visualizar 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 Google Cloud console, acesse a página do explorador de métricas leaderboard :
Vá para o explorador de métricas
Se você usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitoramento .
- Na barra de ferramentas do Google Cloud console, selecione seu Google Cloud projeto. Para configurações do App Hub , selecione o projeto host do App Hub ou o projeto de gerenciamento da pasta habilitada para aplicativo.
- No elemento Métrica , expanda o menu Selecionar uma métrica , insira
http_server
na barra de filtros e use os submenus para selecionar um tipo de recurso e uma métrica específicos:- No menu Recursos ativos , selecione Prometheus Target .
- No menu Categorias de métricas ativas , selecione Http .
- No menu Métricas ativas , selecione uma métrica.
- Clique em Aplicar .
- Configure como os dados são visualizados.
Quando as medidas 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 obter mais informações, consulte Tipos, tipos e conversões .
Quando valores inteiros ou duplos são medidos, como 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 Aggregation como None .Para obter mais informações sobre como configurar um gráfico, consulte Selecionar métricas ao usar o Metrics Explorer.
Ver seus rastros
Pode levar alguns minutos até que seus dados de rastreamento estejam disponíveis. Por exemplo, quando dados de rastreamento são recebidos pelo seu projeto, o Google Cloud Observability pode precisar criar um banco de dados para armazenar esses dados. A criação do banco de dados pode levar alguns minutos e, durante esse período, nenhum dado de rastreamento estará disponível para visualização.
Para visualizar seus dados de rastreamento, faça o seguinte:
No Google Cloud console, acesse a página do Trace Explorer :
Vá para o Explorador de rastreamento
Você também pode encontrar esta página usando a barra de pesquisa.
- Na seção de tabela da página, selecione uma linha com o nome do intervalo
/multi
. No gráfico de Gantt no painel Detalhes do rastreamento , selecione o intervalo rotulado como
/multi
.Um painel é aberto exibindo 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 agente do usuário do chamador.
Para visualizar os logs associados a esse rastreamento, selecione a guia Logs e Eventos .
A guia mostra logs individuais. Para visualizar os detalhes da entrada de log, expanda a entrada de log. Você também pode clicar em Visualizar logs e visualizar o log usando o Logs Explorer.
Para obter mais informações sobre como usar o Cloud Trace Explorer, consulte Encontrar e explorar traces .
Ver seus registros
No Logs Explorer, você pode inspecionar seus logs e também visualizar rastreamentos associados, quando eles existirem.
No Google Cloud console, acesse a página Explorador de registros :
Acesse o Explorador de registros
Se você usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Logging .
Localize um log com a descrição de
handle /multi request
.Para visualizar os detalhes do log, expanda a entrada do log.
Clique
Rastreia uma entrada de log com a mensagem "lidar com /multi solicitação" e selecione Exibir detalhes do rastreamento .
Um painel de detalhes do rastreamento é aberto e exibe o rastreamento selecionado.
Seus dados de log podem estar disponíveis vários minutos antes de seus dados de rastreio estarem disponíveis. Se você encontrar um erro ao visualizar dados de rastreio ao procurar um rastreio por ID ou ao seguir as etapas desta tarefa, aguarde um ou dois minutos e tente a ação novamente.
Para obter mais informações sobre como usar o Logs Explorer, consulte Visualizar logs usando o Logs Explorer .
O que vem a seguir
- OpenTelemetria
- Especificação OTLP
- Registro estruturado
- Solução de problemas do serviço gerenciado do Prometheus
- Solucionar problemas de rastreamento na nuvem
Este documento descreve como modificar um aplicativo Python para coletar dados de rastreamento e métricas usando a estrutura OpenTelemetry de código aberto e como gravar logs JSON estruturados para padronização. Este documento também fornece informações sobre um exemplo de aplicativo Python que você pode instalar e executar. O aplicativo usa a estrutura da web Flask e está configurado para gerar métricas, rastreamentos e logs.
Para saber mais sobre instrumentação, consulte os seguintes documentos:
Sobre instrumentação manual e de código zero
Para esta linguagem, OpenTelemetry define instrumentação de código zero como a prática de coletar telemetria de bibliotecas e estruturas sem fazer alterações no código. No entanto, você precisa instalar módulos e definir variáveis de ambiente.
Este documento não descreve a instrumentação de código zero. Para obter informações sobre esse tópico, consulte Instrumentação de código zero do Python .
Para obter informações gerais, consulte Instrumentação OpenTelemetry para Python .
Antes de começar
Enable the Cloud Logging, Cloud Monitoring, and Cloud Trace APIs.
Instrumente seu aplicativo para coletar rastreamentos, métricas e logs
Para instrumentar seu aplicativo para coletar dados de rastreamento e métricas e escrever JSON estruturado para padronização, execute as etapas a seguir, conforme descrito nas seções subsequentes deste documento:
Configurar OpenTelemetria
Este aplicativo de exemplo está configurado para usar o OpenTelemetry Python SDK para exportar rastreamentos e métricas usando o protocolo OTLP . Por padrão, o OpenTelemetry Python SDK usa o formato W3C Trace Context para propagar trace context , o que garante que os spans tenham o relacionamento pai-filho correto dentro de um trace.
O exemplo de código a seguir ilustra um módulo Python para configurar o OpenTelemetry. Para visualizar o exemplo completo, clique em more_vert Mais e selecione Exibir no GitHub .
O aplicativo Flask depende do Gunicorn para atender solicitações HTTP seguindo as recomendações do guia Deploying to Production do Flask. Gunicorn inicia várias cópias do seu aplicativo em execução em processos de trabalho independentes para aumentar o rendimento. Para garantir que as métricas dos processos de trabalho não entrem em conflito entre si, recomendamos que cada processo de trabalho defina um valor exclusivo para o atributo de recurso service.instance.id
. Uma maneira de fazer isso é incluir o ID do processo em service.instance.id
. Para obter mais informações, consulte Colisões de séries temporais .
Para obter mais informações e opções de configuração, consulte Instrumentação OpenTelemetry Python .
Configurar o registro estruturado
Para gravar logs estruturados vinculados a rastreamentos, configure seu aplicativo para gerar logs no formato JSON para padronizar com chaves que contêm informações de rastreamento. O exemplo de código a seguir ilustra como configurar a biblioteca logging
padrão para gerar logs estruturados JSON usando a biblioteca python-json-logger
e como usar o pacote opentelemetry-instrumentation-logging
para incluir informações de rastreamento.
A configuração anterior extrai informações sobre o intervalo ativo da mensagem de log e, em seguida, adiciona essas informações como atributos ao log estruturado JSON. Esses atributos podem então ser usados para correlacionar um log com um rastreamento:
-
logging.googleapis.com/trace
: nome do recurso do rastreamento associado à entrada de registro. -
logging.googleapis.com/spanId
: o ID do intervalo com o rastreamento associado à entrada de registro. -
logging.googleapis.com/trace_sampled
: o valor deste campo deve sertrue
oufalse
.
Para obter mais informações sobre esses campos, consulte a estrutura LogEntry
.
Execute um aplicativo de exemplo configurado para coletar telemetria
O aplicativo de exemplo usa formatos neutros de fornecedor, incluindo JSON para logs e OTLP para métricas e rastreamentos. A telemetria do aplicativo é roteada para Google Cloud usando o OpenTelemetry Collector
configurado com exportadores do Google. Ele usa Flask para atender solicitações HTTP e a biblioteca de solicitações para fazer solicitações HTTP. Para gerar métricas e rastreamentos para o cliente e servidor HTTP, o aplicativo de exemplo instala as bibliotecas de instrumentação opentelemetry-instrumentation-flask
e opentelemetry-instrumentation-requests
:
O aplicativo tem dois endpoints:
O endpoint
/multi
é tratado pelamulti
função. O gerador de carga no aplicativo emite solicitações para o terminal/multi
. Quando esse endpoint recebe uma solicitação, ele envia entre três e sete solicitações para o endpoint/single
no servidor local.O endpoint
/single
é tratado pela funçãosingle
. Quando esse endpoint recebe uma solicitação, ele fica suspenso por um pequeno atraso e depois responde com uma string.
Baixe e implante o aplicativo
Para executar a amostra, faça o seguinte:
-
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
Vá para o diretório de amostra:
cd opentelemetry-operations-python/samples/instrumentation-quickstart
Crie e execute o exemplo:
docker compose up --abort-on-container-exit
Se você não estiver executando no Cloud Shell, execute o aplicativo com a variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
apontando para um arquivo de credenciais. 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
Veja suas métricas
A instrumentação OpenTelemetry no aplicativo de amostra gera métricas do Prometheus que você pode visualizar 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 Google Cloud console, acesse a página do explorador de métricas leaderboard :
Vá para o explorador de métricas
Se você usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitoramento .
- Na barra de ferramentas do Google Cloud console, selecione seu Google Cloud projeto. Para configurações do App Hub , selecione o projeto host do App Hub ou o projeto de gerenciamento da pasta habilitada para aplicativo.
- No elemento Métrica , expanda o menu Selecionar uma métrica , insira
http_server
na barra de filtros e use os submenus para selecionar um tipo de recurso e uma métrica específicos:- No menu Recursos ativos , selecione Prometheus Target .
- No menu Categorias de métricas ativas , selecione Http .
- No menu Métricas ativas , selecione uma métrica.
- Clique em Aplicar .
- Configure como os dados são visualizados.
Quando as medidas 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 obter mais informações, consulte Tipos, tipos e conversões .
Quando valores inteiros ou duplos são medidos, como 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 Aggregation como None .Para obter mais informações sobre como configurar um gráfico, consulte Selecionar métricas ao usar o Metrics Explorer.
Ver seus rastros
Pode levar alguns minutos até que seus dados de rastreamento estejam disponíveis. Por exemplo, quando dados de rastreamento são recebidos pelo seu projeto, o Google Cloud Observability pode precisar criar um banco de dados para armazenar esses dados. A criação do banco de dados pode levar alguns minutos e, durante esse período, nenhum dado de rastreamento estará disponível para visualização.
Para visualizar seus dados de rastreamento, faça o seguinte:
No Google Cloud console, acesse a página do Trace Explorer :
Vá para o Explorador de rastreamento
Você também pode encontrar esta página usando a barra de pesquisa.
- Na seção de tabela da página, selecione uma linha com o nome do intervalo
/multi
. No gráfico de Gantt no painel Detalhes do rastreamento , selecione o intervalo rotulado como
/multi
.Um painel é aberto exibindo 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 agente do usuário do chamador.
Para visualizar os logs associados a esse rastreamento, selecione a guia Logs e Eventos .
A guia mostra logs individuais. Para visualizar os detalhes da entrada de log, expanda a entrada de log. Você também pode clicar em Visualizar logs e visualizar o log usando o Logs Explorer.
Para obter mais informações sobre como usar o Cloud Trace Explorer, consulte Encontrar e explorar traces .
Ver seus registros
No Logs Explorer, você pode inspecionar seus logs e também visualizar rastreamentos associados, quando eles existirem.
No Google Cloud console, acesse a página Explorador de registros :
Acesse o Explorador de registros
Se você usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Logging .
Localize um log com a descrição de
handle /multi request
.Para visualizar os detalhes do log, expanda a entrada do log.
Clique
Rastreia uma entrada de log com a mensagem "lidar com /multi solicitação" e selecione Exibir detalhes do rastreamento .
Um painel de detalhes do rastreamento é aberto e exibe o rastreamento selecionado.
Seus dados de log podem estar disponíveis vários minutos antes de seus dados de rastreio estarem disponíveis. Se você encontrar um erro ao visualizar dados de rastreio ao procurar um rastreio por ID ou ao seguir as etapas desta tarefa, aguarde um ou dois minutos e tente a ação novamente.
Para obter mais informações sobre como usar o Logs Explorer, consulte Visualizar logs usando o Logs Explorer .
O que vem a seguir
- OpenTelemetria
- Especificação OTLP
- Registro estruturado
- Solução de problemas do serviço gerenciado do Prometheus
- Solucionar problemas de rastreamento na nuvem