Configurer la surveillance sans serveur pour AWS Lambda
Commencez par installer la surveillance sans serveur Datadog afin de commencer à recueillir des métriques, traces et logs. Une fois cette première étape terminée, consultez les rubriques suivantes pour configurer votre installation afin de répondre à vos besoins en matière de surveillance.
Métriques
Logs
APM
Autres
Associez entre elles les données de télémétrie Datadog à l’aide de tags réservés (env
, service
et version
) et personnalisés. Ces tags vous permettent d’explorer facilement vos métriques, traces et logs. Ajoutez les paramètres supplémentaires ci-dessous en fonction de la méthode d’installation que vous avez suivie.
Vérifiez que vous utilisez la dernière version de l’interface de ligne de commande Datadog et exécutez la commande datadog-ci lambda instrument
en spécifiant les arguments supplémentaires pertinents. Exemple :
datadog-ci lambda instrument \
--env dev \
--service web \
--version v1.2.3 \
--extra-tags "team:avengers,project:marvel"
# … autres arguments requis, par exemple le nom des fonctions
Vérifiez que vous utilisez la dernière version du plug-in Serverless Datadog et appliquez les tags à l’aide des paramètres env
, service
, version
et tags
. Exemple :
custom:
datadog:
# … autres paramètres requis, comme la clé d'API et le site Datadog
env: dev
service: web
version: v1.2.3
tags: "team:avengers,project:marvel"
Par défaut, si vous ne définissez pas env
et service
, le plug-in utilise automatiquement les valeurs stage
et service
de la définition de l’application sans serveur. Pour désactiver cette fonctionnalité, définissez enableTags
sur false
.
Vérifiez que vous utilisez la dernière version de la macro Serverless Datadog et appliquez les tags à l’aide des paramètres env
, service
, version
et tags
. Exemple :
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
# … autres paramètres requis, comme la clé d'API et le site Datadog
env: dev
service: web
version: v1.2.3
tags: "team:avengers,project:marvel"
Vérifiez que vous utilisez la dernière version du CDK Construct sans serveur Datadog et appliquez les tags à l’aide des paramètres env
, service
, version
et tags
. Exemple :
const datadog = new Datadog(this, "Datadog", {
// … autres paramètres requis, comme la clé d'API et le site Datadog
env: "dev",
service: "web",
version: "v1.2.3",
tags: "team:avengers,project:marvel"
});
datadog.addLambdaFunctions([<FONCTIONS_LAMBDA>]);
Si vous recueillez des données de télémétrie à partir de vos fonctions Lambda à l’aide de l’extension Lambda Datadog, définissez les variables d’environnement suivantes sur vos fonctions Lambda. Exemple :
- DD_ENV : dev
- DD_SERVICE : web
- DD_VERSION : v1.2.3
- DD_TAGS : team:avengers,project:marvel
Si vous recueillez des données de télémétrie à partir de vos fonctions Lambda à l’aide de la fonction Lambda du Forwarder Datadog, définissez les tags env
, service
et version
, ainsi que des tags supplémentaires, comme des tags de ressource AWS, sur vos fonctions Lambda. Assurez-vous que l’option DdFetchLambdaTags
est définie sur true
sur la pile CloudFormation pour votre Forwarder Datadog. Depuis la version 3.19.0, cette option prend par défaut la valeur true.
Datadog peut également enrichir les données de télémétrie recueillies à l’aide de tags de ressource AWS existants définis sur vos fonctions Lambda, avec un retard de quelques minutes.
Si vous recueillez des données de télémétrie à partir de vos fonctions Lambda à l’aide de l’extension Lambda Datadog, activez l’intégration Datadog/AWS. Cette fonctionnalité vise à enrichir vos données de télémétrie avec des tags personnalisés. Les tags réservés Datadog (env
, service
et version
) doivent être définis via les variables d’environnement correspondantes (respectivement DD_ENV
, DD_SERVICE
et DD_VERSION
). Il est également possible de les définir à l’aide des paramètres fournis par les intégrations Datadog et des outils de développement sans serveur. Cette approche n’est pas valable pour les fonctions Lambda déployées avec des images de conteneur.
Si vous recueillez des données de télémétrie à partir de vos fonctions Lambda à l’aide de la fonction Lambda du Forwarder Datadog, définissez l’option DdFetchLambdaTags
sur true
dans la pile CloudFormation pour votre Forwarder Datadog. Depuis la version 3.19.0, cette option prend par défaut la valeur true.
Recueillir les charges utiles des requêtes et réponses
Cette fonctionnalité est prise en charge pour les langages Python, Node.js, Go et .NET.
Datadog peut recueillir et visualiser les charges utiles des requêtes et réponses JSON de vos fonctions AWS Lambda. Vous bénéficiez ainsi d’informations pertinentes sur vos applications sans serveur, pour un dépannage simplifié des échecs de vos fonctions Lambda.
Cette fonctionnalité est désactivée par défaut. Suivez les instructions ci-dessous pour la méthode d’installation que vous avez suivie.
Vérifiez que vous utilisez la dernière version de l’interface de ligne de commande Datadog et exécutez la commande datadog-ci lambda instrument
en spécifiant l’argument supplémentaire --capture-lambda-payload
. Exemple :
datadog-ci lambda instrument \
--capture-lambda-payload true
# … autres arguments requis, comme le nom des fonctions
Vérifiez que vous utilisez la dernière version du plug-in Serverless Datadog et définissez captureLambdaPayload
sur true
. Exemple :
custom:
datadog:
# … autres paramètres requis, comme la clé d'API et le site Datadog
captureLambdaPayload: true
Vérifiez que vous utilisez la dernière version de la macro Serverless Datadog et définissez le paramètre captureLambdaPayload
sur true
. Exemple :
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
# … autres paramètres requis, comme la clé d'API et le site Datadog
captureLambdaPayload: true
Vérifiez que vous utilisez la dernière version du CDK Construct sans serveur Datadog et définissez le paramètre captureLambdaPayload
sur true
. Exemple :
const datadog = new Datadog(this, "Datadog", {
// … autres paramètres requis, comme la clé d'API et le site Datadog
captureLambdaPayload: true
});
datadog.addLambdaFunctions([<FONCTIONS_LAMBDA>]);
Définissez la variable d’environnement DD_CAPTURE_LAMBDA_PAYLOAD
sur true
sur vos fonctions Lambda.
Pour éviter d’envoyer à Datadog des données sensibles dans les objets JSON des requêtes ou réponses, vous pouvez nettoyer certains paramètres.
Pour ce faire, ajoutez un nouveau fichier datadog.yaml
dans le même dossier que le code de votre fonction Lambda. Pour obfusquer des champs dans la charge utile Lambda, utilisez le bloc replace_tags dans les paramètres apm_config
du fichier datadog.yaml
:
apm_config:
replace_tags:
# Remplacer toutes les occurrences de « foobar » dans les tags par « CENSURÉ » :
- name: "*"
pattern: "foobar"
repl: "CENSURÉ"
# Remplacer « auth » dans les en-têtes des requêtes par une chaîne vide
- name: "function.request.headers.auth"
pattern: "(?s).*"
repl: ""
# Remplacer « apiToken » dans la charge utile des réponses par « **** »
- name: "function.response.apiToken"
pattern: "(?s).*"
repl: "****"
Il est également possible de définir la variable d’environnement DD_APM_REPLACE_TAGS
sur votre fonction Lambda afin d’obfusquer certains champs :
DD_APM_REPLACE_TAGS=[
{
"name": "*",
"pattern": "foobar",
"repl": "CENSURÉ"
},
{
"name": "function.request.headers.auth",
"pattern": "(?s).*",
"repl": ""
},
{
"name": "function.response.apiToken",
"pattern": "(?s).*"
"repl": "****"
}
]
Recueillir des métriques à partir de ressources non Lambda
Datadog peut non seulement recueillir en temps réel des métriques Lambda optimisées, mais également vous aider à recueillir des métriques relatives aux ressources gérées par AWS, comme les ressources API Gateway, AppSync et SQS. Vous pouvez ainsi surveiller l’intégralité de votre application sans serveur. Les tags de ressource AWS correspondants sont également ajoutés aux métriques.
Pour recueillir ces métriques, configurez l’intégration Datadog/AWS.
Recueillir des logs à partir de ressources non Lambda
Les logs générés par des ressources gérées (outre les fonctions Lambda AWS) peuvent être utiles pour identifier la cause à l’origine des problèmes de vos applications sans serveur. Datadog vous conseille de recueillir les logs des ressources gérées par AWS suivantes dans votre environnement :
- API : API Gateway, AppSync et ALB
- Files d’attente et flux : SQS, SNS et Kinesis
- Datastores : DynamoDB, S3 et RDS
Recueillir des traces à partir de ressources non Lambda
Cette fonctionnalité est actuellement prise en charge pour les langages Python, Node.js, Java et .NET.
Datadog peut déduire des spans APM en fonction des événements Lambda reçus pour les ressources gérées par AWS qui déclenchent une fonction Lambda. Vous pouvez ainsi visualiser plus facilement la relation entre les ressources gérées par AWS et identifier plus rapidement les problèmes de performances de vos applications sans serveur. Consultez cet article de blog (en anglais) pour obtenir plus d’informations sur les solutions incluses.
Les ressources suivantes sont actuellement prises en charge :
- API Gateway (API REST, API HTTP et WebSocket)
- URL de fonction Lambda
- SQS
- SNS (les messages SNS distribués via SQS sont également pris en charge)
- Flux Kinesis (si les données correspondent une chaîne JSON ou à une chaîne JSON codée en base64)
- EventBridge (événements personnalisés pour lesquels
Details
prend la forme d’une chaîne JSON) - S3
- DynamoDB
Pour désactiver cette fonctionnalité, définissez DD_TRACE_MANAGED_SERVICES
sur false
.
Filtrer ou nettoyer des données des logs
Pour exclure les logs START
et END
, définissez la variable d’environnement DD_LOGS_CONFIG_PROCESSING_RULES
sur [{"type": "exclude_at_match", "name": "exclude_start_and_end_logs", "pattern": "(START|END) RequestId"}]
. Vous pouvez également ajouter un fichier datadog.yaml
dans le répertoire racine de votre projet avec le contenu suivant :
logs_config:
processing_rules:
- type: exclude_at_match
name: exclude_start_and_end_logs
pattern: (START|END) RequestId
Datadog vous conseille de conserver les logs REPORT
. En effet, ils permettent de remplir la liste d’invocations des vues des fonctions sans serveur.
Pour nettoyer ou filtrer d’autres logs avant de les envoyer à Datadog, consultez la section Collecte de logs avancée.
Désactiver la collecte de logs
Par défaut, la collecte de logs via l’extension Lambda Datadog est activée.
Si vous ne souhaitez plus recueillir de logs à l’aide de la fonction Lambda du Forwarder Datadog, supprimez le filtre d’abonnement du groupe de logs CloudWatch de votre propre fonction Lambda.
Si vous ne souhaitez plus recueillir de logs à l’aide de l’extension Lambda Datadog, suivez les instructions ci-dessous pour la méthode d’installation que vous avez suivie :
custom:
datadog:
# … autres paramètres requis, comme la clé d'API et le site Datadog
enableDDLogs: false
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
# … autres paramètres requis, comme la clé d'API et le site Datadog
enableDDLogs: false
const datadog = new Datadog(this, "Datadog", {
// … autres paramètres requis, comme la clé d'API et le site Datadog
enableDatadogLogs: false
});
datadog.addLambdaFunctions([<FONCTIONS_LAMBDA>]);
Définissez la variable d’environnement DD_SERVERLESS_LOGS_ENABLED
sur false
sur vos fonctions Lambda.
Pour parser et transformer vos logs dans Datadog, consultez la documentation relative aux pipelines de logs Datadog.
Pour découvrir quelles bibliothèques et quels frameworks sont automatiquement instrumentés par le client APM Datadog, consultez la section Exigences de compatibilité pour APM. Pour instrumenter des applications personnalisées, consultez le guide sur l’instrumentation personnalisée pour la solution APM de Datadog.
Choisir les taux d’échantillonnage pour l’ingestion des spans APM
Pour gérer le taux d’échantillonnage des invocations tracées par APM pour des fonctions sans serveur, définissez la variable d’environnement DD_TRACE_SAMPLE_RATE
de la fonction sur une valeur comprise entre 0.000 (aucun tracing des invocations de fonction Lambda) et 1.000 (tracing de toutes les invocations de fonction Lambda).
Les métriques sont calculées en tenant compte de l’intégralité du trafic de l’application. Votre configuration d’échantillonnage ne nuit donc aucunement à leur justesse.
Pour les services qui génèrent beaucoup de requêtes, puisque les données des traces sont très répétitives, vous n’avez généralement pas besoin de recueillir chaque requête : les problèmes suffisamment graves sont systématiquement détectables dans plusieurs traces. Les paramètres d’ingestion vous permettent de visualiser les données dont vous avez besoin pour diagnostiquer des problèmes tout en respectant votre marge d’erreur.
L’échantillonnage en amont constitue le mécanisme d’ingestion par défaut. La décision de conserver ou d’ignorer la trace est prise au tout début du cycle de vie de la trace, à la création de la span racine. Cette décision est ensuite propagée vers les autres services par l’intermédiaire du contexte de la requête (par exemple, sous la forme d’un en-tête de requête HTTP). La décision est prise au début de la trace, puis transmise durant toutes les étapes de la trace. Ainsi, vous devez configurer le taux d’échantillonnage sur le service root afin de l’appliquer.
Lorsque Datadog ingère les spans, le filtre de rétention intelligent Datadog indexe une partie de vos traces pour vous aider à surveiller l’intégrité de vos applications. Vous pouvez également définir des filtres de rétention personnalisés dans le but d’indexer les données des traces que vous souhaitez conserver plus longtemps, en accord avec les objectifs de votre organisation.
En savoir plus sur le pipeline de traces Datadog.
Pour filtrer les traces avant de les envoyer à Datadog, consultez la section Ignorer les ressources non désirées dans APM.
Si vous avez besoin de nettoyer les attributs de vos traces pour des raisons de sécurité, consultez la section Configurer l’Agent Datadog ou le traceur pour assurer la sécurité des données.
Désactiver la collecte de logs
La collecte de traces via l’extension Lambda Datadog est activée par défaut. Si vous ne souhaitez pas recueillir de traces à partir de vos fonctions Lambda, suivez les instructions ci-dessous :
datadog-ci lambda instrument \
--tracing false
# … autres arguments requis, comme le nom des fonctions
custom:
datadog:
# … autres paramètres requis, comme la clé d'API et le site Datadog
enableDDTracing: false
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
# … autres paramètres requis, comme la clé d'API et le site Datadog
enableDDTracing: false
const datadog = new Datadog(this, "Datadog", {
//… autres paramètres requis, comme la clé d'API et le site Datadog
enableDatadogTracing: false
});
datadog.addLambdaFunctions([<FONCTIONS_LAMBDA>]);
Définissez la variable d’environnement DD_TRACE_ENABLED
sur false
sur vos fonctions Lambda.
Associer vos logs à vos traces
Si vous utilisez l’extension Lambda pour recueillir des traces et des logs, Datadog ajoute automatiquement l’ID de la requête AWS Lambda à la span aws.lambda
via le tag request_id
. En outre, les logs Lambda d’une même requête partagent le même attribut lambda.request_id
. L’ID de requête AWS Lambda permet d’associer les vues des traces et des logs Datadog.
Si vous utilisez la fonction Lambda du Forwarder pour recueillir des traces et des logs, dd.trace_id
est automatiquement injecté dans les logs (grâce à la variable d’environnement DD_LOGS_INJECTION
). L’ID de trace Datadog permet d’associer les vues des traces et des logs Datadog. Cette fonctionnalité est compatible avec la majorité des applications utilisant un runtime et un logger connus (voir la prise en charge pour chaque runtime).
Si vous utilisez un runtime ou un logger personnalisé qui n’est pas pris en charge, procédez comme suit :
- Si vos logs sont au format JSON, vous devez récupérer l’ID de trace Datadog à l’aide de
dd-trace
, puis l’ajouter à vos logs via le champ dd.trace_id
:{
"message": "This is a log",
"dd": {
"trace_id": "4887065908816661012"
}
// ... the rest of your log
}
- Si vos logs sont en texte brut, procédez comme suit :
- Récupérez l’ID de trace Datadog à l’aide de
dd-trace
, puis ajoutez-le à votre log. - Dupliquez le pipeline de logs Lambda par défaut, qui est en lecture seule uniquement.
- Activez le pipeline dupliqué et désactivez le pipeline par défaut.
- Modifiez les règles du parser Grok du pipeline dupliqué afin de parser l’ID de trace Datadog dans l’attribut
dd.trace_id
. Vous pouvez par exemple utiliser la règle my_rule \[%{word:level}\]\s+dd.trace_id=%{word:dd.trace_id}.*
pour les logs dont le format est [INFO] dd.trace_id=4887065908816661012 Mon message de log
.
Associer des erreurs à votre code source
Cette fonctionnalité prend en charge les langages Go, Java, Python et JavaScript.
Grâce à l’intégration du code source Datadog, vous pouvez associer vos données de télémétrie (comme vos stack traces) au code source de vos fonctions Lambda dans GitHub. Suivez les instructions ci-dessous pour activer cette fonctionnalité. Remarque : vous devez procéder au déploiement depuis un référentiel Git local qui n’est ni « dirty » ni en avance par rapport à un référentiel distant.
Exécutez datadog-ci lambda instrument
avec –source-code-integration=true` pour envoyer automatiquement des métadonnées Git au répertoire local actuel et ajouter les tags requis à vos fonctions Lambda.
Remarque : vous devez définir la variable d’environnement DATADOG_API_KEY
pour datadog-ci
afin d’importer les métadonnées Git. DATADOG_API_KEY
est également défini sur vos fonctions Lambda pour l’envoi des données de télémétrie, sauf si vous avez également défini DATADOG_API_KEY_SECRET_ARN
, qui est prioritaire par rapport à DATADOG_API_KEY
.
# … autres variables d'environnement requises, comme DATADOG_SITE
# requis, permet d'importer les métadonnées Git
export DATADOG_API_KEY=<CLÉ_API_DATADOG>
# facultatif, DATADOG_API_KEY est utilisé si cette variable d'environnement n'est pas définie
export DATADOG_API_KEY_SECRET_ARN=<ARN_SECRET_CLÉ_API_DATADOG>
datadog-ci lambda instrument \
--source-code-integration=true
# … autres arguments requis, comme le nom des fonctions
Lorsque enableSourceCodeIntegration
est défini sur true
, le plug-in Serverless Datadog envoie automatiquement les métadonnées Git au répertoire local actuel et ajoute les tags requis à vos fonctions Lambda.
Remarque : vous devez définir le paramètre apiKey
pour le plug-in afin d’importer les métadonnées Git. apiKey
est également défini sur vos fonctions Lambda pour l’envoi de données de télémétrie, sauf si vous avez également défini apiKeySecretArn
, qui est prioritaire par rapport à apiKey
.
custom:
datadog:
# … autres paramètres requis, comme le site Datadog
apiKey: <CLÉ_API> # requis, permet d'importer les métadonnées Git
apiKeySecretArn: <ARN_SECRET_CLÉ_API> # facultatif, apiKey est utilisé si ce paramètre n'est pas défini
enableSourceCodeIntegration: true # valeur par défaut : true
Remplacez votre fonction d’initialisation par ce qui suit pour passer la valeur gitHash à la pile CDK :
async function main() {
// Bien ajouter @datadog/datadog-ci via votre gestionnaire de packages
const datadogCi = require("@datadog/datadog-ci");
const gitHash = await datadogCi.gitMetadata.uploadGitCommitHash('{Datadog_API_Key}', '<SITE>')
const app = new cdk.App();
// Passer la valeur au constructor ExampleStack dans le hash
new ExampleStack(app, "ExampleStack", {}, gitHash);
}
Dans le constructor de votre pile, ajoutez un paramètre gitHash
facultatif, puis appelez addGitCommitMetadata()
:
export class ExampleStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps, gitHash?: string) {
...
...
datadog.addGitCommitMetadata([<VOS_FONCTIONS>], gitHash)
}
}
- Définissez la variable d’environnement
DD_TAGS="git.commit.sha:<HASH_COMMIT_GIT>,git.repository_url=<URL_RÉFÉRENTIEL>"
sur vos fonctions Lambda. - Exécutez datadog-ci git-metadata upload dans votre pipeline de CI pour importer les métadonnées Git.
- Enfin, vous avez la possibilité d’installer une app GitHub pour intégrer des extraits de code source.
Envoyer des métriques custom
Vous pouvez envoyer des métriques custom pour surveiller une logique opérationnelle personnalisée.
Envoyer des données OpenTelemetry à Datadog
Indiquez à OpenTelemetry que les spans doivent être exportées à l’extension Lambda Datadog.
// instrument.js
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { Resource } = require('@opentelemetry/resources');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
const provider = new NodeTracerProvider({
resource: new Resource({
[ SemanticResourceAttributes.SERVICE_NAME ]: 'rey-app-otlp-dev-node',
})
});
provider.addSpanProcessor(
new SimpleSpanProcessor(
new OTLPTraceExporter(
{ url: 'http://localhost:4318/v1/traces' },
),
),
);
provider.register();
Ajoutez l’instrumentation d’OpenTelemetry pour AWS Lambda. Cela revient à ajouter la couche de tracing.
// instrument.js
const { AwsInstrumentation } = require('@opentelemetry/instrumentation-aws-sdk');
const { AwsLambdaInstrumentation } = require('@opentelemetry/instrumentation-aws-lambda');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
registerInstrumentations({
instrumentations: [
new AwsInstrumentation({
suppressInternalInstrumentation: true,
}),
new AwsLambdaInstrumentation({
disableAwsContextPropagation: true,
}),
],
});
Appliquez l’instrumentation au moment de l’exécution. Par exemple, pour Node.js, utilisez NODE_OPTIONS
.
# serverless.yml
functions:
node:
handler: handler.handler
environment:
NODE_OPTIONS: --require instrument
Activez OTel via la variable d’environnement DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT
ou DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT
. Ajoutez la version 41 ou une version ultérieure de l’extension Datadog. N’ajoutez pas la couche de tracing Datadog.
# serverless.yml
provider:
name: aws
region: sa-east-1
runtime: nodejs18.x
environment:
DD_API_KEY: ${env:DD_API_KEY}
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT: localhost:4318
layers:
- arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Extension:42
Procédez au déploiement.
Envoyer des données de télémétrie via AWS PrivateLink ou un proxy
L’extension Lambda Datadog doit pouvoir accéder à Internet pour envoyer des données à Datadog. Si vos fonctions Lambda sont déployées dans un VPC sans accès à Internet, vous pouvez envoyer vos données via AWS PrivateLink pour le site Datadog datadoghq.com
ou via un proxy pour tous les autres sites.
Si vous utilisez le Forwarder Datadog, suivez ces instructions.
Envoyer des données de télémétrie à plusieurs organisations Datadog
Si vous souhaitez envoyer vos données à plusieurs organisations différentes, vous pouvez activer la transmission multiple à l’aide d’une clé d’API en clair, d’AWS Secrets Manager, ou d’AWS KMS.
Vous pouvez activer la transmission multiple à l’aide d’une clé d’API en clair en définissant les variables d’environnement suivantes sur votre fonction Lambda.
# Activer la transmission multiple pour les métriques
DD_ADDITIONAL_ENDPOINTS={"https://app.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://app.datadoghq.eu": ["<votre_clé_API_4>"]}
# Activer la transmission multiple pour APM (traces)
DD_APM_ADDITIONAL_ENDPOINTS={"https://trace.agent.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://trace.agent.datadoghq.eu": ["<votre_clé_API_4>"]}
# Activer la transmission multiple pour APM (profiling)
DD_APM_PROFILING_ADDITIONAL_ENDPOINTS={"https://trace.agent.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://trace.agent.datadoghq.eu": ["<votre_clé_API_4>"]}
# Activer la transmission multiple pour les logs
DD_LOGS_CONFIG_USE_HTTP=true
DD_LOGS_CONFIG_ADDITIONAL_ENDPOINTS=[{"api_key": "<votre_clé_API_2>", "Host": "agent-http-intake.logs.datadoghq.com", "Port": 443, "is_reliable": true}]
L’extension Datadog permet de récupérer automatiquement les valeurs AWS Secrets Manager pour toutes les variables d’environnement qui présentent le préfixe _SECRET_ARN
. Vous pouvez utiliser cette méthode pour stocker sans risque vos variables d’environnement dans Secrets Manager et effectuer la transmission multiple avec Datadog.
- Définissez la variable d’environnement
DD_LOGS_CONFIG_USE_HTTP=true
sur votre fonction Lambda. - Ajoutez l’autorisation
secretsmanager:GetSecretValue
au rôle IAM de votre fonction Lambda. - Côté Secrets Manager, créez un nouveau secret pour stocker la variable d’environnement dédiée à la transmission multiple des métriques. Le contenu doit ressembler à ce qui suit :
{"https://app.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://app.datadoghq.eu": ["<votre_clé_API_4>"]}
. - Définissez la variable d’environnement
DD_ADDITIONAL_ENDPOINTS_SECRET_ARN
associée à votre fonction Lambda sur l’ARN du secret précédent. - Côté Secrets Manager, créez un nouveau secret pour stocker la variable d’environnement dédiée à la transmission multiple des données APM (traces). Le contenu doit ressembler à ce qui suit :
{"https://trace.agent.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://trace.agent.datadoghq.eu": ["<votre_clé_API_4>"]}
. - Définissez la variable d’environnement
DD_APM_ADDITIONAL_ENDPOINTS_SECRET_ARN
associée à votre fonction Lambda sur l’ARN du secret précédent. - Côté Secrets Manager, créez un nouveau secret pour stocker la variable d’environnement dédiée à la transmission multiple des données APM (profiling). Le contenu doit ressembler à ce qui suit :
{"https://trace.agent.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://trace.agent.datadoghq.eu": ["<votre_clé_API_4>"]}
. - Définissez la variable d’environnement
DD_APM_PROFILING_ADDITIONAL_ENDPOINTS_SECRET_ARN
associée à votre fonction Lambda sur l’ARN du secret précédent. - Côté Secrets Manager, créez un nouveau secret pour stocker la variable d’environnement dédiée à la transmission multiple des logs. Le contenu doit ressembler à ce qui suit :
[{"api_key": "<votre_clé_API_2>", "Host": "agent-http-intake.logs.datadoghq.com", "Port": 443, "is_reliable": true}]
. - Définissez la variable d’environnement
DD_LOGS_CONFIG_ADDITIONAL_ENDPOINTS_SECRET_ARN
associée à votre fonction Lambda sur l’ARN du secret précédent.
L’extension Datadog permet de déchiffrer automatiquement les valeurs AWS KMS pour toutes les variables d’environnement qui présentent le préfixe _KMS_ENCRYPTED
. Vous pouvez utiliser cette méthode pour stocker sans risque vos variables d’environnement dans KMS et effectuer la transmission multiple avec Datadog.
- Définissez la variable d’environnement
DD_LOGS_CONFIG_USE_HTTP=true
sur votre fonction Lambda. - Ajoutez les autorisations
kms:GenerateDataKey
et kms:Decrypt
au rôle IAM de votre fonction Lambda. - Pour configurer la transmission multiple des métriques, chiffrez
{"https://app.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://app.datadoghq.eu": ["<votre_clé_API_4>"]}
avec KMS et définissez la variable d’environnement DD_ADDITIONAL_ENDPOINTS_KMS_ENCRYPTED
sur la valeur obtenue. - Pour configurer la transmission multiple des traces, chiffrez
{"https://trace.agent.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://trace.agent.datadoghq.eu": ["<votre_clé_API_4>"]}
avec KMS et définissez la variable d’environnement DD_APM_ADDITIONAL_KMS_ENCRYPTED
sur la valeur obtenue. - Pour configurer la transmission multiple des données de profiling, chiffrez
{"https://trace.agent.datadoghq.com": ["<votre_clé_API_2>", "<votre_clé_API_3>"], "https://trace.agent.datadoghq.eu": ["<votre_clé_API_4>"]}
avec KMS et définissez la variable d’environnement DD_APM_PROFILING_ADDITIONAL_ENDPOINTS_KMS_ENCRYPTED
sur la valeur obtenue. - Pour configurer la transmission multiple des logs
[{"api_key": "<votre_clé_API_2>", "Host": "agent-http-intake.logs.datadoghq.com", "Port": 443, "is_reliable": true}]
avec KMS et définissez la variable d’environnement DD_LOGS_CONFIG_ADDITIONAL_ENDPOINTS_KMS_ENCRYPTED
sur la valeur obtenue.
Pour découvrir des options d’utilisation plus avancées, consultez le guide dédié à la transmission multiple.
Datadog injecte automatiquement le contexte des traces dans les requêtes AWS SDK sortantes et extrait le contexte des traces à partir des événements Lambda. Cela permet de tracer une requête ou une transaction sur des services distribués. Pour en savoir plus, consultez la section Propagation de traces sans serveur.
Fusionner des traces X-Ray et Datadog
AWS X-Ray prend en charge le tracing par l’intermédiaire de certains services gérés par AWS, comme AppSync et Step Functions, qui ne sont pas nativement pris en charge par la solution APM Datadog. Vous pouvez néanmoins activer l’intégration Datadog/X-Ray et fusionner les traces X-Ray avec les traces natives Datadog. Pour obtenir plus d’informations à ce sujet, consultez cette section.
Activer la signature de code pour AWS Lambda
Grâce à la signature de code pour AWS Lambda, vous êtes certain de ne déployer que du code fiable depuis vos fonctions Lambda vers AWS. Lorsque vous activez la signature de code sur vos fonctions, AWS vérifie que tout le code de vos déploiements est signé par une source fiable. Vous pouvez définir les sources auxquelles vous faites confiance depuis la configuration de la signature de code.
Si vos fonctions Lambda ont été configurées de façon à utiliser la signature de code, vous devez ajouter l’ARN du profil de signature de Datadog à la configuration de signature de code de votre fonction avant de déployer les fonctions Lambda à l’aide des couches Lambda publiées par Datadog.
ARN du profil de signature de Datadog :
arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
Migrer vers l’extension Lambda Datadog
Datadog peut recueillir les données de surveillance de vos fonctions Lambda via la fonction Lambda du Forwarder ou l’extension Lambda. Il est conseillé de privilégier l’extension Lambda pour les nouvelles installations. Si vous ne savez pas quelle approche adopter, consultez la section Choisir s’il est pertinent de migrer vers l’extension Lambda Datadog.
Pour procéder à la migration, comparez les instructions d’installation via l’extension Lambda Datadog avec celles via le Forwarder Datadog. Pour vous faciliter la tâche, les principales différences sont répertoriées ci-dessous.
Remarque : Datadog vous conseille de migrer en premier vos applications dev et staging, puis de migrer vos applications de production une par une.
- Installez la dernière version de
@datadog/datadog-ci
. - Mettez à jour l’argument
--layer-version
en le définissant sur la dernière version de votre runtime. - Définissez l’argument
--extension-version
sur la dernière version de l’extension, à savoir 65
. - Définissez les variables d’environnement requises
DATADOG_SITE
et DATADOG_API_KEY_SECRET_ARN
. - Supprimez l’argument
--forwarder
. - Si vous avez configuré l’intégration Datadog/AWS afin d’abonner automatiquement le Forwarder aux groupes de logs Lambda, désactivez ce comportement après avoir migré l’ensemble de vos fonctions Lambda dans la région en question.
- Installez la dernière version de
serverless-plugin-datadog
. L’extension Lambda Datadog est alors automatiquement installée, sauf si vous définissez addExtension
sur false
. - Définissez les paramètres requis
site
et apiKeySecretArn
. - Définissez les paramètres
env
, service
et version
s’ils avaient été précédemment définis en tant que tags de ressource Lambda. Lorsque vous utilisez l’extension, le plug-in définit automatiquement ces paramètres via les variables d’environnement réservées de Datadog, par exemple DD_ENV
. - Supprimez le paramètre
forwarderArn
, sauf si vous souhaitez continuer à utiliser le Forwarder pour recueillir des logs à partir de ressources non Lambda et si vous avez défini subscribeToApiGatewayLogs
, subscribeToHttpApiLogs
ou subscribeToWebsocketLogs
sur true
. - Si vous avez configuré l’intégration Datadog/AWS afin d’abonner automatiquement le Forwarder aux groupes de logs Lambda, désactivez ce comportement après avoir migré l’ensemble de vos fonctions Lambda dans la région en question.
- Mettez à jour la pile CloudFormation de
datadog-serverless-macro
pour récupérer la dernière version. - Définissez le paramètre
extensionLayerVersion
sur la dernière version de l’extension, à savoir 65
. - Définissez les paramètres requis
site
et apiKeySecretArn
. - Supprimez le paramètre
forwarderArn
. - Si vous avez configuré l’intégration Datadog/AWS afin d’abonner automatiquement le Forwarder aux groupes de logs Lambda, désactivez ce comportement après avoir migré l’ensemble de vos fonctions Lambda dans la région en question.
- Installez la dernière version de
datadog-cdk-constructs
ou datadog-cdk-constructs-v2
. - Définissez le paramètre
extensionLayerVersion
sur la dernière version de l’extension, à savoir 65
. - Définissez les paramètres requis
site
et apiKeySecretArn
. - Définissez les paramètres
env
, service
et version
s’ils avaient été précédemment définis en tant que tags de ressource Lambda. Lorsque vous utilisez l’extension, le construct définit automatiquement ces paramètres via les variables d’environnement réservées de Datadog, par exemple DD_ENV
. - Supprimez le paramètre
forwarderArn
. - Si vous avez configuré l’intégration Datadog/AWS afin d’abonner automatiquement le Forwarder aux groupes de logs Lambda, désactivez ce comportement après avoir migré l’ensemble de vos fonctions Lambda dans la région en question.
- Installez la dernière version de la couche de la bibliothèque Lambda Datadog pour votre runtime.
- Installez la dernière version de l’extension Lambda Datadog.
- Définissez les variables d’environnement requises
DD_SITE
et DD_API_KEY_SECRET_ARN
. - Définissez les variables d’environnement
DD_ENV
, DD_SERVICE
et DD_VERSION
si vous les aviez précédemment définies en tant que tags de ressource Lambda. - Supprimez le filtre d’abonnement qui transmet des logs au Forwarder Datadog à partir du groupe de logs de votre fonction Lambda.
- Si vous avez configuré l’intégration Datadog/AWS afin d’abonner automatiquement le Forwarder aux groupes de logs Lambda, désactivez ce comportement après avoir migré l’ensemble de vos fonctions Lambda dans la région en question.
Migrer de x86 à arm64 avec l’extension Lambda Datadog
L’extension Datadog est un binaire compilé disponible en version x86 ou arm64. Si vous migrez une fonction Lambda x86 vers arm64 (ou arm64 vers x86) à l’aide d’un outil de déploiement tel que CDK, Serverless Framework ou SAM, assurez-vous que votre intégration de service (telle que API Gateway, SNS ou Kinesis) est configurée pour utiliser les versions ou les alias d’une fonction Lambda. Dans le cas contraire, la fonction risquerait d’être indisponible pendant une dizaine de secondes lors du déploiement.
Ce problème est dû au fait que la migration d’une fonction Lambda de x86 vers arm64 implique deux appels API parallèles, updateFunction
et updateFunctionConfiguration
. Lorsque ces appels ont lieu, on observe un court laps de temps où l’appel updateFunction
est terminé et où le code est mis à jour pour utiliser la nouvelle architecture alors que l’appel updateFunctionConfiguration
n’est lui pas encore terminé, ce qui signifie que l’ancienne architecture est toujours configurée pour l’extension.
Si vous ne pouvez pas utiliser les paramètres LayerVersion, Datadog vous recommander de configurer le Forwarder Datadog durant le processus de migration vers la nouvelle architecture.
Pour tester l’image du conteneur de votre fonction Lambda en local lorsque l’extension Lambda Datadog est installée, vous devez définir DD_LOCAL_TEST
sur true
dans votre environnement de test local. Si ce n’est pas le cas, l’extension attend des réponses de l’API d’extensions AWS et bloque l’appel.
Dépannage
Si vous ne parvenez pas à configurer vos installations, définissez la variable d’environnement DD_LOG_LEVEL
sur debug
pour activer les logs de debugging. Si vous avez besoin d’aide supplémentaire pour le dépannage, consultez le guide Dépannage de la surveillance sans serveur.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: