Biblioteca cliente de distribución de Opentelemetry de Azure Monitor para Python: versión 1.1.1
La distribución de Azure Monitor de Python de Opentelemetry proporciona varios componentes instalables disponibles para una solución de supervisión de Azure Monitor de Opentelemetry. Permite instrumentar las aplicaciones de Python para capturar y notificar telemetría a Azure Monitor a través de los exportadores de Azure Monitor.
Esta distribución instala automáticamente las siguientes bibliotecas:
- Exportadores de OpenTelemetry de Azure Monitor
- Subconjunto de instrumentaciones de OpenTelemetry que se admiten oficialmente como se muestra a continuación.
Instrumentaciones admitidas oficialmente
Las instrumentaciones openTelemetry permiten la recopilación automática de solicitudes enviadas desde bibliotecas instrumentadas subyacentes. A continuación se muestra una lista de instrumentaciones de OpenTelemetry que se incluyen con la distribución de Azure Monitor. Estas instrumentaciones están habilitadas de forma predeterminada. Consulte la sección Uso siguiente para obtener información sobre cómo no participar en estas instrumentaciones.
Si desea agregar compatibilidad con otra instrumentación de OpenTelemetry, envíe una solicitud de característica. Mientras tanto, puede usar manualmente la instrumentación de OpenTelemetry a través de sus propias API (es instrument()
decir, ) en el código. Consulte aquí para ver un ejemplo.
Conceptos clave
Este paquete agrupa una serie de componentes de OpenTelemetry y Azure Monitor para habilitar la recopilación y el envío de telemetría a Azure Monitor. Para la instrumentación MANUAL, use la configure_azure_monitor
función . Todavía no se admite la instrumentación AUTOMÁTICA.
Los exportadores de OpenTelemetry de Azure Monitor son los principales componentes para hacerlo. Podrá usar los exportadores y sus API directamente a través de este paquete. Vaya a la documentación del exportador para comprender cómo funcionan los componentes de OpenTelemetry y Azure Monitor para habilitar la recopilación y exportación de telemetría.
Actualmente, todas las instrumentaciones disponibles en OpenTelemetry están en estado beta, lo que significa que no son estables y pueden tener cambios importantes en el futuro. Se están realizando esfuerzos para insertarlos en un estado más estable.
Introducción
Requisitos previos
Para usar este paquete, debe tener:
- Una suscripción de Azure (cree una cuenta gratuita).
- Azure Monitor: uso de Application Insights
- SDK de Opentelemetry: SDK de Opentelemetry para Python
- Python 3.7 o posterior: instalación de Python
Instalar el paquete
Instale la distribución de Opentelemetry de Azure Monitor con pip:
pip install azure-monitor-opentelemetry
Uso
Puede usar configure_azure_monitor
para configurar la instrumentación de la aplicación en Azure Monitor. configure_azure_monitor
admite los argumentos opcionales siguientes. Todos los parámetros de paso tienen prioridad sobre cualquier variable de entorno relacionada.
Parámetro | Descripción | Variable de entorno |
---|---|---|
connection_string |
El cadena de conexión del recurso de Application Insights. El cadena de conexión se rellenará automáticamente desde la APPLICATIONINSIGHTS_CONNECTION_STRING variable de entorno si no se pasa explícitamente. |
APPLICATIONINSIGHTS_CONNECTION_STRING |
logger_name |
Nombre del registrador de Python en el que se recopila la telemetría. | N/A |
instrumentation_options |
Diccionario anidado que determina qué instrumentaciones habilitar o deshabilitar. Sus nombres de biblioteca hacen referencia a las instrumentaciones. Por ejemplo, {"azure_sdk": {"enabled": False}, "flask": {"enabled": False}, "django": {"enabled": True}} deshabilitará Azure Core Tracing y la instrumentación de Flask, pero dejará Django y las demás instrumentaciones predeterminadas habilitadas. La OTEL_PYTHON_DISABLED_INSTRUMENTATIONS variable de entorno que se explica a continuación también se puede usar para deshabilitar las instrumentaciones. |
N/A |
Puede configurar más con variables de entorno de OpenTelemetry como: | Variable de entorno | Descripción | |-------------|----------------------| | OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES | Especifica el recurso OpenTelemetry asociado a la aplicación. | | OTEL_LOGS_EXPORTER
| Si se establece en None
, deshabilita la recopilación y exportación de la telemetría de registro. | | OTEL_METRICS_EXPORTER
| Si se establece en None
, deshabilita la recopilación y exportación de telemetría de métricas. | | OTEL_TRACES_EXPORTER
| Si se establece en None
, deshabilita la recopilación y exportación de telemetría de seguimiento distribuido. | | OTEL_BLRP_SCHEDULE_DELAY
| Especifica el intervalo de exportación de registro en milisegundos. Tiene como valor predeterminado 5000. | | OTEL_BSP_SCHEDULE_DELAY
| Especifica el intervalo de exportación de seguimiento distribuido en milisegundos. Tiene como valor predeterminado 5000. | | OTEL_TRACES_SAMPLER_ARG
| Especifica la proporción de telemetría de seguimiento distribuido que se va a muestrear. Los valores aceptados están en el intervalo [0,1]. El valor predeterminado es 1.0, lo que significa que no se muestrea ninguna telemetría. | | OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
| Especifica cuál de las instrumentaciones admitidas que se van a deshabilitar. Las instrumentaciones deshabilitadas no se instrumentarán como parte de configure_azure_monitor
. Sin embargo, todavía se pueden instrumentar manualmente con instrument()
directamente. Acepta una lista separada por comas de nombres de biblioteca en minúsculas. Por ejemplo, establezca en "psycopg2,fastapi"
para deshabilitar las instrumentaciones Psycopg2 y FastAPI. El valor predeterminado es una lista vacía, lo que habilita todas las instrumentaciones admitidas. | | OTEL_EXPERIMENTAL_RESOURCE_DETECTORS
| Variable de entorno de OpenTelemetry experimental que se usa para especificar Los detectores de recursos que se usarán para generar atributos de recursos. Se trata de una característica experimental y el nombre de esta variable y su comportamiento puede cambiar de una manera no compatible con versiones anteriores. El valor predeterminado es "azure_app_service,azure_vm" para habilitar Azure Resource Detectors para Azure App Service y máquina virtual de Azure. Para agregar o quitar detectores de recursos específicos, establezca la variable de entorno en consecuencia. Consulte la documentación del Detector de recursos de Python de OpenTelemetry para obtener más información. |
Configuraciones del exportador de OpenTelemetry de Azure Monitor
Puede pasar los parámetros de configuración del exportador de OpenTelemetry de Azure Monitor directamente a configure_azure_monitor
. Consulte la configuración adicional relacionada con la exportación aquí.
...
configure_azure_monitor(
connection_string="<your-connection-string>",
disable_offline_storage=True,
)
...
Ejemplos
Los ejemplos están disponibles aquí para demostrar cómo usar las opciones de configuración anteriores.
Supervisión en Azure Functions
Correlación de seguimiento
Las solicitudes entrantes con seguimiento que llegan a la aplicación de Python hospedada en Azure Functions no se correlacionarán automáticamente con la telemetría que se realiza el seguimiento dentro de ella. Para lograr manualmente la correlación de seguimiento, extraiga directamente como TraceContext
se muestra a continuación:
import azure.functions as func
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract
# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()
def main(req: func.HttpRequest, context) -> func.HttpResponse:
...
# Store current TraceContext in dictionary format
carrier = {
"traceparent": context.trace_context.Traceparent,
"tracestate": context.trace_context.Tracestate,
}
tracer = trace.get_tracer(__name__)
# Start a span using the current context
with tracer.start_as_current_span(
"http_trigger_span",
context=extract(carrier),
):
...
Problemas de registro
El propio trabajo de Azure Functions envía telemetría de registro sin el uso del SDK de Azure Monitor (la llamada a configure_azure_monitor()
). Esto hará que pueda experimentar entradas de telemetría duplicadas al enviar telemetría de registro. Nuestra recomendación a los clientes es usar únicamente el SDK, ya que permitirá una telemetría y características mucho más enriquecidas que usar la integrada proporcionada por el Azure Functions trabajador. Puede desactivar el registrador de telemetría de Azure Functions borrando la lista de controladores del registrador.
...
root_logger = logging.getLogger()
for handler in root_logger.handlers[:]:
root_logger.removeHandler(handler)
...
Asegúrese de llamar al anterior antes de que se configuren los registradores o la llamada a configure_azure_monitor()
.
También puede deshabilitar el registro a través de Azure Functions configuración.
v2.x y posteriores
...
{
"logging": {
...
"logLevel": {
"default": "None",
...
}
}
}
...
v1.x
...
{
"logger": {
"categoryFilter": {
"defaultLevel": "None",
...
}
}
}
...
Solución de problemas
El exportador genera excepciones definidas en Azure Core.
Pasos siguientes
Consulte la documentación para obtener más información .
Contribuciones
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más detalles, visite https://cla.microsoft.com.
Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo será necesario que lo haga una vez en todos los repositorios con nuestro CLA.
Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.
Documentación adicional
Azure SDK for Python