Instrumenter des applications Python
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Instrumenter des applications Python

Configuration requise

Si vous n’avez pas encore réalisé la configuration :

Après avoir installé l’intégration AWS et le Forwarder Datadog, suivez ces étapes pour instrumenter votre application afin d’envoyer des métriques, des logs et des traces à Datadog.

Configuration

Le plug-in Serverless Datadog ajoute automatiquement la bibliothèque Lambda Datadog à vos fonctions à l’aide des couches. Il configure également vos fonctions de façon à envoyer des métriques, traces et logs à Datadog par l’intermédiaire du Forwarder Datadog.

Pour installer et configurer le plug-in Serverless Datadog, suivez les étapes suivantes :

  1. Installez le plug-in Serverless Datadog :
    yarn add --dev serverless-plugin-datadog
    
  2. Ajoutez ce qui suit dans votre fichier serverless.yml :
    plugins:
      - serverless-plugin-datadog
    
  3. Ajoutez également la section suivante dans votre fichier serverless.yml :
    custom:
      datadog:
        forwarder: # The Datadog Forwarder ARN goes here.
    

    Pour en savoir plus sur l’ARN du Forwarder Datadog ou sur l’installation, cliquez ici. Pour obtenir des paramètres supplémentaires, consultez la documentation du plug-in.

Ce service est en bêta publique. Si vous souhaitez nous faire part de vos remarques, contactez l'assistance Datadog.

La macro CloudFormation Datadog transforme automatiquement votre modèle d’application SAM dans le but d’ajouter la bibliothèque Lambda Datadog à vos fonctions à l’aide des couches. Elle configure également vos fonctions de façon à envoyer des métriques, traces et logs à Datadog par l’intermédiaire du Forwarder Datadog.

Installer la macro CloudFormation Datadog

Exécutez la commande suivante avec vos identifiants AWS pour déployer une pile CloudFormation qui installe la ressource AWS de la macro. Vous ne devez installer la macro qu’une seule fois par région de votre compte. Remplacez create-stack par update-stack pour mettre à jour la macro vers la dernière version.

aws cloudformation create-stack \
  --stack-name datadog-serverless-macro \
  --template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
  --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM

La macro est désormais déployée et utilisable.

Instrumenter la fonction

Dans votre fichier template.yml, ajoutez ce qui suit dans la section Transform, après la transformation AWS::Serverless pour SAM.

Transform:
  - AWS::Serverless-2016-10-31
  - Name: DatadogServerless
    Parameters:
      pythonLayerVersion: "<VERSION_COUCHE>"
      stackName: !Ref "AWS::StackName"
      forwarderArn: "<ARN_FORWARDER>"
      service: "<SERVICE>" # Facultatif
      env: "<ENVIRONNEMENT>" # Facultatif

Remplacez <SERVICE> et <ENVIRONNEMENT> par les valeurs appropriées, <VERSION_COUCHE> par la version de votre choix de la couche Lambda Datadog (voir les dernières versions) et <ARN_FORWARDER> par l’ARN du Forwarder (voir la documentation relative au Forwarder).

Pour obtenir plus de détails ainsi que des paramètres supplémentaires, consultez la documentation relative à la macro.

Ce service est en bêta publique. Si vous souhaitez nous faire part de vos remarques, contactez l'assistance Datadog.

La macro CloudFormation Datadog transforme automatiquement le modèle CloudFormation généré par AWS CDK dans le but d’ajouter la bibliothèque Lambda Datadog à vos fonctions à l’aide des couches. Elle configure également vos fonctions de façon à envoyer des métriques, traces et logs à Datadog par l’intermédiaire du Forwarder Datadog.

Installer la macro CloudFormation Datadog

Exécutez la commande suivante avec vos identifiants AWS pour déployer une pile CloudFormation qui installe la ressource AWS de la macro. Vous ne devez installer la macro qu’une seule fois par région de votre compte. Remplacez create-stack par update-stack pour mettre à jour la macro vers la dernière version.

aws cloudformation create-stack \
  --stack-name datadog-serverless-macro \
  --template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
  --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM

La macro est désormais déployée et utilisable.

Instrumenter la fonction

Ajoutez la transformation DatadogServerless ainsi que CfnMapping à votre objet Stack dans votre application AWS CDK. Consultez l’exemple de code ci-dessous en Python (le fonctionnement est similaire dans d’autres langages).

from aws_cdk import core

class CdkStack(core.Stack):
  def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
    super().__init__(scope, id, **kwargs)
    self.add_transform("DatadogServerless")

    mapping = core.CfnMapping(self, "Datadog",
      mapping={
        "Parameters": {
          "pythonLayerVersion": "<VERSION_COUCHE>",
          "forwarderArn": "<ARN_FORWARDER>",
          "stackName": self.stackName,
          "service": "<SERVICE>",  # Facultatif
          "env": "<ENVIRONNEMENT>",  # Facultatif
        }
      })

Remplacez <SERVICE> et <ENVIRONNEMENT> par les valeurs appropriées, <VERSION_COUCHE> par la version de votre choix de la couche Lambda Datadog (voir les dernières versions) et <ARN_FORWARDER> par l’ARN du Forwarder (voir la documentation relative au Forwarder).

Pour obtenir plus de détails ainsi que des paramètres supplémentaires, consultez la documentation relative à la macro.

Mettre à jour les paramètres Zappa

  1. Ajoutez les paramètres suivants à votre fichier zappa_settings.json :
    {
        "dev": {
            "layers": ["arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:<VERSION>"],
            "lambda_handler": "datadog_lambda.handler.handler",
            "aws_environment_variables": {
                "DD_LAMBDA_HANDLER": "handler.lambda_handler",
                "DD_TRACE_ENABLED": "true",
                "DD_FLUSH_TO_LOG": "true",
            },
        }
    }
    
  2. Remplacez les paramètres fictifs <AWS_REGION>, <RUNTIME> et <VERSION> dans l’ARN de couche par les valeurs appropriées. Les options RUNTIME disponibles sont Python27, Python36, Python37 et Python38. Pour VERSION, consultez la dernière version. Exemple :
    # For regular regions
    arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Python37:19
    
    # For us-gov regions
    arn:aws-us-gov:lambda:us-gov-east-1:002406178527:layer:Datadog-Python37:19
    

Abonner le Forwarder Datadog aux groupes de logs

Pour pouvoir envoyer des métriques, traces et logs à Datadog, vous devez abonner la fonction Lambda du Forwarder Datadog à chaque groupe de logs de votre fonction.

  1. Si ce n’est pas déjà fait, installez le Forwarder Datadog.
  2. Abonnez le Forwarder Datadog aux groupes de logs de votre fonction.
Ce service est en bêta publique. Si vous souhaitez nous faire part de vos remarques, contactez l'assistance Datadog.

Utilisez l’interface de ligne de commande Datadog pour configurer l’instrumentation sur vos fonctions Lambda dans vos pipelines CI/CD. La commande de l’interface de ligne de commande ajoute automatiquement la bibliothèque Lambda Datadog à vos fonctions à l’aide des couches. Elle configure également vos fonctions de façon à envoyer des métriques, traces et logs à Datadog.

Installer l’interface de ligne de commande Datadog

Installez l’interface de ligne de commande Datadog avec NPM ou Yarn :

# NPM
npm install -g @datadog/datadog-ci

# Yarn
yarn global add @datadog/datadog-ci

Instrumenter la fonction

Exécutez la commande suivante avec vos identifiants AWS. Remplacez <nomfonction> et <autre_nomfonction> par le nom de vos fonctions Lambda, <région_AWS> par le nom de la région AWS, <version_couche> par la version de votre choix de la couche Lambda (voir les dernières versions) et <arn_forwarder> par l’ARN du Forwarder (voir la documentation relative au Forwarder).

datadog-ci lambda instrument -f <nomfonction> -f <autre_nomfonction> -r <région_aws> -v <version_couche> --forwarder <arn_forwarder>

Par exemple :

datadog-ci lambda instrument -f ma-fonction -f autre-fonction -r us-east-1 -v 19 --forwarder arn:aws:lambda:us-east-1:000000000000:function:datadog-forwarder

