Unsure when to use OpenTelemetry with Datadog? Start with Custom Instrumentation with the OpenTelemetry API to learn more.

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:

  1. Añade la instrumentación manual de OpenTelemetry deseada a tu código .NET siguiendo la documentación de la Instrumentación manual de OpenTelemetry .NET. Nota: Cuando esas instrucciones indiquen que tu código debe llamar al SDK de OpenTelemetry, llama a la biblioteca de rastreo de Datadog en su lugar.

  2. Instala la biblioteca de rastreo de .NET y activa el rastreador para tu servicio .NET Framework o tu servicio .NET Core (y .NET 5+). Fase beta: puedes hacerlo opcionalmente con la Instrumentación de paso único de APM.

  3. Establece la variable de entorno DD_TRACE_OTEL_ENABLED en true.

  4. Ejecuta tu aplicación.

Datadog combina estos tramos de OpenTelemetry con otros tramos de Datadog APM en una traza única de tu aplicación. También es compatible con la biblioteca de instrumentación de OpenTelemetry.

Creación de tramos personalizados

Para crear tramos manualmente que inicien una nueva traza independiente:

using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

// Iniciar un nuevo tramo
using (Activity? activity = Telemetry.ActivitySource.StartActivity("<RESOURCE NAME>"))
            {
  activity?.SetTag("operation.name", "custom-operation");
               // Hacer algo
            }

Creación de tramos

Para crear tramos personalizados dentro de un contexto de traza existente:

using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

using (Activity? parentScope = Telemetry.ActivitySource.StartActivity("<RESOURCE NAME>"))
{
   parentScope?.SetTag("operation.name", "manual.sortorders");
   using (Activity? childScope = Telemetry.ActivitySource.StartActivity("<RESOURCE NAME>"))
   {
       // Anidar con sentencias en el código para rastrear
       childScope?.SetTag("operation.name", "manual.sortorders.child");
       SortOrders();
   }
}

Añadir etiquetas al tramo

Añade etiquetas personalizadas a tus tramos para proporcionar un contexto adicional:

using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

public class ShoppingCartController : Controller
{
    private IShoppingCartRepository _shoppingCartRepository;

    [HttpGet]
    public IActionResult Index(int customerId)
    {
      Activity? activity =
      Telemetry.ActivitySource.StartActivity("<RESOURCE NAME>")

        // Añadir una etiqueta al tramo para usarlo en la interfaz de usuario web de Datadog
        activity?.SetTag("customer.id", customerId.ToString());

        var cart = _shoppingCartRepository.Get(customerId);

        return View(cart);
    }
}

Errores de ajuste en tramos

Establece la información de error en un tramo cuando se produce un error durante su ejecución.

try
{
    // hacer el trabajo que pueda arrojar una excepción
}
catch(Exception e)
{
    activity?.SetTag("error", 1);
    activity?.SetTag("error.msg", exception.Message);
    activity?.SetTag("error.stack", exception.ToString());
    activity?.SetTag("error.type", exception.GetType().ToString());
}

Propagación de contexto con extracción e inyección de encabezados

Puedes configurar la propagación de contexto para trazas distribuidas al inyectar y extraer encabezados. Consulta Propagación de contexto de traza para obtener información.

Leer más