Instrumenter des applications Go sans serveur avec le Forwarder Datadog
Présentation
Configuration requise
Si vous ne l’avez pas encore fait :
Après avoir installé l’intégration AWS et le Forwarder Datadog, suivez les étapes suivantes pour instrumenter votre application afin d’envoyer des métriques, des logs et des traces à Datadog.
Configuration
Installation
Installez la bibliothèque Lambda Datadog localement en exécutant la commande suivante :
go get github.com/DataDog/datadog-lambda-go
Instrumentation
Suivez les étapes ci-dessous pour instrumenter la fonction :
Définissez les variables d’environnement DD_FLUSH_TO_LOG
et DD_TRACE_ENABLED
sur true
.
Importez les packages nécessaires dans le fichier déclarant votre gestionnaire de fonction Lambda.
package main
import (
"github.com/aws/aws-lambda-go/lambda"
"github.com/DataDog/datadog-lambda-go"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http"
)
Incorporez votre gestionnaire de fonction Lambda à l’aide du wrapper fourni par la bibliothèque Lambda Datadog.
func main() {
// Wrap your lambda handler like this
lambda.Start(ddlambda.WrapHandler(myHandler, nil))
/* OR with manual configuration options
lambda.Start(ddlambda.WrapHandler(myHandler, &ddlambda.Config{
BatchInterval: time.Second * 15
APIKey: "my-api-key",
}))
*/
}
Utilisez les bibliothèques incluses pour créer des spans supplémentaires, associer vos logs à vos traces et transmettre le contexte de vos traces à d’autres services.
func myHandler(ctx context.Context, event MyEvent) (string, error) {
// Trace an HTTP request
req, _ := http.NewRequestWithContext(ctx, "GET", "https://www.datadoghq.com", nil)
client := http.Client{}
client = *httptrace.WrapClient(&client)
client.Do(req)
// Connect your Lambda logs and traces
currentSpan, _ := tracer.SpanFromContext(ctx)
log.Printf("my log message %v", currentSpan)
// Create a custom span
s, _ := tracer.StartSpanFromContext(ctx, "child.span")
time.Sleep(100 * time.Millisecond)
s.Finish()
}
Abonnement
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.
Tag
Bien que cette opération soit facultative, Datadog vous conseille d’ajouter les tags env
, service
et version
à vos applications sans serveur afin de bénéficier du tagging de service unifié.
Utilisation
Après avoir configuré votre fonction en suivant la procédure ci-dessus, visualisez vos métriques, logs et traces sur la page Serverless principale.
Surveiller une logique opérationnelle personnalisée
Si vous souhaitez envoyer une métrique custom, consultez l’exemple de code ci-dessous :
package main
import (
"github.com/aws/aws-lambda-go/lambda"
"github.com/DataDog/datadog-lambda-go"
)
func main() {
// Inclure la fonction handler dans un wrapper
lambda.Start(ddlambda.WrapHandler(myHandler, nil))
}
func myHandler(ctx context.Context, event MyEvent) (string, error) {
// Envoyer une métrique custom
ddlambda.Metric(
"coffee_house.order_value", // Nom de la métrique
12.45, // Valeur de la métrique
"product:latte", "order:online" // Tags associés
)
// Envoyer une métrique custom avec un timestamp
ddlambda.MetricWithTimestamp(
"coffee_house.order_value", // Nom de la métrique
12.45, // Valeur de la métrique
time.Now(), // Timestamp (dans les 20 dernières minutes)
"product:latte", "order:online" // Tags associés
)
req, err := http.NewRequest("GET", "http://example.com/status")
// Ajouter les en-têtes de tracing distribué Datadog
ddlambda.AddTraceHeaders(ctx, req)
client := http.Client{}
client.Do(req)
}
En savoir plus sur l’envoi de métriques custom.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: