A medida que su organización realiza la transición a una arquitectura de función como servicio (FaaS) con AWS Lambda, comprender y optimizar el rendimiento de la función se vuelve fundamental para garantizar una experiencia del usuario fluida y eficiente. Cada invocación de Lambda representa un posible cuello de botella u oportunidad de mejora.
La instrumentación de New Relic para AWS Lambda proporciona una visibilidad profunda del funcionamiento interno de sus funciones. Al agregar el agente New Relic a su función, cada vez que se invoca su función, New Relic también lo hace. Puede obtener información valiosa sobre métricas de rendimiento clave, como duración, arranques en frío, excepciones y rastreos.
Este documento explicará la arquitectura de monitoreo Lambda de New Relic y lo guiará en el proceso de vinculación de sus cuentas de AWS y New Relic. Deberá vincular sus cuentas antes de implementar sus funciones.
Cómo funciona la instrumentación Lambda
Estos son los elementos esenciales de la instrumentación de AWS Lambda con New Relic:
- Tu función: Tu función es el código que deseas comprender. Quiere saber cuándo encuentra errores, por qué es lento o con qué frecuencia se invoca.
- El agente o SDK de New Relic : Dependiendo del idioma en el que esté escrita su función, New Relic proporciona diferentes agentes o SDK. Su trabajo es hacer el monitoreo real de su código. Mide la duración de las invocaciones de funciones, anota los errores que se producen, registra detalles sobre el evento fuente y las respuestas de las funciones. Para hacer esto, debe ajustar a la función del controlador de invocación de Lambda.
- La extensión New Relic Lambda: cuando implemente la extensión New Relic Lambda en su función, se ejecutará dentro del entorno de ejecución de Lambda, junto con su código. Mejora la telemetría que el agente recopila y la envía al backend de New Relic en lotes. También puede enviar el log de su función a New Relic. No necesita la extensión Lambda para monitor su función con New Relic.
Elige tu método de envío
Hay tres formas de enviar su telemetría AWS Lambda de New Relic. El método de envío que elija dependerá de sus necesidades de datos.
- Costo: la forma más rentable de emplear AWS Lambda es mediante el uso de cualquiera de nuestras capas, que incluyen la extensión Lambda. De forma predeterminada, nuestra extensión nunca envía datos a AWS CloudWatch.
- Confiabilidad: puede enviar sus datos únicamente a través de CloudWatch. Para hacer esto, deshabilitará la extensión New Relic Lambda. Esto significa que su función Lambda será más liviana y no tendrá ningún proceso adicional para ejecutar cuando se invoque. En este caso, el log y la carga se enviarán a New Relic a través de CloudWatch y no a través de la extensión.
- Lo mejor de ambos mundos: el uso de la extensión con AWS CloudWatch como alternativa ayuda a mantener bajos los costos y, al mismo tiempo, brinda seguridad en caso de que haya un problema con la extensión.
Le mostraremos cómo instrumentar su función Lambda usando cada método en nuestros documentos de instrumentación:
- instrumento tu función contenedorizada Lambda
- instrumento tu función Lambda no contenedorizada
- instrumento tu función sin capas Lambda
Antes de que empieces
Antes de habilitar el monitoreo sin servidor usando nuestra capa Lambda, necesitará:
Una cuenta de New Relic con función de administrador o con el Infrastructure manager rol complementario.
Un
.
Una cuenta de AWS con permisos para crear recursos de IAM, secretos administrados y Lambdas. También necesita permisos para crear una pila de CloudFormation y depósitos de S3.
Luego deberás completar lo siguiente:
Instale la configuraciónde AWS CLI v2 usando
aws configure
. Necesitará un ID de clave de acceso de AWS y una clave de acceso secreta de AWS.Instale Python versión 3.3 o superior.
Instale la CLI newrelic-lambda. Para instalar, ejecute lo siguiente:
pip3 install newrelic-lambda-cliDe forma predeterminada, empleamos la política gestionada de AWS
ReadOnlyAccess
. Esto permite que la integración de infraestructura vea todos los recursos de su cuenta, en lugar de solo su función Lambda y métricas de CloudWatch. New Relic recomienda este valor predeterminado, pero entendemos que algunas organizaciones prefieren una postura de seguridad estricta para la integración de terceros. Si desea limitar el acceso de New Relic, se puede otorgar la función de IAM con un mínimo de estas licencias:
Resource: "*" Action: - "cloudwatch:GetMetricStatistics" - "cloudwatch:ListMetrics" - "cloudwatch:GetMetricData" - "lambda:GetAccountSettings" - "lambda:ListFunctions" - "lambda:ListAliases" - "lambda:ListTags" - "lambda:ListEventSourceMappings"
- Antes de ejecutar la CLI, deberá otorgar a New Relic un mínimo de estas licencias en AWS:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CLIAccessPolicy", "Action": [ "cloudformation:CreateChangeSet", "cloudformation:CreateStack", "cloudformation:DescribeStacks", "cloudformation:ExecuteChangeSet", "iam:AttachRolePolicy", "iam:CreateRole", "iam:GetRole", "iam:PassRole", "lambda:AddPermission", "lambda:CreateFunction", "lambda:GetFunction", "logs:DeleteSubscriptionFilter", "logs:DescribeSubscriptionFilters", "logs:PutSubscriptionFilter", "s3:GetObject", "serverlessrepo:CreateCloudFormationChangeSet", "secretsmanager:CreateSecret" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "NRLogAccessPolicy", "Effect": "Allow", "Action": [ "serverlessrepo:CreateCloudFormationTemplate", "serverlessrepo:GetCloudFormationTemplate" ], "Resource": "arn:aws:serverlessrepo:us-east-1:463657938898:applications/NewRelic-log-ingestion" } ]}
Si desea obtener más información sobre nuestra CLI, consulte nuestro repositorio de CLI.
Tiempos de ejecución de lenguaje AWS Lambda recomendados
Recomendamos los siguientes tiempos de ejecución:
- Nodo.js:
nodejs16.x
,nodejs18.x
,nodejs20.x
- Python:
python3.8
,python3.9
,python3.10
,python3.11
,python3.12
- Go:
provided.al2
- Java:
java8.al2
,java11
,java17
- Ruby:
ruby3.2
,ruby3.3
- .NET:
dotnet6
,dotnet8
Considere los costos
Habilitar el monitoreo sin servidor para AWS Lambda puede generar cargos por Amazon Sitio web Services. Nuestra newrelic-log-ingestion
función Lambda, que nos informa sus datos Lambda, se considera un Servicio de terceros: los cargos AWS resultantes de su uso son su responsabilidad.
Si emplea la extensión Lambda, puede evitar el cargo por ingesta de logs de CloudWatch para la telemetría recopilada por New Relic.
Vincule sus cuentas de AWS y New Relic
Antes de poder instrumentar su función, deberá vincular su cuenta AWS a New Relic. Al vincular cuentas, le otorga licencia New Relic para crear un inventario de su cuenta AWS y recopilar automáticamente métricas de CloudWatch para su función Lambda. Una vez que vinculó las cuentas, los recursos de su cuenta AWS aparecerán como entidad en el explorador de entidades.
Capa Lambda de instrumento New Relic con la CLI newrelic-lambda
Para instrumentar la capa Lambda de New Relic, ejecute:
$newrelic-lambda integrations install --nr-account-id YOUR_NR_ACCOUNT_ID$--nr-api-key YOUR_NEW_RELIC_USER_KEY
La CLI newrelic-lambda
agrega New Relic como secreto en AWS Secret Manager para mayor seguridad.
Instalar arroyos métricos
Para que New Relic monitor su función Lambda, deberá instalar métrica Streams o API Polling. Recomendamos usar métrica Streams pero también puedes dejar que la CLI instale automáticamente la integración API Polling por ti.
Si desea emplear métrica Streams, instálelo ahora antes de ejecutar la CLI. Puede instalarlo empleando nuestra integración Connect AWS empleando la documentación de métrica Streams .
Variables de entorno
Cuando instrumenta la capa Lambda de New Relic con la CLI, sus variables de entorno se configurarán automáticamente. Es posible que desee cambiar algunas de las configuraciones predeterminadas y configurar su función Lambda con las variables de entorno que coincidan con sus necesidades de monitoreo. Elija su tiempo de ejecución para ver las variables de entorno disponibles y nuestras recomendaciones para la configuración predeterminada.
Pruebe nuestras funciones de ejemplo
Luego de instrumentar la capa Lambda de New Relic, le recomendamos encarecidamente que pruebe nuestras funciones de ejemplo. Estos ejemplos de trabajo deben emplear como punto de partida para instrumentar su propia función serverless. El uso de estos ejemplos puede ayudarlo a familiarizar con la capa New Relic Lambda, probar el enlace de la cuenta y pueden usar como referencia para su propia instrumentación. Cada ejemplo demuestra cómo agregar licencias, técnicas específicas del tiempo de ejecución para empaquetar su controlador, gestionar la retención log de funciones en CloudWatch y más.
Si bien hay muchas formas de gestionar y desplegar la función Lambda, AWS CloudFormation es el mecanismo que empleamos para nuestros ejemplos.
Nuestros ejemplos se publican, junto con la extensión New Relic Lambda, en este repositorio de GitHub. Hay uno para cada tiempo de ejecución de Lambda que admite New Relic:
También puedes aprender a emplear el instrumento rastreo distribuido en una aplicación sin servidor no trivial en nuestro ejemplo de rastreo distribuido. Ilustra la propagación manual de trazas para SQS y SNS, dos de los servicios más populares que pueden invocar la función Lambda, con funciones de Node, Python, Ruby y Java.
Sugerencia
Al realizar pruebas manualmente, telemetry data pueden retrasar. Recomendamos esperar siete segundos antes de volver a invocar la función, lo que permitirá que se entregue cualquier telemetría almacenada en el búfer.
Resolución de problemas
Si tiene problemas al instrumentar su función Lambda, aquí hay algunos consejos comunes para la resolución de problemas:
Que sigue
Containerized Lambda functions
Si tiene la función Lambda en contenedor, haga clic aquí para instrumento.
Non-containerized Lambda functions
Si tiene la función Lambda no contenedorizada, haga clic aquí para instrumento.
Layerless Lambda functions
Si tienes la función Lambda sin capas, haz clic aquí para instrumento.