Présentation

Si vous commencez tout juste à utiliser la surveillance sans serveur Datadog, suivez plutôt les instructions d'instrumentation des fonctions Lambda avec l'extension Lambda Datadog. Si vous avez configuré la surveillance sans serveur Datadog avec le Forwarder Datadog avant que les fonctionnalités Lambda clés en main ne soient proposées, consultez ce guide pour gérer votre instance.
Certaines anciennes versions de datadog-lambda-java importent log4j <=2.14.0 en tant que dépendance transitive. Les instructions de mise à niveau sont indiquées plus loin dans ce guide.

Prérequis

Pour ingérer des traces AWS Lambda, des métriques optimisées, des métriques custom et des logs, vous devez utiliser la fonction Lambda du Forwarder Datadog.

Pour instrumenter entièrement votre application sans serveur grâce au tracing distribué, vos fonctions Lambda Java doivent utiliser le runtime Java 8 Corretto (java8.al2), Java 11 (java11) ou Java 17 (java17).

Configuration

Installation

Installez localement la bibliothèque Lambda Datadog en ajoutant l’un des blocs de code suivants dans pom.xml (Maven) ou build.gradle (Gradle). Remplacez VERSION par le numéro de la dernière version (en ignorant le v qui le précède) : Maven Central

Ajoutez la dépendance suivante dans votre fichier pom.xml :

<dependency>
  <groupId>com.datadoghq</groupId>
  <artifactId>datadog-lambda-java</artifactId>
  <version>VERSION</version>
</dependency>

Ajoutez le bloc suivant dans votre build.gradle :

dependencies {
  implementation 'com.datadoghq:datadog-lambda-java:VERSION'
}

Instrumentation

  1. Installez la couche Lambda Datadog sur votre fonction. La dernière VERSION est 14.

    arn:aws:lambda:<AWS_REGION>:464622532012:layer:dd-trace-java:<VERSION>
    
  2. Configurez les variables d’environnement suivantes sur votre fonction :

    JAVA_TOOL_OPTIONS: -javaagent:"/opt/java/lib/dd-java-agent.jar" -XX:+TieredCompilation -XX:TieredStopAtLevel=1
    DD_LOGS_INJECTION: true
    DD_JMXFETCH_ENABLED: false
    DD_TRACE_ENABLED: true
    
  3. Incorporez la fonction Lambda de votre gestionnaire à l’aide du wrapper fourni par la bibliothèque Lambda Datadog :

    public class Handler implements RequestHandler<APIGatewayV2ProxyRequestEvent, APIGatewayV2ProxyResponseEvent> {
        public Integer handleRequest(APIGatewayV2ProxyRequestEvent request, Context context){
            DDLambda ddl = new DDLambda(request, context); //Required to initialize the trace
    
            do_some_stuff();
            make_some_http_requests();
    
            ddl.finish(); //Required to finish the active span.
            return new ApiGatewayResponse();
        }
    }
    

Abonnement

Pour pouvoir envoyer des métriques, traces et logs à Datadog, abonnez 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.

Surveiller les démarrages à froid des fonctions Lambda Java

Des démarrages à froid se produisent lorsque vos applications sans serveur voient tout d’un coup leur trafic augmenter, notamment lorsque la fonction en question était inactive ou lorsqu’elle recevait un nombre relativement constant de requêtes. Aux yeux des utilisateurs, les démarrages à froid entraînent des ralentissements ou des délais de réponse plus importants. Dans le but de réduire au maximum les démarrages à froid, Datadog vous conseille de configurer un monitor sur la fonction Lambda Java concernée et d’utiliser les informations exploitables liées à vos applications sans serveur.

Surveiller les démarrages à froid d'une fonction Lambda Java

Pour créer un monitor Datadog sur les démarrages à froid d’une fonction Lambda Java, suivez les étapes de création d’un monitor et appliquez les paramètres suivants :

  • Nom de la métrique : aws.lambda.enhanced.invocations
  • À partir de : runtime:java* et cold_start:true
  • Groupe d’alertes : alertes multiples, avec le déclenchement d’une alerte distincte pour chaque function_arn

Tag

Bien que cette opération soit facultative, Datadog vous recommande d’ajouter les tags réservés env, service et version à vos applications sans serveur. Pour en savoir plus sur les tags réservés, consultez la section Tagging de service unifié.

Explorer les logs

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

Surveiller une logique opérationnelle personnalisée

Pour envoyer une métrique custom, consultez l’exemple de code ci-dessous :

public class Handler implements RequestHandler<APIGatewayV2ProxyRequestEvent, APIGatewayV2ProxyResponseEvent> {
    public Integer handleRequest(APIGatewayV2ProxyRequestEvent request, Context context){
        DDLambda ddl = new DDLambda(request, context);

        Map<String,Object> myTags = new HashMap<String, Object>();
            myTags.put("product", "latte");
            myTags.put("order","online");

        // Envoyer une métrique custom
        ddl.metric(
            "coffee_house.order_value", // Nom de la métrique
            12.45,                      // Valeur de la métrique
            myTags);                    // Tags associés

        URL url = new URL("https://example.com");
        HttpURLConnection hc = (HttpURLConnection)url.openConnection();
        hc.connect();

        ddl.finish();
    }
}

Pour en savoir plus sur l’envoi de métriques custom, consultez la documentation dédiée.

Associer vos logs à vos traces

Pour associer automatiquement vos logs de fonction Lambda Java à vos traces, consultez les instructions de la section Associer vos logs Java à vos traces.

Si vous n'utilisez pas le runtime Java approprié, des messages d'erreur, tels que Error opening zip file or JAR manifest missing : /opt/java/lib/dd-java-agent.jar, peuvent s'afficher. Veillez à utiliser le runtime java8.al2 ou java11, comme indiqué ci-dessus.

Mise à niveau

L’Apache Foundation a annoncé que log4j, une bibliothèque de journalisation Java couramment utilisée, est vulnérable à l’exécution de code à distance. Certaines versions de datadog-lambda-java comportent une dépendance transitive sur log4j qui peut être impactée par cette vulnérabilité. Voici les versions concernées :

  • <=0.3.3
  • 1.4.0

La dernière version de datadog-lambda-java est Maven Central. Utilisez cette version (en ignorant le v qui la précède) durant la procédure de mise à jour indiquée ci-dessous.

Si vous ne souhaitez pas effectuer de mise à niveau vers 1.4.x, la version 0.3.x a également été mise à jour afin d’inclure les derniers patchs de sécurité relatifs à log4j. La dernière version 0.3.x est disponible dans le référentiel datadog-lambda-java.

La version de la dépendance datadog-lambda-java dans votre fonction Lambda est définie dans pom.xml (Maven) ou build.gradle (Gradle).

Votre fichier pom.xml contient une section qui ressemble à ceci :

<dependency>
  <groupId>com.datadoghq</groupId>
  <artifactId>datadog-lambda-java</artifactId>
  <version>VERSION</version>
</dependency>

Remplacez VERSION par la dernière version de datadog-lambda-java (disponible ci-dessus). Redéployez ensuite votre fonction Lambda.

Votre fichier build.gradle contient une section qui ressemble à ceci :

dependencies {
  implementation 'com.datadoghq:datadog-lambda-java:VERSION'
}

Remplacez VERSION par la dernière version de datadog-lambda-java (disponible ci-dessus). Redéployez ensuite votre fonction Lambda.

Si vous effectuez une mise à niveau depuis la version 0.3.x vers la version 1.4.x et que vous souhaitez utiliser le traceur dd-trace-java, recherchez la référence à la couche Lambda dd-trace-java et remplacez-la par ce qui suit :

arn:aws:lambda:<RÉGION_AWS>:464622532012:layer:dd-trace-java:4