Compartir a través de


Recopilación y lectura de datos de OpenTelemetry en Azure Container Apps

Usando un agente de datos de OpenTelemetry con el entorno de Azure Container Apps, puede elegir enviar datos de observabilidad en un formato OpenTelemetry mediante:

  • Canalización de datos de un agente a un punto de conexión deseado. Entre las opciones de destino se incluyen Datadog, Application Insights de Azure Monitor y cualquier punto de conexión compatible con OpenTelemetry Protocol (OTLP).

  • Cambiar fácilmente los puntos de conexión de destino sin tener que volver a configurar cómo emiten los datos y sin tener que ejecutar manualmente un agente de OpenTelemetry.

En este artículo se muestra cómo configurar un agente de OpenTelemetry para la aplicación contenedora.

Configuración de un agente de OpenTelemetry

Los agentes de OpenTelemetry residen en el entorno de la aplicación contenedora. Puede configurar la configuración del agente a través de una plantilla de ARM o llamadas de Bicep al entorno, o a través de la CLI, o a través de Terraform (a través del Proveedor de AzAPI).

Cada tipo de punto de conexión (Azure Monitor Application Insights, DataDog y OTLP) tiene requisitos de configuración específicos.

Requisitos previos

La habilitación del agente OpenTelemetry administrado para el entorno no significa automáticamente que el agente recopile datos. Los agentes solo envían datos en función de tus configuraciones y de que hayas instrumentado correctamente tu código.

Configure el código fuente

Prepare la aplicación para recopilar datos mediante la instalación del SDK de OpenTelemetry y siga las directrices de OpenTelemetry para instrumentar métricas, registros o seguimientos.

Inicializar puntos de conexión

Para poder enviar datos a un destino de recopilación, primero debe crear una instancia del servicio de destino. Por ejemplo, si desea enviar datos a Application Insights de Azure Monitor, debe crear una instancia de Application Insights con antelación.

El agente de OpenTelemetry administrado acepta los siguientes destinos:

  • Azure Monitor Application Insights (Herramienta de Monitorización de Aplicaciones de Azure)
  • Datadog
  • Cualquier punto de conexión de OTLP (por ejemplo: New Relic o Honeycomb)

Nota:

Microsoft proporciona compatibilidad con los datos enviados a Application Insights de Azure Monitor. Una vez que los datos se almacenan en cualquier sistema que no sea de Microsoft, el soporte técnico relacionado con los datos es responsabilidad de la organización del punto de conexión.

En la tabla siguiente se muestra el tipo de datos que puede enviar a cada destino:

Destino Registros Métricas Huellas
Azure App Insights No
Datadog
Punto de conexión configurado del protocolo OpenTelemetry (OTLP)

Azure Monitor Application Insights (Herramienta de Monitorización de Aplicaciones de Azure)

El único detalle de configuración necesario en Application Insights es la cadena de conexión. Una vez que tenga la cadena de conexión, puede configurar el agente a través de la plantilla de ARM de la aplicación de contenedor, con comandos de la CLI de Azure o Terraform.

La cadena de conexión contiene una clave de instrumentación, que es un identificador único que se usa para asociar la telemetría a un recurso específico de Application Insights. Las claves de instrumentación no son tokens de seguridad ni claves de seguridad y no se consideran secretos.

Si desea proteger el recurso de Application Insights contra el uso incorrecto, consulte Autenticación de Microsoft Entra para Application Insights. Sin embargo, el recurso de Application Insights debe permitir la autenticación local para recibir datos del agente de datos OpenTelemetry.

Antes de implementar esta plantilla, reemplace el <PLACEHOLDERS> por los valores.

{
  ...
  "properties": {
    "appInsightsConfiguration ": {
      "connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
    }
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration":{
        "destinations": ["appInsights"]
      },
      "logsConfiguration": {
        "destinations": ["appInsights"]
      }
    }
  }
}

Datadog

No es necesario ejecutar el agente de Datadog en la aplicación de contenedor si habilita el agente de OpenTelemetry administrado para su entorno.

La configuración del agente de OpenTelemetry requiere un valor para site y key desde la instancia de Datadog. Recopile estos valores de la instancia de Datadog según esta tabla:

Propiedad de instancia de Datadog Propiedad de configuración del agente OpenTelemetry
DD_SITE site
DD_API_KEY key

Si creó la instancia de Datadog en Azure Portal, consulte Claves de API para obtener más información.

Una vez que tenga estos detalles de configuración, puede configurar el agente a través de la plantilla de ARM o Bicep de la aplicación contenedora o con comandos de la CLI de Azure.

