Instrumentación de aplicaciones serverless de Ruby
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.
Instalación
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_apm do |c|
# Enable the instrumentation
end
def handler(event:, context:)
Datadog::Lambda.wrap(event, context) do
return { statusCode: 200, body: 'Hello World' }
end
end
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
export DATADOG_SITE="<DATADOG_SITE>"
Reemplaza <DATADOG_SITE>
por
(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.
export DATADOG_API_KEY_SECRET_ARN="<DATADOG_API_KEY_SECRET_ARN>"
Para agilizar el testeo, también puedes configurar la clave de la API de Datadog en texto sin formato:
export DATADOG_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.
datadog-ci lambda instrument -f <functionname> -f <another_functionname> -r <aws_region> -v 23 -e 66
Para rellenar los parámetros:
- 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.
Si necesitas parámetros adicionales, consulta la documentación acerca de la CLI.
El complemento serverless de Datadog configura automáticamente tus funciones para enviar métricas, trazas (traces) y logs a Datadog mediante la extensión Lambda de Datadog.
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_apm do |c|
# Enable the instrumentation
end
def handler(event:, context:)
Datadog::Lambda.wrap(event, context) do
return { statusCode: 200, body: 'Hello World' }
end
end
Instalar el complemento serverless de Datadog:
serverless plugin install --name serverless-plugin-datadog
Actualiza tu archivo serverless.yml
:
custom:
datadog:
site: <DATADOG_SITE>
apiKeySecretArn: <DATADOG_API_KEY_SECRET_ARN>
Para rellenar los parámetros:
- Reemplaza
<DATADOG_SITE>
por
(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.
Para obtener más información y parámetros adicionales, consulta la documentación acerca del complemento.
Instalar la biblioteca Lambda de Datadog
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 image
RUN yum -y install gcc gmp-devel make
RUN 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:
COPY --from=public.ecr.aws/datadog/lambda-extension:<TAG> /opt/. /opt/
Reemplaza <TAG>
por un número de versión específico (por ejemplo, 66
) o por latest
. Alpine también es compatible con números de versión específicos (como 66-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_apm do |c|
# Enable the instrumentation
end
def handler(event:, context:)
Datadog::Lambda.wrap(event, context) do
return { statusCode: 200, body: 'Hello World' }
end
end
Configurar el sitio y la clave de la API de Datadog
- Configura la variable de entorno
DD_SITE
como
(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 AWS
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:23
# Usa este formato para Lambda de arm64 con un despliegue en regiones comerciales de AWS
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:23
# Usa este formato para Lambda de x86 con un despliegue en regiones GovCloud de AWS
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:23
# Usa este formato para Lambda de arm64 con un despliegue en regiones GovCloud de AWS
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:23
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 contenedor
RUN yum -y install gcc gmp-devel make
RUN 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 regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:66
# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:66
# Use this format for x86-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:66
# Use this format for arm64-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:66
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:
COPY --from=public.ecr.aws/datadog/lambda-extension:<TAG> /opt/extensions/ /opt/extensions
Reemplaza <TAG>
por un número de versión específico (por ejemplo, 66
) 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_apm do |c|
# Enable the instrumentation
end
def handler(event:, context:)
Datadog::Lambda.wrap(event, context) do
return { statusCode: 200, body: 'Hello World' }
end
end
Configurar el sitio y la clave de la API de Datadog
- Configura la variable de entorno
DD_SITE
como
(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.
¿Qué toca hacer ahora?
Monitorizar la lógica de negocio personalizada
Para monitorizar la lógica de negocio personalizada, envía una métrica o un tramo (span) personalizado con el código de ejemplo que aparece abajo. Para ver opciones adicionales, consulta Envío de métricas personalizadas desde aplicaciones serverless y la guía de APM en la sección de Instrumentación personalizada.
require 'ddtrace'
require 'datadog/lambda'
Datadog::Lambda.configure_apm do |c|
# Habilita la instrumentación
end
def handler(event:, context:)
# Aplica la envoltura de Datadog
Datadog::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á habilitado
current_span = Datadog::Tracing.active_span
current_span.set_tag('customer.id', '123456')
some_operation()
Datadog::Tracing.trace('hello.world') do |span|
puts "Hello, World!"
end
# Envía una métrica personalizada
Datadog::Lambda.metric(
'coffee_house.order_value', # el nombre de la métrica
12.45, # el valor de la métrica
time: Time.now.utc, # opcional, debe estar dentro de los últimos 20 min
"product":"latte", # etiqueta
"order":"online" # otra etiqueta
)
end
end
# Instrumenta la función
def some_operation()
Datadog::Tracing.trace('some_operation') do |span|
# Haz algo aquí
end
end
Para obtener más información sobre el envío de métricas personalizadas, consulta Métricas personalizadas de aplicaciones serverless. Para obtener más información sobre la instrumentación personalizada, consulta la documentación de Datadog APM en la sección de Instrumentación personalizada.
Referencias adicionales
Más enlaces, artículos y documentación útiles: