Puede obtener visibilidad de su función Lambda de Java para comprender lo que sucede en su aplicación serverless.
Puede usar la variación del agente de Java de capa ligera para obtener visibilidad de sus funciones Lambda de Java.
Agente de Java de New Relic
El agente de Java New Relic admite la función Lambda instrumentada AWS a través de un modo serverless dedicado. Al ejecutarse dentro de una función Lambda, el agente detecta automáticamente el entorno y cambia a este modo, que está optimizado para la naturaleza efímera y basada en eventos de las invocaciones de Lambda.
Importante
El modo serverless del agente de Java requiere Java 17 o posterior. Los entornos de ejecución de Java 11 y versiones anteriores no se admiten debido a tiempos de inicio iniciales más largos.
Cómo funciona
En el modo sin servidor, el agente reemplaza su cosecha periódica estándar y el transporte HTTP con un modelo por invocación:
- Cuando se invoca una función Lambda, el agente intercepta el controlador antes de que se ejecute su código.
- Se crea una transacción automáticamente para la invocación, capturando contexto como el ARN de Lambda, el ID de solicitud y si se trata de un inicio en frío.
- Si se reconoce la carga del evento (por ejemplo, un evento de API Gateway o SQS), el agente extrae los metadatos del origen del evento, clasifica la transacción como transacción web o transacción no web, y agrega atributos relevantes.
- Cuando la transacción finaliza, el agente recopila toda la telemetría almacenada en búfer y la escribe como una carga comprimida y codificada en Base64 en
/tmp/newrelic-telemetryy como JSON simple en stdout. - La New Relic Lambda Extension (incluida en la capa) lee el archivo de telemetría y reenvía los datos a New Relic después de cada invocación.
Capas de Lambda
Se publican dos variantes de la capa de Lambda para el agente de Java:
- Capa completa del agente: todos los módulos de instrumentación están habilitados. Proporciona la máxima visibilidad lista para usar, pero incurre en una mayor sobrecarga de arranque en frío debido al conjunto completo de instrumentación automática.
- Capa Slim (recomendada): deshabilita toda la instrumentación automática excepto los módulos de
aws-lambda-java-core. Esto significa que los controladores de Java Lambda que implementanRequestHandleroRequestStreamHandlerestán instrumentados automáticamente y comienzan a emitir telemetría listos para usar, mientras que otra instrumentación (llamadas al SDK de AWS, clientes HTTP, etc.) está desactivada a menos que la habilite explícitamente. Este es el punto de partida recomendado para la mayoría de los clientes.
ARN de capas
Los siguientes ARN son para la región us-east-1. Reemplaza us-east-1 con tu región de AWS. La versión de la capa comienza en 1 y se incrementa con cada nuevo lanzamiento. Para las últimas versiones disponibles, consulte la lista de capas de New Relic.
Variante de capa | Arquitectura | ARN |
|---|---|---|
Slim (recomendado) | x86_64 |
|
Slim (recomendado) | ARM64 |
|
Completo | x86_64 |
|
Completo | ARM64 |
|
Para obtener instrucciones de instalación, consulte Instrumentación en capas.
Al usar cualquiera de las capas, establezca el controlador de su función Lambda en uno de los siguientes valores de wrapper para que el agente pueda interceptar la invocación:
RequestHandlerimplementación:com.newrelic.java.HandlerWrapper::handleRequestRequestStreamHandlerimplementación:com.newrelic.java.HandlerWrapper::handleStreamsRequest
Detección automática
El agente habilita automáticamente el modo serverless cuando la variable de entorno AWS_LAMBDA_FUNCTION_NAME está presente. No se requiere configuración explícita al usar la capa Lambda. El modo serverless siempre está habilitado y no se puede sobrescribir.
Configuración
Las siguientes variables de entorno están preconfiguradas en la capa Lambda:
Variable ambiental | Valor predeterminado de la capa | Descripción |
|---|---|---|
|
| Habilita el modo serverless. Establecido en
por la capa si aún no está definido. |
|
| Por defecto, esto establece la ruta del archivo de log del agente de Java en
|
|
| Nombre de aplicación predeterminado usado por el agente. Establecido por la capa si aún no está definido. Este valor no se utiliza en la UI de New Relic para la función Lambda. |
|
| Deshabilita el reenvío de logs en el agente. Establecido por la capa si aún no está definido. En su lugar, los logs se capturan a través de CloudWatch o la extensión Lambda. |
|
| Siempre establecido en
por la capa. Evita que el agente anule el nombre de la aplicación basándose en los datos de la transacción. |
Las siguientes variables de entorno son requeridas y deben ser configuradas por usted:
Variable ambiental | Valor requerido | Descripción |
|---|---|---|
|
| Apunta AWS Lambda al wrapper del agente de Java de New Relic. Esto siempre debe establecerse en
al usar la capa del agente de Java. |
| Su clave de licencia de New Relic | Tu clave de licencia de ingesta de New Relic, usada para autenticar la telemetría enviada a New Relic. |
| Su ID de cuenta de New Relic | Requerido por la extensión New Relic Lambda para el rastreo distribuido. Establezca esto en su ID de cuenta principal de New Relic o en el ID de cuenta si no hay una cuenta principal. |
Importante
Por defecto, la extensión Lambda o CloudWatch captura sus logs. El agente no reenvía logs directamente.
Cold starts
El agente rastrea cold starts usando un indicador estático que se establece en la primera invocación. En las invocaciones de cold start, se agrega el atributo aws.lambda.coldStart=true a la transacción. Este atributo se omite en las invocaciones en caliente. No está establecido en false.
Importante
Tiempo de Cold start: agregar el agente de Java aumenta el tiempo de cold start en aproximadamente 4000-6200 ms en comparación con una función sin el agente. Esto solo afecta la primera invocación. Las invocaciones en caliente no se ven afectadas. La capa ligera reduce esto al cargar menos módulos de monitoreo al inicio.
Para mejorar el rendimiento de cold start, aumente el umbral de tiempo de espera y la asignación de memoria, y use simultaneidad aprovisionada.
Telemetría recopilada
En el modo sin servidor, el agente de Java recopila y almacena en búfer los siguientes tipos de telemetría durante la invocación:
- Traza de la transaccion
- Eventos de error y errores de traza (con rastreos del stack)
- Eventos de span (para el rastreo distribuido)
- Eventos (analíticos) de transacción
- Evento personalizado
- Eventos de log (vía CloudWatch por defecto)
- Métricas de rendimiento
Todos los datos recopilados se escriben como una única carga NR_LAMBDA_MONITORING y se reenvían a New Relic después de que se completa la invocación.
Limitaciones
- Solo Java 17+. Java 11 y anteriores no son compatibles.
- La generación de perfiles de subprocesos no está disponible en modo serverless.
- El monitoreo de JFR (Java Flight Recorder) está deshabilitado en modo serverless.
- El recolector de JAR (escaneo de módulos) está deshabilitado en el modo sin servidor.