Vous pouvez obtenir une visibilité sur vos fonctions Lambda Java pour comprendre ce qui se passe dans vos applications serverless.
Vous pouvez utiliser la variante de l'agent Java en couche allégée pour obtenir une visibilité sur vos fonctions Lambda Java.
Agent Java de New Relic
L'agent Java de New Relic prend en charge la fonction instrumentée AWS Lambda via un mode serverless dédié. Lors de l’exécution dans une fonction Lambda, l’agent détecte automatiquement l’environnement et passe dans ce mode, qui est optimisé pour la nature éphémère et pilotée par les événements des invocations Lambda.
Important
Le mode Serverless de l'agent Java nécessite Java 17 ou supérieur. Les runtimes Java 11 et antérieurs ne sont pas pris en charge en raison de temps de démarrage initiaux plus longs.
Comment ça marche
En mode serverless, l'agent remplace sa collecte périodique standard et son transport HTTP par un modèle par invocation :
- Lorsqu'une fonction Lambda est invoquée, l'agent intercepte le gestionnaire avant que votre code ne s'exécute.
- Une transaction est créée automatiquement pour l'invocation, capturant le contexte tel que l'ARN Lambda, l'ID de requête et s'il s'agit d'un démarrage à froid.
- Si la charge de l'événement est reconnue (par exemple, un événement API Gateway ou SQS), l'agent extrait les métadonnées de la source de l'événement, classe la transaction comme transaction web ou transaction non web, et ajoute les attributs pertinents.
- Lorsque la transaction se termine, l'agent collecte toute la télémétrie mise en mémoire tampon et l'écrit sous forme de charge compressée et encodée en base64 dans
/tmp/newrelic-telemetryet sous forme de JSON brut sur stdout. - L'extension New Relic Lambda (incluse dans la couche) lit le fichier de télémétrie et transfère les données vers New Relic après chaque invocation.
Couches Lambda
Deux variantes de couche Lambda sont publiées pour l'agent Java :
- Couche complète de l'agent: tous les modules d'instrumentation sont activés. Fournit une visibilité maximale prête à l’emploi, mais entraîne une surcharge de démarrage à froid plus élevée en raison de l’ensemble complet d’auto-instrumentation.
- Couche Slim (recommandée): désactive toute l'auto-instrumentation sauf les modules
aws-lambda-java-core. Cela signifie que les gestionnaires Java Lambda qui implémententRequestHandlerouRequestStreamHandlersont automatiquement instrumentés et commencent à émettre de la télémétrie immédiatement, tandis que toute autre instrumentation (appels au SDK AWS, clients HTTP, etc.) est désactivée sauf si vous l'activez explicitement. C'est le point de départ recommandé pour la plupart des clients.
ARN de couche
Les ARN suivants sont pour la région us-east-1. Remplacez us-east-1 par votre région AWS. La version de la couche commence à 1 et s'incrémente à chaque nouvelle sortie. Pour les dernières versions disponibles, consultez la liste des couches de New Relic.
Variante de couche | Architecture | ARN |
|---|---|---|
Slim (recommandé) | x86_64 |
|
Slim (recommandé) | ARM64 |
|
Complet | x86_64 |
|
Complet | ARM64 |
|
Pour obtenir des instructions d’installation, consultez Instrumentation en couches.
Lorsque vous utilisez l'une ou l'autre couche, définissez le gestionnaire de votre fonction Lambda sur l'une des valeurs de wrapper suivantes afin que l'agent puisse intercepter l'invocation :
RequestHandlerimplémentation :com.newrelic.java.HandlerWrapper::handleRequestRequestStreamHandlerimplémentation :com.newrelic.java.HandlerWrapper::handleStreamsRequest
Détection automatique
L'agent active automatiquement le mode serverless lorsque la variable d'environnement AWS_LAMBDA_FUNCTION_NAME est présente. Aucune configuration explicite n'est requise lors de l'utilisation de la couche Lambda. Le mode Serverless est toujours activé et ne peut pas être écrasé.
Configuration
Les variables d'environnement suivantes sont préconfigurées dans la couche Lambda :
Variable d'environnement | Couche par défaut | Description |
|---|---|---|
|
| Active le mode serverless. Défini sur
par la couche s'il n'est pas déjà défini. |
|
| Par défaut, cela définit le chemin du fichier de log de l'agent Java sur
|
|
| Nom d'application par défaut utilisé par l'agent. Défini par la couche s'il n'est pas déjà défini. Cette valeur n'est pas utilisée dans l'UI de New Relic pour les fonctions Lambda. |
|
| Désactive le transfert de logs dans l'agent. Défini par la couche s'il n'est pas déjà défini. Les logs sont capturés via CloudWatch ou l'extension Lambda à la place. |
|
| Toujours défini sur
par la couche. Empêche l'agent de remplacer le nom de l'application en fonction des données de transaction. |
Les variables d'environnement suivantes sont requises et doivent être définies par vous :
Variable d'environnement | Valeur requise | Description |
|---|---|---|
|
| Pointe AWS Lambda vers le wrapper de l'agent Java de New Relic. Ceci doit toujours être défini sur
lors de l'utilisation de la couche de l'agent Java. |
| Votre clé de licence New Relic | Votre clé de licence d'ingestion New Relic, utilisée pour authentifier la télémétrie envoyée à New Relic. |
| Votre ID de compte New Relic | Requis par l'extension New Relic Lambda pour le tracing distribué. Définissez ceci sur votre ID de compte parent New Relic ou sur votre ID de compte s'il n'y a pas de compte parent. |
Important
Par défaut, l'extension Lambda ou CloudWatch capture votre log. L'agent ne transmet pas les logs directement.
Cold starts
L'agent suit cold starts à l'aide d'un indicateur statique qui est défini lors de la première invocation. Lors des invocations cold start, l'attribut aws.lambda.coldStart=true est ajouté à la transaction. Cet attribut est omis lors des invocations à chaud. Il n'est pas défini sur false.
Important
Temps Cold start : l'ajout de l'agent Java augmente le temps cold start d'environ 4 000 à 6 200 ms par rapport à une fonction sans l'agent. Cela n'affecte que la première invocation. Les invocations à chaud ne sont pas affectées. La couche allégée réduit cela en chargeant moins de modules de monitoring au démarrage.
Pour améliorer les performances de cold start, augmentez le seuil de délai d'attente et l'allocation de mémoire, et utilisez la simultanéité provisionnée.
Télémétrie collectée
En mode serverless, l'agent Java collecte et met en mémoire tampon les types de télémétrie suivants lors de l'invocation :
- Trace de transaction
- Événements d'erreur et erreurs tracées (avec traces d’appels)
- Span événement (pour le tracing distribué)
- Événements de transaction (d'analyse)
- Événements personnalisés
- Événements de log (via CloudWatch par défaut)
- Métriques de performance
Toutes les données collectées sont écrites sous la forme d'une seule charge NR_LAMBDA_MONITORING et transmises à New Relic une fois l'invocation terminée.
Limites
- Java 17+ uniquement. Java 11 et les versions antérieures ne sont pas pris en charge.
- Le profilage de threads n'est pas disponible en mode serverless.
- Le monitoring JFR (Java Flight Recorder) est désactivé en mode serverless.
- Le collecteur JAR (analyse des modules) est désactivé en mode serverless.