Python Custom Instrumentation using the OpenTelemetry API
This page is not yet available in Spanish. We are working on its translation.
If you have any questions or feedback about our current translation project,
feel free to reach out to us!Overview
There are a few reasons to manually instrument your applications with the OpenTelemetry API:
- You are not using Datadog supported library instrumentation.
- You want to extend the
ddtrace
library’s functionality. - You need finer control over instrumenting your applications.
The ddtrace
library provides several techniques to help you achieve these goals. The following sections demonstrate how to use the OpenTelemetry API for custom instrumentation to use with Datadog.
Configuración
Para configurar OpenTelemetry para utilizar el proveedor de traza de Datadog:
Si aún no has leído las instrucciones de autoinstrumentación y configuración, comienza por las Instrucciones de configuración de Python.
Establece la variable de entorno DD_TRACE_OTEL_ENABLED
en true
.
Creación de tramos personalizados
Para crear tramos personalizados dentro de un contexto de traza existente:
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
def do_work():
with tracer.start_as_current_span("operation_name") as span:
# Realiza el trabajo que quieres rastrear con el tramo
print("Doing work...")
# Cuando el bloque 'with' finaliza, el tramo se cierra automáticamente
Acceso a tramos activos
Para acceder al tramo activo en ese momento, utiliza la función get_current_span()
:
from opentelemetry import trace
current_span = trace.get_current_span()
# mejora 'current_span' con información
Añadir etiquetas al tramo
Añada atributos a un tramo para proporcionar contexto o metadatos adicionales.
Aquí encontrarás un ejemplo de cómo añadir atributos al tramo actual:
from opentelemetry import trace
current_span = trace.get_current_span()
current_span.set_attribute("attribute_key1", 1)
Añadir eventos de tramos
Para añadir eventos de tramos se requiere la versión 2.9.0 o posterior del SDK.
Puedes añadir eventos de tramos utilizando la API add_event
. Este método requiere un parámetro name
y acepta opcionalmente los parámetros attributes
y timestamp
. El método crea un nuevo evento de tramo con las propiedades especificadas y lo asocia al tramo correspondiente.
- Nombre [obligatorio]: Una cadena que representa el nombre del evento.
- Atributos [opcional]: Cero o más pares clave-valor con las siguientes propiedades:
- La clave debe ser una cadena no vacía.
- El valor puede ser:
- Un tipo primitivo: cadena, booleano o número.
- Una matriz homogénea de valores de tipo primitivo (por ejemplo, una matriz de cadenas).
- Las matrices anidadas y las matrices que contienen elementos de distintos tipos de datos no están permitidas.
- Marca de tiempo [opcional]: Una marca de tiempo UNIX que representa la hora en que se produjo un evento. Se espera en
microseconds
.
Los siguientes ejemplos muestran distintas formas de añadir eventos a un tramo:
span.add_event("Event With No Attributes")
span.add_event("Event With Some Attributes", {"int_val": 1, "string_val": "two", "int_array": [3, 4], "string_array": ["5", "6"], "bool_array": [True, False]})
Para obtener más información, consulta la especificación de OpenTelemetry.
Registro de excepciones
Para registrar excepciones, utiliza la API record_exception
. Este método requiere un parámetro exception
y acepta opcionalmente un parámetro UNIX timestamp
. Crea un nuevo evento de tramo que incluya atributos de excepción estandarizados y lo asocia al tramo correspondiente.
Los siguientes ejemplos muestran diferentes formas de registrar excepciones:
span.record_exception(Exception("Error Message"))
span.record_exception(Exception("Error Message"), {"status": "failed"})
Para obtener más información, consulta la especificación de OpenTelemetry.
Referencias adicionales
Más enlaces, artículos y documentación útiles: