Présentation

Envoyez des traces depuis des charges de travail serverless directement vers Datadog via HTTP/protobuf, sans nécessiter de Datadog Agent ou d’OpenTelemetry Collector. Si votre plateforme apparaît dans le tableau Plateformes gérées, utilisez plutôt son endpoint dédié.

Les charges de travail serverless peuvent également envoyer des logs et des métriques via les endpoints d’ingestion généraux logs OTLP et métriques OTLP. Les attributs de ressource sur cette page s’appliquent à tous les signaux exportés par votre application.

Plateformes prises en charge :

  • AWS : Lambda, ECS Fargate
  • Azure : Container Apps, Web Apps (App Service), Azure Functions
  • GCP : Cloud Run, Cloud Run Functions, GKE Autopilot
Utilisez l'ingestion directe lorsqu'il n'est pas pratique d'exécuter un Collector (par exemple, avec Lambda). Si vous pouvez exécuter un Collector, consultez OpenTelemetry Collector pour l'enrichissement des métadonnées, la normalisation et l'échantillonnage centralisé.

Prérequis

La configuration suivante s’applique à toutes les plateformes.

Protocole : http/protobuf ou http/json. grpc n’est pas pris en charge.

En-têtes requis :

  • dd-api-key : Votre clé Datadog API.
  • dd-otlp-source : Définissez sur serverless.
  • compute_stats : Définissez sur true. Requis pour les métriques de trace.

Nom du service : Définissez OTEL_SERVICE_NAME pour identifier votre service. Sans cela, des traces apparaissent sous la forme unknown_service.

Attributs de ressource : Définissez les attributs spécifiques à la plateforme avec OTEL_RESOURCE_ATTRIBUTES. Consultez chaque onglet de fournisseur cloud ci-dessous pour les attributs requis et facultatifs.

Identifiez les charges de travail avec les attributs de plateforme sur cette page, et non avec host.name. Pour les recommandations de nom d’hôte pour l’ingestion OTLP directe, consultez Nom d’hôte et marquage.

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=""
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-service"

Configuration

Selon votre site Datadog, qui est : Remplacez ${YOUR_ENDPOINT} par dans les exemples suivants.

Sélectionnez votre fournisseur cloud pour la configuration des attributs de ressource spécifiques à la plateforme :

Lambda

La couche Lambda AWS Distro for OpenTelemetry (ADOT) fournit une instrumentation automatique et une détection des ressources pour les fonctions Lambda.

Ajoutez la couche ADOT à votre fonction Lambda et configurez les variables d’environnement suivantes :

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${YOUR_ENDPOINT}"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-lambda-function"

La couche ADOT gère automatiquement la détection des attributs de ressource. Si vous n’utilisez pas ADOT, définissez les attributs de ressource manuellement. cloud.provider est requis. Définissez faas.id (un ARN Lambda analysable) pour une identification complète de la plateforme ; si faas.id n’est pas disponible, définissez cloud.platform=aws_lambda à la place :

export OTEL_RESOURCE_ATTRIBUTES="cloud.provider=aws,faas.id=arn:aws:lambda:us-east-1:123456789012:function:my-function"
AttributRequisDescription
cloud.providerOuiDéfini sur aws
faas.idRecommandéARN de la fonction Lambda (préféré pour l’identification de la plateforme)
cloud.platformConditionnelDéfini sur aws_lambda si faas.id n’est pas défini
cloud.regionNonRégion AWS
faas.nameNonNom de la fonction
faas.versionNonVersion de la fonction
faas.instanceNonIdentifiant d’instance
faas.max_memoryNonMémoire maximale configurée (octets)
aws.log.group.namesNonNoms des groupes de logs CloudWatch (active la corrélation trace-log)
aws.log.stream.namesNonNoms des flux de logs CloudWatch

ECS Fargate

L’identification ECS Fargate est déterminée par l’ARN de la tâche et le type de lancement, et non par cloud.provider ou cloud.platform. Configurez le SDK OpenTelemetry pour exporter les traces directement depuis votre tâche ECS :

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${YOUR_ENDPOINT}"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-ecs-service"
export OTEL_RESOURCE_ATTRIBUTES="aws.ecs.task.arn=arn:aws:ecs:us-east-1:123456789012:task/my-cluster/1234567890abcdef,aws.ecs.launchtype=fargate"
AttributRequisDescription
aws.ecs.task.arnOuiARN de la tâche ECS
aws.ecs.launchtypeOuiDéfini sur fargate (insensible à la casse)
cloud.providerNonPar défaut sur aws
cloud.platformNonPar défaut sur aws_ecs
cloud.regionNonRégion AWS
cloud.availability_zoneNonZone de disponibilité
aws.ecs.cluster.arnNonARN du cluster
aws.ecs.task.familyNonFamille de définition de tâche
aws.ecs.task.idNonID de tâche
aws.ecs.task.revisionNonRévision de la définition de tâche
aws.log.group.namesNonNoms des groupes de logs CloudWatch (active la corrélation trace-log)
aws.log.stream.namesNonNoms des flux de logs CloudWatch
Le processeur de détection de ressources Azure du collecteur OpenTelemetry ne prend en charge que les machines virtuelles. Les détecteurs de ressources Azure au niveau du SDK prennent en charge certaines plateformes (Web Apps, Functions), mais leur couverture varie selon le SDK utilisé. Définir cloud.provider, cloud.platform, et cloud.resource_id manuellement comme chemin fiable pour toutes les plateformes serverless Azure.

Container Apps

La prise en charge du détecteur de ressources Azure pour Container Apps varie en fonction du SDK utilisé. Définissez les attributs de ressource manuellement :

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${YOUR_ENDPOINT}"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-container-app"
export OTEL_RESOURCE_ATTRIBUTES="cloud.provider=azure,cloud.platform=azure.container_apps,cloud.resource_id=/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/containerApps/{appName}"

Web Apps (App Service)

Utilisez le package SDK du détecteur de ressources Azure (la couverture varie selon le SDK utilisé) ou définissez OTEL_RESOURCE_ATTRIBUTES manuellement :

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${YOUR_ENDPOINT}"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-web-app"
export OTEL_RESOURCE_ATTRIBUTES="cloud.provider=azure,cloud.platform=azure.app_service,cloud.resource_id=/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{appName}"

Azure Functions

Utilisez le package SDK du détecteur de ressources Azure (la couverture varie selon le SDK utilisé) ou définissez OTEL_RESOURCE_ATTRIBUTES manuellement :

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${YOUR_ENDPOINT}"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-azure-function"
export OTEL_RESOURCE_ATTRIBUTES="cloud.provider=azure,cloud.platform=azure.functions,cloud.resource_id=/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{functionAppName}"

Référence des attributs de ressource

Plateformecloud.providercloud.platformcloud.resource_id
Container Appsazureazure.container_apps/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/containerApps/{appName}
Web Appsazureazure.app_service/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{appName}
Azure Functionsazureazure.functions/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{functionAppName}

La détection des ressources GCP fonctionne automatiquement avec le package SDK GCP Resource Detector. Ajoutez-le aux dépendances de votre application pour renseigner les attributs de ressource sans configuration manuelle.

Cloud Run et Cloud Run Functions

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${YOUR_ENDPOINT}"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-cloud-run-service"

Le SDK GCP Resource Detector remplit automatiquement : cloud.account.id, cloud.platform, cloud.provider, cloud.region, faas.id, faas.instance, faas.name, faas.version.

GKE Autopilot

export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${YOUR_ENDPOINT}"
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="dd-api-key=${DD_API_KEY},dd-otlp-source=serverless,compute_stats=true"
export OTEL_SERVICE_NAME="my-gke-service"

Le SDK GCP Resource Detector remplit automatiquement : cloud.account.id, cloud.platform, cloud.provider, cloud.region, host.id, k8s.cluster.name.

Référence des attributs de ressource

PlateformeAttributs remplis par GCP Resource Detector
Cloud Run / Cloud Run Functionscloud.account.id, cloud.platform, cloud.provider, cloud.region, faas.id, faas.instance, faas.name, faas.version
GKE Autopilotcloud.account.id, cloud.platform, cloud.provider, cloud.region, host.id, k8s.cluster.name

Pour aller plus loin