Compartilhar via


Solucionar problemas do OpenTelemetry em Python

Este artigo discute como solucionar problemas do OpenTelemetry em Python.

Lista de verificação de solução de problemas

Habilitar log de diagnósticos

O Exportador do Microsoft Azure Monitor usa a biblioteca de log padrão do Python para seu log interno. Os logs da API do OpenTelemetry e do Exportador do Azure Monitor recebem um nível de gravidade de WARNING ou ERROR para atividades irregulares. O nível de gravidade INFO é usado para atividades regulares ou bem-sucedidas.

Por padrão, a biblioteca de log do Python define o nível de gravidade como WARNING. Portanto, você deve alterar o nível de gravidade para ver os logs nessa configuração de gravidade. O código de exemplo a seguir mostra como gerar logs de todos os níveis de gravidade para o console e um arquivo:

...
import logging

logging.basicConfig(format = "%(asctime)s:%(levelname)s:%(message)s", level = logging.DEBUG)

logger = logging.getLogger(__name__)
file = logging.FileHandler("example.log")
stream = logging.StreamHandler()
logger.addHandler(file)
logger.addHandler(stream)
...

Testar a conectividade entre o host do aplicativo e o serviço de ingestão

Os SDKs e agentes do Application Insights enviam telemetria para serem ingeridos como chamadas REST em nossos pontos de extremidade de ingestão. Para testar a conectividade do servidor Web ou do computador host do aplicativo com os pontos de extremidade do serviço de ingestão, use comandos cURL ou solicitações REST brutas do PowerShell. Para obter mais informações, consulte Solucionar problemas de telemetria de aplicativo ausente no Application Insights do Azure Monitor.

Evitar telemetria duplicada

A telemetria duplicada geralmente é causada se você criar várias instâncias de processadores ou exportadores. Certifique-se de executar apenas um exportador e processador por vez para cada pilar de telemetria (logs, métricas e rastreamento distribuído).

As seções a seguir descrevem cenários que podem causar telemetria duplicada.

Logs de rastreamento duplicados no Azure Functions

Se você vir um par de entradas para cada log de rastreamento no Application Insights, provavelmente habilitou os seguintes tipos de instrumentação de log:

  • A instrumentação de log nativa no Azure Functions
  • A instrumentação de log azure-monitor-opentelemetry dentro da distribuição

Para evitar a duplicação, você pode desabilitar o log da distribuição, mas deixar a instrumentação de log nativa no Azure Functions habilitada. Para fazer isso, defina a variável de ambiente OTEL_LOGS_EXPORTER como None.

Telemetria duplicada no Azure Functions "Always On"

Se a configuração Always On no Azure Functions estiver definida como On, o Azure Functions manterá alguns processos em execução em segundo plano após a conclusão de cada execução. Por exemplo, suponha que você tenha uma função de temporizador de cinco minutos que chama configure_azure_monitor cada vez. Após 20 minutos, você poderá ter quatro exportadores de métricas em execução ao mesmo tempo. Essa situação pode ser a origem da telemetria de métricas duplicadas.

Nessa situação, defina a configuração Always On como Off ou tente desligar manualmente os provedores entre cada chamada configure_azure_monitor. Para desligar cada provedor, execute chamadas de desligamento para cada provedor de medidor, rastreador e agente atual, conforme mostrado no código a seguir:

get_meter_provider().shutdown()
get_tracer_provider().shutdown()
get_logger_provider().shutdown()

Pastas de trabalho do Azure e Jupyter Notebooks

As pastas de trabalho do Azure e os Jupyter Notebooks podem manter os processos do exportador em execução em segundo plano. Para evitar telemetria duplicada, limpe o cache antes de fazer mais chamadas para configure_azure_monitor.

Ausência de telemetria de Solicitações em aplicativos FastAPI ou Flask

Se você não tiver dados da tabela Requests, mas não outras categorias de dados, sua estrutura HTTP pode não estar instrumentada corretamente. Esse problema pode ocorrer em aplicativos FastAPI e Flask usando a biblioteca de clientes do Azure Monitor OpenTelemetry Distro para Python se você não estruturar suas import declarações corretamente. Você pode estar importando o fastapi.FastAPI ou o flask.Flask, respectivamente, antes de chamar a função configure_azure_monitor para instrumentar as bibliotecas FastAPI e Flask. Por exemplo, o código a seguir não instrumenta com sucesso os aplicativos FastAPI e Flask:

# FastAPI

from azure.monitor.opentelemetry import configure_azure_monitor
from fastapi import FastAPI

configure_azure_monitor()

app = FastAPI()
# Flask

from azure.monitor.opentelemetry import configure_azure_monitor
from flask import Flask

configure_azure_monitor()

app = Flask(__name__)

Em vez disso, recomendamos que você importe os módulos fastapi ou flask como um todo e, em seguida, chame configure_azure_monitor para configurar o OpenTelemetry para usar o Azure Monitor antes de acessar fastapi.FastAPI ou flask.Flask:

# FastAPI

from azure.monitor.opentelemetry import configure_azure_monitor
import fastapi

configure_azure_monitor()

app = fastapi.FastAPI(__name__)
# Flask

from azure.monitor.opentelemetry import configure_azure_monitor
import flask

configure_azure_monitor()

app = flask.Flask(__name__)

Alternativamente, você pode chamar o configure_azure_monitor antes de importar fastapi.FastAPI ou flask.Flask:

# FastAPI

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

from fastapi import FastAPI

app = FastAPI(__name__)
# Flask

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

from flask import Flask

app = Flask(__name__)

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.