Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.