Pour obtenir plus de détails ainsi que des paramètres supplémentaires, consultez la documentation relative à l’interface de ligne de commande.

Installer la bibliothèque Lambda Datadog

Vous pouvez installer la bibliothèque Lambda Datadog en tant que couche (conseillé) ou en tant que package Python.

La version mineure du package datadog-lambda correspond toujours à la version de la couche. Par exemple, datadog-lambda v0.5.0 correspond au contenu de la version 5 de la couche.

Utiliser la couche

Configurez les couches pour votre fonction Lambda à l’aide de l’ARN en respectant le format suivant :

# Pour les régions standard
arn:aws:lambda:<RÉGION_AWS>:464622532012:layer:Datadog-<RUNTIME>:<VERSION>

# Pour les régions us-gov
arn:aws-us-gov:lambda:<RÉGION_AWS>:002406178527:layer:Datadog-<RUNTIME>:<VERSION>

Les options RUNTIME disponibles sont Python27, Python36, Python37 et Python38. Pour VERSION, consultez la dernière version. Exemple :

arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Python37:19

Utiliser le package

Installez datadog-lambda et ses dépendances localement dans le dossier du projet de votre fonction. Remarque : datadog-lambda dépend de ddtrace, qui a recours à des extensions natives ; ces extensions doivent donc être installées et compilées dans un environnement Linux. Par exemple, vous pouvez utiliser dockerizePip pour le plug-in Serverless Framework et –use-container pour AWS SAM. Pour en savoir plus, consultez la documentation relative à l’ajout de dépendances à votre package de déploiement de fonction.

pip install datadog-lambda -t ./

Consultez la dernière version.

Configurer la fonction

  1. Définissez le gestionnaire de votre fonction sur datadog_lambda.handler.handler.
  2. Définissez la variable d’environnement DD_LAMBDA_HANDLER sur votre gestionnaire d’origine, comme myfunc.handler.
  3. Définissez la variable d’environnement DD_TRACE_ENABLED sur true.
  4. Définissez la variable d’environnement DD_FLUSH_TO_LOG sur true.
  5. Vous pouvez également définir des tags service et env pour votre fonction avec des valeurs correspondantes.

Abonner le Forwarder Datadog aux groupes de logs

Pour pouvoir envoyer des métriques, traces et logs à Datadog, vous devez abonner la fonction Lambda du Forwarder Datadog à chaque groupe de logs de votre fonction.

  1. Si ce n’est pas déjà fait, installez le Forwarder Datadog.
  2. Abonnez le Forwarder Datadog aux groupes de logs de votre fonction.

Explorer la surveillance sans serveur de Datadog

Après avoir configuré votre fonction en suivant la procédure ci-dessus, vous pouvez visualiser vos métriques, logs et traces sur la page Serverless principale.

Surveiller une logique opérationnelle personnalisée

Si vous souhaitez envoyer une métrique custom ou une span personnalisée, consultez l’exemple de code ci-dessous :

from ddtrace import tracer
from datadog_lambda.metric import lambda_metric

def lambda_handler(event, context):
    # ajouter des tags personnalisés à la span de la fonction lambda,
    # ne fonctionne PAS lorsque le tracing X-Ray est activé
    current_span = tracer.current_span()
    if current_span:
        current_span.set_tag('customer.id', '123456')

    # envoyer une span personnalisée
    with tracer.trace("hello.world"):
        print('Hello, World!')

    # envoyer une métrique custom
    lambda_metric(
        metric_name='coffee_house.order_value',
        value=12.45,
        timestamp=1602008721, # facultatif, doit être dans les 20 dernières minutes
        tags=['product:latte', 'order:online']
    )

    return {
        'statusCode': 200,
        'body': get_message()
    }

# tracer une fonction
@tracer.wrap()
def get_message():
    return 'Hello from serverless!'

Pour en savoir plus sur l’envoi de métriques custom, consultez cette page. Pour en savoir plus sur l’instrumentation personnalisée, consultez la documentation de l’APM Datadog relative à l’instrumentation personnalisée.

Pour aller plus loin