Evite especificar el valor de un secreto, como la clave de API de Datadog, directamente en un entorno de producción. En su lugar, use una referencia a un secreto almacenado en Azure Key Vault.

Debe habilitar el almacén de claves para la implementación de plantillas. Para habilitar la implementación de plantillas, cree el almacén de claves con la propiedad enabledForTemplateDeployment habilitada, o ejecute el siguiente comando de la CLI de Azure, reemplazando <KEY_VAULT_NAME> por su valor.

az keyvault update --name <KEY_VAULT_NAME> --enabled-for-template-deployment true

Para más información, vea:

Cree un archivo de parámetros para recuperar la clave de API de Datadog desde una instancia de Azure Key Vault.

Antes de implementar los siguientes archivos, reemplace el <PLACEHOLDERS> por sus valores.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "datadogapikey": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT_NAME>"
        },
        "secretName": "<KEY_VAULT_SECRET_NAME>"
      }
    }
  }
}

Ahora puede hacer referencia al parámetro datadogapikey en la plantilla de ARM.

{
  ...
  "parameters": {
    "datadogapikey": {
      "type": "securestring"
    }
  },
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "destinationsConfiguration":{
        ...
        "dataDogConfiguration":{
          "site": "<YOUR_DATADOG_SUBDOMAIN>.datadoghq.com",
          "key": "<YOUR_DATADOG_KEY>"
        }
      },
      "tracesConfiguration":{
        "destinations": ["dataDog"]
      },
      "metricsConfiguration": {
        "destinations": ["dataDog"]
      }
    }
  }
}

Para implementar el recurso, ejecute el siguiente comando de la CLI de Azure, reemplazando el <PLACEHOLDERS> por los valores.

az deployment group create \
  --resource-group <RESOURCE_GROUP> \
  --template-file <ARM_TEMPLATE_FILE> \
  --parameters <PARAMETER_FILE>

Punto de conexión de OTLP

Un punto de conexión del protocolo OpenTelemetry (OTLP) es un destino de datos de telemetría que consume datos de OpenTelemetry. En la configuración de la aplicación, puede agregar varios puntos de conexión de OTLP. En el ejemplo siguiente se agregan dos puntos de conexión y se envían los siguientes datos a estos puntos de conexión.

Nombre del punto final Datos enviados al punto de conexión
oltp1 Métricas y/o trazas
oltp2 Registros o seguimientos

Aunque puede configurar tantos puntos de conexión configurados por OTLP como desee, cada punto de conexión debe tener un nombre distinto.

{
  "properties": {
    "appInsightsConfiguration": {},
    "openTelemetryConfiguration": {
      "destinationsConfiguration":{
        "otlpConfigurations": [
          {
            "name": "otlp1",
            "endpoint": "ENDPOINT_URL_1",
            "insecure": false,
            "headers": "api-key-1=key"
          },
          {
            "name": "otlp2",
            "endpoint": "ENDPOINT_URL_2",
            "insecure": true
          }
        ]
      },
      "logsConfiguration": { 
        "destinations": ["otlp2"]
      },
      "tracesConfiguration":{
        "destinations": ["otlp1", "otlp2"]
      },
      "metricsConfiguration": {
        "destinations": ["otlp1"]
      }
    }
  }
}

Nombre Descripción
resource-group Nombre del grupo de recursos. Puede configurar el grupo predeterminado mediante az configure --defaults group=<NAME>.
name Nombre del entorno de Container Apps.
otlp-name Un nombre que usted elige para identificar el punto de conexión configurado con OTLP.
endpoint Dirección URL del destino que recibe los datos recopilados.
insecure Predeterminado: verdadero. Define si se habilita la seguridad de transporte de cliente para la conexión gRPC del exportador. Si es false, se requiere el parámetro headers.
headers Valores separados por espacios, en formato "key=value", que proporciona información necesaria para la seguridad de los puntos de conexión de OTLP. Ejemplo: "api-key=key other-config-value=value".

Configurar destinos de datos

Para configurar un agente, use la matriz destinations para definir qué agentes envía la aplicación los datos. Las claves válidas son appInsights, dataDog o el nombre del punto de conexión de OTLP personalizado. Puede controlar cómo se comporta un agente en función del tipo de datos y las opciones relacionadas con el punto de conexión.

Por tipo de datos

Opción Ejemplo
Seleccione un tipo de datos. Puede configurar registros, métricas o seguimientos individualmente.
Habilitar o deshabilitar cualquier tipo de datos. Puede optar por enviar solo trazas y ningún otro dato.
Envíe un tipo de datos a varios puntos de conexión. Puede enviar registros tanto a DataDog como a un punto de conexión configurado por OTLP.
Enviar diferentes tipos de datos a diferentes ubicaciones. Puede enviar seguimientos a un punto de conexión de OTLP y métricas a DataDog.
Deshabilitar el envío de todos los tipos de datos. Puede optar por no enviar ningún dato a través del agente de OpenTelemetry.

Por punto de conexión

  • Solo puede configurar un solo punto de conexión de Application Insights y Datadog cada uno a la vez.
  • Aunque puede definir más de un punto de conexión configurado por OTLP, cada uno debe tener un nombre distinto.

En la plantilla de ARM de ejemplo siguiente se muestra cómo usar un punto de conexión de OTLP denominado customDashboard. Envía:

  • seguimientos a App Insights y customDashboard
  • registros a App Insights y customDashboard
  • métricas a DataDog y customDashboard
{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

Exportar señales de OpenTelemetry de componentes del sistema

Desde la versión 2024-08-02-preview de la API de OpenTelemetry, puede configurar el entorno de la aplicación de contenedores para exportar las señales de OpenTelemetry de los componentes del sistema a sus destinos de datos.

Use la siguiente configuración para exportar seguimientos de Dapr y métricas de KEDA.

Seguimientos de Dapr

En la plantilla de ARM de ejemplo siguiente se muestra cómo exportar seguimientos de Dapr a los destinos de seguimiento.

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ],
        "includeDapr": true
      }
    }
  }
}

Para más información sobre cómo usar Dapr en aplicaciones de contenedor, consulte Introducción a Dapr.

Métricas de KEDA

En la siguiente plantilla de ARM de ejemplo se muestra cómo exportar las métricas de KEDA a los destinos para métricas.

{
  ...
  "properties": {
    ...
    "openTelemetryConfiguration": {
      ...
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ],
        "includeKeda": true
      }
    }
  }
}

Para más información sobre la compatibilidad con KEDA en Container Apps, consulte Establecimiento de reglas de escalado.

Ejemplo de configuración de OpenTelemetry

En la plantilla de ejemplo siguiente, se muestra cómo configurar la aplicación contenedora para recopilar datos de telemetría mediante Azure Monitor Application Insights, Datadog y con un agente de OTLP personalizado denominado customDashboard.

Este ejemplo funciona con el archivo de parámetros que se usa para recuperar la clave de Datadog API de una instancia de Azure Key Vault.

Antes de implementar esta plantilla, reemplace el <PLACEHOLDERS> por los valores.

{
  "location": "eastus",
  "properties": {
    "appInsightsConfiguration": {
      "connectionString": "<APP_INSIGHTS_CONNECTION_STRING>"
    },
    "openTelemetryConfiguration": {
      "destinationsConfiguration": {
        "dataDogConfiguration": {
          "site": "datadoghq.com",
          "key": "parameters('datadogapikey')]"
        },
        "otlpConfigurations": [
          {
            "name": "customDashboard",
            "endpoint": "<OTLP_ENDPOINT_URL>",
            "insecure": true
          }
        ]
      },
      "tracesConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "logsConfiguration": {
        "destinations": [
          "appInsights",
          "customDashboard"
        ]
      },
      "metricsConfiguration": {
        "destinations": [
          "dataDog",
          "customDashboard"
        ]
      }
    }
  }
}

Para obtener más información, consulte Microsoft.App/managedEnvironments.

Resistencia de datos

En caso de que se produzcan interrupciones de mensajería en un punto de conexión, el agente de OpenTelemetry usa el procedimiento siguiente para garantizar la resiliencia de los datos.

  • Almacenamiento en búfer en memoria y reintentos: el agente contiene datos en memoria y mantiene el reintento (con retroceso) durante hasta cinco minutos.
  • Eliminación de datos: si la cola con búfer se llena o el punto de conexión sigue inactivo tras los reintentos, el agente descarta los lotes más antiguos para evitar quedarse sin memoria.

Variables de entorno

El agente de OpenTelemetry inserta automáticamente un conjunto de variables de entorno en la aplicación en tiempo de ejecución.

Las dos primeras variables de entorno siguen la configuración estándar del exportador de OpenTelemetry y se usan en kits de desarrollo de software estándar de OTLP. Si establece explícitamente la variable de entorno en la especificación de la aplicación contenedora, el valor sobrescribe el valor insertado automáticamente.

Obtenga información sobre la configuración del exportador de OTLP, consulte Configuración del exportador de OTLP.

