En esta página, aprenderá cómo instrumentar manualmente su función Lambda. Está organizado por lenguaje de ejecución. Si aún no lo ha hecho, cree su cuenta New Relic gratuita a continuación para comenzar a monitorear sus datos hoy.
Para instrumentar su Lambda en lenguaje Go:
Descargue nuestro paquete de agente Go y colóquelo en el mismo directorio que su función.
Instale el agente ejecutando:
bash$go get -u github.com/newrelic/go-agent/v3/newrelicInstale la integración
nrlambda
ejecutando:bash$go get -u github.com/newrelic/go-agent/v3/integrations/nrlambda
En su código Lambda, importe nuestros componentes, cree una aplicación y actualice cómo inicia su Lambda. Vea nuestros ejemplos de instrumentación:
Opcionalmente, agregue un evento personalizado que se asociará con su invocación de Lambda mediante la API
RecordCustomEvent
. Por ejemplo:func handler(ctx context.Context) {if txn := newrelic.FromContext(ctx); nil != txn {txn.Application().RecordCustomEvent("MyEvent", map[string]interface{}{"zip": "zap",})}fmt.Println("hello world!")}Cree y comprima su función Lambda y cárguela en AWS.
Aquí hay sugerencias para comprimir y cargar Lambda:
Compile el binario para su ejecución en Linux. Esto produce un archivo binario llamado
main
. Puedes usar:bash$GOOS=linux go build -o mainComprima el binario en un paquete desplegable usando:
bash$zip deployment.zip mainCargue el archivo zip en AWS mediante la consola de AWS Lambda o la CLI de AWS. Nombra el controlador
main
(para que coincida con el nombre dado durante la compilación binaria).
Las siguientes variables de entorno no son necesarias para que funcione el monitoreo de Lambda, pero sí si desea que su función Lambda se incluya en rastreo distribuido. Para habilitar rastreo distribuido, configure estas variables de entorno en la consola de AWS:
NEW_RELIC_ACCOUNT_ID
. Su ID de cuenta.NEW_RELIC_TRUSTED_ACCOUNT_KEY.
Este también es su ID de cuenta. Si su cuenta es una cuenta infantil, este es el ID de cuenta para la cuenta raíz/principal.
Opcionalmente, para configurar el logging, consulte al logging del agente Go.
Invoque Lambda al menos una vez. Esto crea un grupo log de CloudWatch, que debe estar presente para que funcione el siguiente paso.
Nuestro contenedor recopila datos sobre la ejecución de Lambda, genera un mensaje JSON y lo registra en el log de CloudWatch. A continuación, configurará CloudWatch para enviar esos logs a New Relic.
El monitoreo para AWS Lambda en Java no utiliza nuestro APM agente de Java. En su lugar, utiliza estas dos dependencias de OpenTracing:
AWS Lambda OpenTracing Java SDK: instrumentación de OpenTracing para AWS Lambda RequestHandler y RequestStreamHandler.
Nuestro rastreador AWS Lambda OpenTracing: una implementación de rastreador OpenTracing diseñada para monitor AWS Lambda. Genera spans, evento de error, evento de transacción, error traza y brinda soporte de rastreo distribuido.
Sugerencia
Supported OpenTracing Versions
OpenTracing 0.31.0
:
- Lambda rastreador: com.newrelic.opentracing:newrelic-java-lambda:1.1.1
- SDK de Lambda: com.newrelic.opentracing:java-aws-lambda:1.0.0
OpenTracing 0.32.0, 0.33.0
:
- Lambda rastreador: com.newrelic.opentracing:newrelic-java-lambda:2.2.3
- Lambda SDK: com.newrelic.opentracing:java-AWS Lambda:2.1.1
Para instrumentar su Java Lambda:
En el archivo
build.gradle
de su proyecto, incluya nuestro rastreador OpenTracing AWS Lambda y la dependencia del SDK de AWS Lambda OpenTracing:dependencies {compile("com.newrelic.opentracing:java-aws-lambda:2.1.1")compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.3")compile("io.opentracing:opentracing-util:0.33.0")}Implemente la interfaz AWS Lambda
RequestHandler
como se muestra en el ejemplo de Java Lambda y anule el métododoHandleRequest
.En el método
doHandleRequest
, llame a la APILambdaTracing.instrument(...)
para crear un intervalo de raíz para trazar la ejecución de la función Lambda. Aquí también es donde definirá su lógica de negocios para la función Lambda.Registre un
LambdaTracer.INSTANCE
como rastreador de OpenTracing Global, como se muestra en el ejemplo de Java Lambda.Cree un paquete ZIP desplegable y cárguelo en AWS Lambda. O desplegarlo por otros medios.
En la consola de AWS Lambda, configure el controlador. Para el ejemplo Java Lambda, el controlador sería
com.handler.example.MyLambdaHandler::handleRequest
. Como se suponehandleRequest
, también puedes usarcom.handler.example.MyLambdaHandler
.Las siguientes variables de entorno de la consola de AWS son necesarias si desea que su función Lambda se incluya en rastreo distribuido. Esto es recomendable.
NEW_RELIC_ACCOUNT_ID
. Su ID de cuenta.NEW_RELIC_PRIMARY_APPLICATION_ID
. Este también es su ID de cuenta.NEW_RELIC_TRUSTED_ACCOUNT_KEY
. Este también es su ID de cuenta. Si su cuenta es una cuenta secundaria, este debe ser el ID de la cuenta raíz/principal.
Opcional: en la consola de Lambda, habilite el logging de depuración agregando esta variable de entorno:
NEW_RELIC_DEBUG
estrue
.Invoque Lambda al menos una vez. Esto crea un grupo log de CloudWatch, que debe estar presente para que funcione el siguiente paso.
Nuestro contenedor recopila datos sobre la ejecución de Lambda, genera un mensaje JSON y lo registra en el log de CloudWatch. A continuación, configurará CloudWatch para enviar esos logs a New Relic.
Consulte el ejemplo de rastreo distribuido de AWS Lambda para ver un proyecto completo que ilustra casos de uso comunes como:
- Rastreo distribuido entre función Lambda
- Creación manual de tramos (también conocida como instrumentación personalizada)
- Seguimiento de llamadas externas
- Agregar atributo personalizado (también conocido como etiqueta) a los tramos
Para instrumentar su Lambda Node.js:
Descargue nuestro paquete de agente Node.js y colóquelo en el mismo directorio que su función, asegurándose de que el agente esté instalado como una dependencia en el directorio
node_modules
. Utilice el Nodo administrador de paquetes:bash$npm install newrelic --saveEn su código Lambda, solicite el módulo de agente en la parte superior del archivo y ajuste la función del controlador. Por ejemplo:
const newrelic = require('newrelic');// Other module loads go under the require statement abovemodule.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {// This is your handler function codeconsole.log('Lambda executed');callback();});Opcional: también puede agregar un evento personalizado a su Lambda mediante la API
recordCustomEvent
. Por ejemplo:module.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {newrelic.recordCustomEvent('MyEventType', { foo: 'bar' });console.log('Lambda executed');callback();});Comprima su función Lambda y la carpeta del agente Node.js juntas. Requisitos y recomendaciones:
- No es necesario incluir los archivos de New Relic fuera de la carpeta del agente de New Relic.
- Si el nombre de su archivo de función Lambda es, por ejemplo,
lambda_function.node
, le recomendamos nombrar su archivo ziplambda_function.zip
. No utilice un tarball. - Su Lambda y sus módulos asociados deben estar en el directorio raíz del archivo zip. Esto significa que si comprime una carpeta que contiene los archivos, no funcionará.
Cargue el archivo comprimido en su cuenta de AWS Lambda.
En la consola de AWS, configure estas variables de entorno:
NEW_RELIC_NO_CONFIG_FILE
. Establezca entrue
si no utiliza un archivo de configuración.NEW_RELIC_APP_NAME
: el nombre de su aplicación.NEW_RELIC_ACCOUNT_ID
. Su ID de cuenta.NEW_RELIC_TRUSTED_ACCOUNT_KEY
. Este también es su ID de cuenta. Si su cuenta es una cuenta infantil, este debe ser el ID de la cuenta raíz/principal.
Opcional: para ejecutar el agente en modo serverless fuera de AWS en un entorno local, establezca la variable de entorno
NEW_RELIC_SERVERLESS_MODE_ENABLED
entrue
. (Al ejecutar esto en un entorno AWS Lambda, el agente se ejecutará automáticamente en modo serverless. Do not use this variable if you're running in AWS.)Opcional: para habilitar el logging en modo serverless, configure estas variables de entorno:
- Establezca
NEW_RELIC_LOG_ENABLED
entrue
. - Establezca
NEW_RELIC_LOG
enstdout
para la salida a CloudWatch o configúrelo en cualquier ubicación de archivo que se pueda escribir. NEW_RELIC_LOG_LEVEL
está configurado eninfo
de forma predeterminada y solo se usa al enviar el registro de funciones en su Lambda. Ver otros niveles de logs.
- Establezca
Opcional: si su función Lambda utiliza módulos ES, establezca la variable de entorno
NEW_RELIC_USE_ESM
entrue
. Tenga en cuenta que si usa módulos ES, debe usar async/await o promesas para su función. Las funciones basadas en devolución de llamada no son compatibles.Invoque Lambda al menos una vez. Esto crea un grupo log de CloudWatch, que debe estar presente para que funcione el siguiente paso.
Nuestro contenedor recopila datos sobre la ejecución de Lambda, genera un mensaje JSON y lo registra en el log de CloudWatch. A continuación , configurará CloudWatch para enviar esos logs a New Relic.
Lea más sobre cómo enviar logs de funciones con Lambda.
Para instrumentar su Python Lambda:
Descargue nuestro paquete de agente Python y colóquelo en el mismo directorio que su función. Para hacer esto, use pip:
bash$pip install -t . newrelicImportante
Si utiliza Homebrew, puede recibir este error:
DistutilsOptionError: must supply either home or prefix/exec-prefix -- not both
. Para obtener más información, consulte la publicación de Homebrew en GitHub.En su código Lambda, importe el módulo del agente Python y decore la función del controlador utilizando el decorador New Relic. The New Relic package must be imported first in your code. A continuación se muestra un ejemplo:
import newrelic.agentnewrelic.agent.initialize()@newrelic.agent.lambda_handler()def handler(event, context):...Opcional: también puede agregar un evento personalizado a su Lambda mediante la API
record_custom_event
. He aquí un ejemplo:@newrelic.agent.lambda_handler()def handler(event, context):newrelic.agent.record_custom_event('CustomEvent', {'foo': 'bar'})...Comprima sus carpetas
lambda_function.py
ynewrelic/
juntas siguiendo estas pautas:- No es necesario incluir los archivos New Relic fuera de la carpeta
newrelic/
. - Si el nombre de su archivo de función Lambda es, por ejemplo,
lambda_function.py
, asigne a su archivo zip el nombrelambda_function.zip
. No utilice un tarball. - Su Lambda y sus módulos asociados deben estar en el directorio raíz del archivo zip. Esto significa que si comprime una carpeta que contiene los archivos, no funcionará.
- No es necesario incluir los archivos New Relic fuera de la carpeta
Cargue el archivo comprimido en su cuenta de AWS Lambda.
En la consola de AWS, configure esta variable de entorno:
NEW_RELIC_SERVERLESS_MODE_ENABLED
. Ajustado atrue
Las siguientes variables de entorno no son necesarias para que funcione el monitoreo de Lambda, pero sí si desea que su función Lambda se incluya en rastreo distribuido. Para habilitar rastreo distribuido, configure estas variables de entorno en la consola de AWS:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED
. Establecer en verdadero.NEW_RELIC_ACCOUNT_ID
. Su ID de cuenta.NEW_RELIC_TRUSTED_ACCOUNT_KEY
. Este también es su ID de cuenta. Si su cuenta es una cuenta infantil, este debe ser el ID de la cuenta raíz/principal.
Opcional: para configurar el logging, utilice las variables de entorno
NEW_RELIC_LOG
yNEW_RELIC_LOG_LEVEL
en la consola de AWS.Invoque Lambda al menos una vez. Esto crea un grupo log de CloudWatch, que debe estar presente para que funcione el siguiente paso.
El decorador de New Relic recopila datos sobre la ejecución de Lambda, genera un mensaje JSON y lo registra en el log de CloudWatch. A continuación, configure CloudWatch para enviar esos logs a New Relic.
Hay dos formas de instrumentar la función Lambda Ruby : automática o manualmente.
Instrumentación automática:
Descargue e instale nuestra herramienta Lambda CLI, newrelic-lambda-cli.
Utilice la herramienta para emitir un comando
newrelic-lambda integrations install
. Consulte las instrucciones de uso para obtener más información.Instrumentación manual:
Navegue a la sección del servicio Lambda en la consola web de AWS. Desde allí, busque la función Lambda que desea conectar a New Relic.
En la pestaña Code predeterminada, desplácese hacia abajo hasta la sección Layers y haga clic en el botón Add a layer .
Haga clic en el botón Create layer .
Ahora vaya a Choose a layer y seleccione la opción Specify an ARN .
Vaya a la New Relic's list of layers y use la lista desplegable para seleccionar la región de AWS donde está alojada su función Lambda. Desde allí, ubique el ARN que coincida con la versión y arquitectura de Ruby de su función Lambda. Debería haber dos opciones: X86 y ARM64. Utilice el botón Copy to clipboard o copie manualmente la cadena ARN.
En la sección Specify an ARN del formulario de la consola de AWS, pegue el ARN de la capa New Relic Lambda.
En el formulario de la consola de AWS, haga clic en el botón Add para agregar la capa a su función Lambda.
En la página de su función Lambda, con la pestaña Code predeterminada seleccionada, desplácese hacia abajo hasta la sección Runtime settings y haga clic en el botón Edit .
Haga una copia segura del valor del Handler existente. Lo necesitarás para un paso posterior.
Cambie el valor del Handler a:
newrelic_lambda_wrapper.handler
y haga clic en Save.Cambie a la pestaña de Configuration en la página de su función Lambda.
Seleccione la subpestaña Environment variables .
Defina las siguientes variables de entorno:
NEW_RELIC_ACCOUNT_ID
Establezca su ID de cuentade New RelicNEW_RELIC_LAMBDA_HANDLER
Establezca el valor del controlador original de su función copiado en el paso 8 anteriorNEW_RELIC_LICENSE_KEY
Configure su clave de licencia de New RelicNEW_RELIC_LOG_ENDPOINT
Establecer en 'https://log-api.newrelic.com/log/v1'NEW_RELIC_TELEMETRY_ENDPOINT
Establecer en 'https://cloud-collector.newrelic.com/aws/lambda/v1'
Si desea enviar el registro de su función Lambda a New Relic, que incluirá todo lo que su función escribe en STDOUT, asegúrese de configurar la variable de entorno
NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS
en "verdadero".Sugerencia
La capa New Relic entregará automáticamente el agente Ruby de New Relic y se cargará a través de Ruby
require
antes de la invocación de su función Lambda. Para evitar conflictos, no incluya una copia del agente Ruby en ningún otro lugar. Siéntase libre de realizar cualquier llamada API del agente New Relic Ruby que desee dentro de su función para aprovechar la presencia del agente.