Injection manuelle

L’API du traceur Go vous permet d’ajouter des informations sur les spans aux messages de log, à l’aide du spécificateur de format %v :

package main

import (
    "net/http"

    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

func handler(w http.ResponseWriter, r *http.Request) {
    // Créer une span pour une requête Web au niveau de l'URL /posts.
    span := tracer.StartSpan("web.request", tracer.ResourceName("/posts"))
    defer span.Finish()

    // Ajouter les informations sur les spans aux messages de log :
    log.Printf("mon message de log %v", span)
}

L’exemple ci-dessus explique comment utiliser le contexte de la span dans le package log de la bibliothèque standard. Cette même logique peut être appliquée aux packages tiers.

Remarque : si vous n’utilisez pas une intégration de log de Datadog pour parser vos logs, des règles de parsing de log personnalisées doivent s’assurer que dd.trace_id, dd.span_id, dd.service, dd.env et dd.version sont parsés en tant que chaînes. Pour en savoir plus, consultez la section Les logs corrélés ne s’affichent pas dans le volet des ID de trace.

Injection dans des logs logrus

Un hook pour le package logrus permettant d’associer automatiquement vos logs et vos spans est disponible. Il est accessible dans dans le traceur Go.

package main

import (
    "github.com/sirupsen/logrus"

    dd_logrus "gopkg.in/DataDog/dd-trace-go.v1/contrib/sirupsen/logrus"
    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

func main() {
    // Facultatif : remplacez le format du log par le format JSON (Cf. Collecte de logs Go)
    logrus.SetFormatter(&logrus.JSONFormatter{})

    // Ajoutez un hook de log de contexte Datadog
    logrus.AddHook(&dd_logrus.DDContextLogHook{}) 

    // ...
}

Cela injecte automatiquement l’identifiant de la trace dans vos logs lorsque vous créez un log avec le contexte.

    // Log avec le contexte
    logrus.WithContext(ctx).Info("Go logs and traces connected!")

Pour aller plus loin