Compartir a través de


Solución de problemas de OpenTelemetry en Python

En este artículo se describe cómo solucionar problemas de OpenTelemetry en Python.

Lista de comprobación para la solución de problemas

Paso 1: Habilitar el registro de diagnóstico

El exportador de Microsoft Azure Monitor usa la biblioteca de registro estándar de Python para su registro interno. A los registros de OpenTelemetry API y Exportador de Azure Monitor se les asigna un nivel de gravedad de WARNING o ERROR para la actividad irregular. El INFO nivel de gravedad se usa para la actividad regular o correcta.

De forma predeterminada, la biblioteca de registro de Python establece el nivel de gravedad en WARNING. Por lo tanto, debe cambiar el nivel de gravedad para ver los registros en esta configuración de gravedad. En el código de ejemplo siguiente se muestra cómo generar registros de todos los niveles de gravedad en la consola y un archivo:

...
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)
...

Paso 2: Probar la conectividad entre el host de la aplicación y el servicio de ingesta

Los SDK y agentes de Application Insights envían telemetría para que se ingieren como llamadas REST en nuestros puntos de conexión de ingesta. Para probar la conectividad desde el servidor web o el equipo host de la aplicación a los puntos de conexión del servicio de ingesta, use comandos cURL o solicitudes REST sin procesar de PowerShell. Para más información, consulte Solución de problemas de telemetría de aplicaciones que faltan en Azure Monitor Application Insights.

Paso 3: Evitar la telemetría duplicada

La telemetría duplicada suele deberse a la creación de varias instancias de procesadores o exportadores. Asegúrese de ejecutar solo un exportador y procesador a la vez para cada pilar de telemetría (registros, métricas y seguimiento distribuido).

En las secciones siguientes se describen escenarios que pueden provocar datos de telemetría duplicados.

Registros de seguimiento duplicados en Azure Functions

Si ve un par de entradas para cada registro de seguimiento en Application Insights, probablemente ha habilitado los siguientes tipos de instrumentación de registro:

  • Instrumentación de registro nativa en Azure Functions
  • Instrumentación azure-monitor-opentelemetry de registro dentro de la distribución

Para evitar la duplicación, puede deshabilitar el registro de la distribución, pero dejar habilitada la instrumentación de registro nativo en Azure Functions. Para ello, establezca la variable Nonede OTEL_LOGS_EXPORTER entorno en .

Telemetría duplicada en Azure Functions "Always On"

Si la opción AlwaysOn de Azure Functions está establecida en Activado, Azure Functions mantiene algunos procesos en ejecución en segundo plano una vez completada cada ejecución. Por ejemplo, supongamos que tiene una función de temporizador de cinco minutos que llama a configure_azure_monitor cada vez. Después de 20 minutos, es posible que tenga cuatro exportadores de métricas que se ejecutan al mismo tiempo. Esta situación podría ser el origen de la telemetría de métricas duplicadas.

En esta situación, establezca la opción AlwaysOn enDesactivado o intente apagar manualmente los proveedores entre cada configure_azure_monitor llamada. Para apagar cada proveedor, ejecute llamadas de apagado para cada medidor, seguimiento y proveedor de registradores actuales, como se muestra en el código siguiente:

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

Libros de Azure y cuadernos de Jupyter Notebook

Los libros de Azure y los cuadernos de Jupyter Notebook pueden mantener los procesos de los exportadores en ejecución en segundo plano. Para evitar la telemetría duplicada, borre la memoria caché antes de realizar más llamadas a configure_azure_monitor.

Paso 4: Asegúrese de que se recopilan los datos de solicitud de Flask

Si implementa una aplicación de Flask, es posible que no pueda recopilar datos de tabla requests de Application Insights mientras usa la biblioteca cliente openTelemetry Distro de Azure Monitor para Python. Este problema podría producirse si no estructura import las declaraciones correctamente. Es posible que importe el marco de trabajo de la flask.Flask aplicación web antes de llamar a la configure_azure_monitor función para instrumentar la biblioteca de Flask. Por ejemplo, el código siguiente no instrumenta correctamente la aplicación flask:

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

configure_azure_monitor()

app = Flask(__name__)

En su lugar, se recomienda importar el flask módulo en su conjunto y, a continuación, llamar configure_azure_monitor a para configurar OpenTelemetry para usar Azure Monitor antes de acceder a flask.Flask:

from azure.monitor.opentelemetry import configure_azure_monitor
import flask

configure_azure_monitor()

app = flask.Flask(__name__)

Como alternativa, puede llamar a configure_azure_monitor antes de importar flask.Flask:

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

from flask import Flask

app = Flask(__name__)

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.