Instrumenter des applications Ruby sans serveur
Prérequis
Pour ingérer des traces AWS Lambda, des métriques optimisées, des métriques custom et des logs, vous devez utiliser la fonction Lambda du Forwarder Datadog.
Installation
Installer la bibliothèque Lambda Datadog
La bibliothèque Lambda Datadog peut être installée en tant que couche ou en tant que gem. Pour la plupart des fonctions, Datadog vous conseille d’installer la bibliothèque en tant que couche. Si votre fonction Lambda est déployée sous la forme d’une image de conteneur, vous devez installer la bibliothèque en tant que gem.
La version mineure du gem datadog-lambda
correspond toujours à la version de la couche. Par exemple, datadog-lambda v0.5.0 correspond au contenu de la version 5 de la couche.
Option A : configurez les couches pour votre fonction Lambda à l’aide de l’ARN, en respectant le format ci-dessous.
# For regular regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Ruby2-7:13
# For us-gov regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Ruby2-7:13
Remplacez <AWS_REGION>
par une région AWS valide, telle que us-east-1
.
Option B : si vous ne pouvez pas utiliser la couche Lambda Datadog prédéfinie, vous avez la possibilité d’ajouter ce qui suit à votre Gemfile.
gem 'datadog-lambda'
gem 'ddtrace'
ddtrace
contient des extensions natives qui doivent être compilées pour Amazon Linux afin de fonctionner avec AWS Lambda. Datadog vous recommande donc de créer et déployer votre Lambda en tant qu’image de conteneur. Si votre fonction ne peut pas être déployée en tant qu’image de conteneur et que vous souhaitez utiliser la solution APM Datadog, il est conseillé d’installer la bibliothèque Lambda en tant que couche, et non en tant que gem.
Installez gcc
, gmp-devel
et make
avant d’exécuter bundle install
dans le Dockerfile de votre fonction, afin de vous assurer que les extensions natives peuvent être compilées.
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
Configurer vos fonctions Lambda
Activez la solution APM Datadog et incorporez la fonction Lambda de votre gestionnaire à l’aide du wrapper fourni par la bibliothèque Lambda 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
Abonner le Forwarder Datadog aux groupes de logs
Pour pouvoir envoyer des métriques, traces et logs à Datadog, abonnez la fonction Lambda du Forwarder Datadog à chaque groupe de logs de votre fonction.
- Si ce n’est pas déjà fait, installez le Forwarder Datadog.
- Abonnez le Forwarder Datadog aux groupes de logs de votre fonction.
Et ensuite ?
- Vous pouvez désormais visualiser des métriques, logs et traces sur la page d’accueil Serverless.
- Consultez l’exemple de code pour [surveiller une logique opérationnelle personnalisée](#surveiller-une-logique operationnelle-personnalisee).
- Consultez le guide de dépannage si vous ne parvenez pas à recueillir les données de télémétrie.
- Examinez les configurations avancées pour :
- Associer des données de télémétrie à l’aide de tags
- Recueillir des données de télémétrie pour AWS API Gateway, SQS, etc.
- Capturer les charges utiles des requêtes et des réponses Lambda
- Associer les erreurs de vos fonctions Lambda à votre code source
- Filtrer ou nettoyer des informations sensibles des logs ou des traces
Surveiller une logique opérationnelle personnalisée
Si vous souhaitez envoyer une métrique custom ou une span personnalisée, consultez l’exemple de code ci-dessous :
require 'ddtrace'
require 'datadog/lambda'
Datadog::Lambda.configure_apm do |c|
# Activer l'instrumentation
end
def handler(event:, context:)
# Appliquer le wrapper Datadog
Datadog::Lambda::wrap(event, context) do
# Ajouter des tags personnalisés à la span de la fonction Lambda,
# cela ne fonctionne PAS lorsque le tracing X-Ray est activé
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
# Envoyer une métrique custom
Datadog::Lambda.metric(
'coffee_house.order_value', # nom de la métrique
12.45, # valeur de la métrique
time: Time.now.utc, # facultatif, doit être dans les 20 dernières minutes
"product":"latte", # tag
"order":"online" # autre tag
)
end
end
# Instrumenter la function
def some_operation()
Datadog::Tracing.trace('some_operation') do |span|
# À vous de jouer
end
end
Pour en savoir plus sur l’envoi de métriques custom, consultez la section Métriques custom à partir d’applications sans serveur. Pour en savoir plus sur l’instrumentation personnalisée, consultez la documentation sur la solution APM Datadog relative à l’instrumentation personnalisée.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: