Si ya configuraste tus funciones de Lambda con el Datadog Forwarder, consulta la sección de instrumentación mediante el Datadog Forwarder. De lo contrario, sigue las instrucciones de esta guía para instrumentar mediante la extensión Lambda de Datadog.
Si despliegas tus funciones de Lambda en una VPC sin acceso a la Internet pública, puedes enviar datos con AWS PrivateLink para el sitio de Datadogdatadoghq.com, o bien mediante un proxy en caso de que uses cualquier otro sitio.
Datadog ofrece muchas formas diferentes de habilitar la instrumentación para tus aplicaciones serverless. Elige a continuación el método que mejor se adapte a tus necesidades. Por lo general, Datadog recomienda utilizar la interfaz de línea de comandos (CLI) de Datadog. Debes seguir las instrucciones para “Imagen de contenedor” si despliegas tu aplicación como una imagen de contenedor.
La CLI de Datadog modifica la configuración de las funciones de Lambda existentes para habilitar la instrumentación sin necesidad de llevar a cabo un despliegue nuevo. Es la forma más rápida de empezar a trabajar con la monitorización serverless de Datadog.
Configurar las funciones de Lambda
Habilita Datadog APM y envuelve la función del controlador de Lambda con la envoltura que se encuentra disponible en la biblioteca Lambda de Datadog.
require'datadog/lambda'Datadog::Lambda.configure_apmdo|c|# Enable the instrumentationenddefhandler(event:,context:)Datadog::Lambda.wrap(event,context)doreturn{statusCode:200,body:'Hello World'}endend
Instalar el cliente de la CLI de Datadog
npm install -g @datadog/datadog-ci
Si es la primera vez que usas la monitorización serverless de Datadog, inicia la CLI de Datadog en el modo interactivo para recibir instrucciones sobre cómo realizar la primera instalación. Esto te permitirá entrar en materia rápidamente y saltarte los demás pasos. Si deseas instalar Datadog de forma permanente en tus aplicaciones de producción, omite ese paso y dirígete directamente a los siguientes para ejecutar el comando de la CLI de Datadog en tus pipelines CI/CD después de haber efectuado el despliegue de la forma tradicional.
datadog-ci lambda instrument -i
Configurar las credenciales de AWS
La CLI de Datadog necesita acceder al servicio AWS Lambda y depende del SDK de AWS para JavaScript a la hora de configurar las credenciales. Asegúrate de que tus credenciales de AWS estén configuradas con el mismo método que utilizarás para invocar la CLI de AWS.
Configurar el sitio de Datadog
exportDATADOG_SITE="<DATADOG_SITE>"
Reemplaza <DATADOG_SITE> por datadoghq.com (asegúrate de haber seleccionado el sitio [SITE] correcto del lado derecho).
Configurar la clave de la API de Datadog
Datadog recomienda guardar la clave de la API de Datadog en AWS Secrets Manager para una mayor seguridad y una rotación más sencilla. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). Asegúrate de que tus funciones de Lambda cuenten con el permiso de IAM secretsmanager:GetSecretValue obligatorio.
Para agilizar el testeo, también puedes configurar la clave de la API de Datadog en texto sin formato:
exportDATADOG_API_KEY="<DATADOG_API_KEY>"
Instrumentar las funciones de Lambda
Nota: Antes que nada, instrumenta tus funciones de Lambda en un entorno de desarrollo o de prueba. Si el resultado de la instrumentación no es satisfactorio, ejecuta uninstrument con los mismos argumentos para revertir los cambios.
Para instrumentar tus funciones de Lambda, ejecuta el siguiente comando.
Reemplaza <functionname> y <another_functionname> por los nombres de tus funciones de Lambda. Otra posibilidad es usar --functions-regex para instrumentar automáticamente varias funciones cuyos nombres coincidan con la expresión regular facilitada.
Reemplaza <aws_region> por el nombre de la región de AWS.
Para instalar y configurar el complemento serverless de Datadog, sigue estos pasos:
Configurar las funciones de Lambda
Habilita Datadog APM y envuelve la función del controlador de Lambda con la envoltura que se encuentra disponible en la biblioteca Lambda de Datadog.
require'datadog/lambda'Datadog::Lambda.configure_apmdo|c|# Enable the instrumentationenddefhandler(event:,context:)Datadog::Lambda.wrap(event,context)doreturn{statusCode:200,body:'Hello World'}endend
Reemplaza <DATADOG_SITE> por datadoghq.com (asegúrate de haber seleccionado el sitio [SITE] correcto del lado derecho).
Reemplaza <DATADOG_API_KEY_SECRET_ARN> por el ARN del secreto de AWS siempre que hayas almacenado la clave de la API de Datadog de forma segura. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). El permiso secretsmanager:GetSecretValue es obligatorio. Para agilizar el testeo, puedes usar apiKey y configurar la clave de la API de Datadog en texto sin formato.
Si vas a desplegar tu función de Lambda como una imagen de contenedor, no puedes utilizar la biblioteca Lambda de Datadog como una Lambda Layer. En su lugar, debes empaquetar las bibliotecas de rastreo y Lambda de Datadog dentro de la imagen.
Añade lo siguiente a tu Gemfile:
gem'datadog-lambda'gem'ddtrace'
ddtrace contiene extensiones nativas que deben compilarse para que Amazon Linux funcione con AWS Lambda.
Instala gcc, gmp-devel y make antes de ejecutar bundle install en el Dockerfile de tu función para asegurarte de que las extensiones nativas se compilen correctamente.
FROM <base image># assemble your container imageRUN yum -y install gcc gmp-devel makeRUN bundle config set path 'vendor/bundle'RUN bundle install
Instalar la extensión Lambda de Datadog
Añade la extensión Lambda de Datadog a tu imagen de contenedor mediante la adición de los siguientes parámetros al Dockerfile:
Reemplaza <TAG> por un número de versión específico (por ejemplo, 75) o por latest. Alpine también es compatible con números de versión específicos (como 75-alpine) o con latest-alpine. Puedes ver una lista completa de posibles etiquetas (tags) en el repositorio de Amazon ECR.
Configurar las funciones de Lambda
Habilita Datadog APM y envuelve la función del controlador de Lambda con la envoltura que se encuentra disponible en la biblioteca Lambda de Datadog.
require'datadog/lambda'Datadog::Lambda.configure_apmdo|c|# Enable the instrumentationenddefhandler(event:,context:)Datadog::Lambda.wrap(event,context)doreturn{statusCode:200,body:'Hello World'}endend
Configurar el sitio y la clave de la API de Datadog
Configura la variable de entorno DD_SITE como datadoghq.com (asegúrate de haber seleccionado el sitio [SITE] correcto del lado derecho).
Configura la variable de entorno DD_API_KEY_SECRET_ARN con el ARN del secreto de AWS siempre que hayas almacenado la clave de la API de Datadog de forma segura. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). El permiso secretsmanager:GetSecretValue es obligatorio. Para agilizar el testeo, puedes usar DD_API_KEY y configurar la clave de la API de Datadog en texto sin formato.
Si no utilizas una herramienta de desarrollo serverless compatible con Datadog, como Serverless Framework, Datadog te recomienda instrumentar tus aplicaciones serverless con la CLI de Datadog.
Instalar la biblioteca Lambda de Datadog
La biblioteca Lambda de Datadog puede instalarse como capa o como gema. Para la mayoría de las funciones, Datadog recomienda instalar la biblioteca como capa. Si despliegas tu función de Lambda como una imagen de contenedor, debes instalar la biblioteca como gema.
La versión menor de la gema datadog-lambda siempre coincide con la versión de la capa. Por ejemplo, la versión de datadog-lambda 0.5.0 coincide con el contenido de la versión 5 de la capa.
Opción A: Configura las capas de tu función de Lambda con el ARN en el siguiente formato:
# Usa este formato para Lambda de x86 con un despliegue en regiones comerciales de AWSarn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:24
# Usa este formato para Lambda de arm64 con un despliegue en regiones comerciales de AWSarn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:24
# Usa este formato para Lambda de x86 con un despliegue en regiones GovCloud de AWSarn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:24
# Usa este formato para Lambda de arm64 con un despliegue en regiones GovCloud de AWSarn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:24
Reemplaza <AWS_REGION> por una región de AWS válida, como us-east-1. Las opciones disponibles de RUNTIME son Ruby2-7 y Ruby3-2.
Opción B: Si no puedes utilizar la capa Lambda de Datadog precompilada, puedes instalar las gemas datadog-lambda y ddtrace mediante su adición al Gemfile como alternativa:
gem'datadog-lambda'gem'ddtrace'
ddtrace contiene extensiones nativas que deben compilarse para que Amazon Linux funcione con AWS Lambda. Datadog recomienda, por tanto, compilar y desplegar Lambda como una imagen de contenedor. Si no puedes desplegar tu función como una imagen de contenedor y quieres utilizar Datadog APM, Datadog recomienda instalar la biblioteca Lambda como una capa en lugar de como una gema.
Instala gcc, gmp-devel y make antes de ejecutar bundle install en el Dockerfile de tu función para asegurarte de que las extensiones nativas se compilen correctamente.
FROM <base image># ensambla tu imagen de contenedorRUN yum -y install gcc gmp-devel makeRUN bundle config set path 'vendor/bundle'RUN bundle install
Instalar la extensión Lambda de Datadog
Opción A: Configura las capas de tu función de Lambda con el ARN en el siguiente formato:
# Use this format for x86-based Lambda deployed in AWS commercial regionsarn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:75
# Use this format for arm64-based Lambda deployed in AWS commercial regionsarn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:75
# Use this format for x86-based Lambda deployed in AWS GovCloud regionsarn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:75
# Use this format for arm64-based Lambda deployed in AWS GovCloud regionsarn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:75
Reemplaza <AWS_REGION> por una región de AWS válida, como us-east-1.
Opción B: Añade la extensión Lambda de Datadog a tu imagen de contenedor mediante la adición de los siguientes parámetros al Dockerfile:
Reemplaza <TAG> por un número de versión específico (por ejemplo, 75) o por latest. Puedes ver una lista completa de posibles etiquetas en el repositorio de Amazon ECR.
Configurar las funciones de Lambda
Habilita Datadog APM y envuelve la función del controlador de Lambda con la envoltura que se encuentra disponible en la biblioteca Lambda de Datadog.
require'datadog/lambda'Datadog::Lambda.configure_apmdo|c|# Enable the instrumentationenddefhandler(event:,context:)Datadog::Lambda.wrap(event,context)doreturn{statusCode:200,body:'Hello World'}endend
Configurar el sitio y la clave de la API de Datadog
Configura la variable de entorno DD_SITE como datadoghq.com (asegúrate de haber seleccionado el sitio [SITE] correcto del lado derecho).
Configura la variable de entorno DD_API_KEY_SECRET_ARN con el ARN del secreto de AWS siempre que hayas almacenado la clave de la API de Datadog de forma segura. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). El permiso secretsmanager:GetSecretValue es obligatorio. Para agilizar el testeo, puedes usar DD_API_KEY y configurar la clave de la API de Datadog en texto sin formato.
require'ddtrace'require'datadog/lambda'Datadog::Lambda.configure_apmdo|c|# Habilita la instrumentaciónenddefhandler(event:,context:)# Aplica la envoltura de DatadogDatadog::Lambda::wrap(event,context)do# Añade etiquetas personalizadas al tramo de la función de Lambda,# NO funciona si el rastreo de X-Ray está habilitadocurrent_span=Datadog::Tracing.active_spancurrent_span.set_tag('customer.id','123456')some_operation()Datadog::Tracing.trace('hello.world')do|span|puts"Hello, World!"end# Envía una métrica personalizadaDatadog::Lambda.metric('coffee_house.order_value',# el nombre de la métrica12.45,# el valor de la métricatime:Time.now.utc,# opcional, debe estar dentro de los últimos 20 min"product":"latte",# etiqueta"order":"online"# otra etiqueta)endend# Instrumenta la funcióndefsome_operation()Datadog::Tracing.trace('some_operation')do|span|# Haz algo aquíendend