Nombre Descripción
OTEL_EXPORTER_OTLP_ENDPOINT Dirección URL del punto de conexión base para cualquier tipo de señal, con un número de puerto especificado opcionalmente. Esta configuración es útil cuando se envía más de una señal al mismo punto de conexión y se desea que una variable de entorno controle el punto de conexión. Ejemplo: http://otel.service.k8se-apps:4317/
OTEL_EXPORTER_OTLP_PROTOCOL Especifica el protocolo de transporte OTLP usado para todos los datos de telemetría. El agente administrado solo admite grpc. Valor: grpc.

Las otras tres variables de entorno son específicas de Azure Container Apps y siempre se insertan. Estas variables contienen las direcciones URL del punto de conexión del agente para cada tipo de datos específico (registros, métricas, seguimientos).

Estas variables solo son necesarias si está usando tanto el agente de OpenTelemetry administrado como otro agente de OpenTelemetry. El uso de estas variables proporciona control sobre cómo enrutar los datos entre los distintos agentes de OpenTelemetry.

Nombre Descripción Ejemplo
CONTAINERAPP_OTEL_TRACING_GRPC_ENDPOINT Dirección URL del punto de conexión solo para los datos de seguimiento. http://otel.service.k8se-apps:43178/v1/traces/
CONTAINERAPP_OTEL_LOGGING_GRPC_ENDPOINT Dirección URL del punto de conexión solo para los datos de registro. http://otel.service.k8se-apps:43178/v1/logs/
CONTAINERAPP_OTEL_METRIC_GRPC_ENDPOINT Dirección URL del punto de conexión solo para los datos de métricas. http://otel.service.k8se-apps:43178/v1/metrics/

Costos del agente de OpenTelemetry

El agente administrado de OpenTelemetry se ejecuta sin coste de proceso adicional. Microsoft aprovisiona y administra la infraestructura del agente en el entorno de Container Apps.

Sin embargo, usted es responsable de los cargos que aplican los servicios de destino a los que envía sus datos de telemetría. Consulte el servicio de destino para conocer sus términos y estructura de facturación. Por ejemplo, si envía datos a Application Insights de Azure Monitor y Datadog, es responsable de los cargos aplicados por ambos servicios.

Asignación de recursos del agente

El agente de OpenTelemetry administrado se aprovisiona con los siguientes recursos fijos:

  • CPU: 0,5 núcleos vCPU
  • Memoria: 1,5 GB de RAM
  • Réplicas: réplica única (no configurable)

Microsoft administra estos recursos y no aparecen en las métricas de facturación o consumo de recursos.

Limitaciones conocidas

  • Los datos del sistema, como los registros del sistema o las métricas estándar de Container Apps, no están disponibles para enviarse al agente de OpenTelemetry.
  • El punto de conexión de Application Insights no acepta métricas.
  • Las opciones de configuración se encuentran en el nivel de entorno. Puede enviar diferentes tipos de datos a distintos destinos, pero no puede dividir los datos por aplicación. Por ejemplo, en la misma aplicación puede enviar métricas a Datadog y seguimientos a App Insights.
  • El agente administrado solo admite el protocolo de transporte gRPC para los datos de telemetría.
  • El agente de OpenTelemetry administrado se ejecuta como una sola réplica y no se puede escalar ni configurar para alta disponibilidad.
  • Las métricas de estado y estado de salud del agente no están disponibles en este momento en el portal de Azure ni a través de las API de monitorización.
  • Los secretos (como las claves de API) deben especificarse directamente en plantillas: actualmente no se admite la integración de Azure Key Vault para la configuración del agente.

Preguntas más frecuentes

  • ¿Es necesario hacer referencia al SDK de OpenTelemetry en mi código?

    Sí. El SDK crea datos de telemetría y el agente administrado solo es responsable de enrutar los datos.

  • ¿Por qué el list comando devuelve null?

    Cuando se ejecuta az containerapp env telemetry otlp list, la respuesta es null cuando el valor es un token confidencial que necesita protección.

  • ¿Se me cobra por los recursos de computación del agente OpenTelemetry?

    No. Microsoft aprovisiona y administra la infraestructura del agente sin costo de proceso adicional. Solo se le cobra por los servicios de destino que reciben sus datos de telemetría.

  • ¿Puedo escalar el agente de OpenTelemetry o ejecutar varias réplicas?

    No. El agente administrado se ejecuta actualmente como una sola réplica con asignación de recursos fija (0,5 CPU, 1,5 GB de RAM). Actualmente no se admiten configuraciones de alta disponibilidad.

  • ¿Cómo puedo supervisar el estado y la salud del agente de OpenTelemetry?

    Las métricas de estado y salud del agente no se exponen actualmente. Esta capacidad está prevista para una versión posterior.

Pasos siguientes