Tracer des applications Go
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Tracer des applications Go

Installation et démarrage

Pour obtenir des instructions de configuration et des détails sur l’utilisation de l’API, consultez la documentation sur l’API de Datadog. Pour l’instrumentation manuelle, utilisez la section Intégrations ci-dessous pour en savoir plus sur les bibliothèques Go et les frameworks qui prennent en charge l’instrumentation automatique.

Pour connaître la définition des termes utilisés dans l’APM, consultez la section Débuter avec l’APM. Pour en savoir plus sur les contributions, consultez le référentiel officiel README.md.

Consultez le document sur la migration si vous devez migrer d’une ancienne version du traceur (p. ex. v<0.6.x) vers la dernière version.

Installation

Si vous avez déjà un compte Datadog, vous trouverez des instructions détaillées dans nos guides intégrés à l’application pour les configurations basées sur un host et les configurations basées sur un conteneur.

Commencez par installer et configurer l’Agent Datadog. Consultez la documentation supplémentaire relative au tracing d’applications Docker ou au tracing d’applications Kubernetes.

Installez ensuite le traceur Go depuis son chemin d’importation canonique :

go get gopkg.in/DataDog/dd-trace-go.v1/ddtrace

Vous êtes alors prêt à importer le traceur et à commencer l’instrumentation de votre code.

Instrumentation automatique

Datadog propose un ensemble de paquets prêts à l’emploi qui prennent en charge l’instrumentation d’un certain nombre de bibliothèques et de frameworks. Vous trouverez la liste des intégrations ci-dessous.

Compatibilité

Pour commencer à tracer vos applications Go, votre environnement doit :

  • Exécuter l’Agent Datadog >= 5.21.1.
  • Utiliser Go 1.12+

Intégrations

Compatibilité des frameworks

Intégrez le traceur go avec la liste de frameworks Web ci-dessous via l’un des paquets d’assistance suivants :

FrameworkType de prise en chargeDocumentation GoDoc de Datadog
GinPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/gin-gonic/gin
Gorilla MuxPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/gorilla/mux
gRPCPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc
gRPC v1.2Prise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12
chiPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/grpc.v12
echoPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/labstack/echo

Compatibilité des bibliothèques

Le traceur Go prend en charge les datastores et les bibliothèques suivants.

BibliothèqueType de prise en chargeExemples et documentation
AWS SDKPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/aws/aws-sdk-go/aws
ElasticsearchPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/olivere/elastic
CassandraPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/gocql/gocql
GraphQLPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/graph-gophers/graphql-go
HTTPPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/net/http
HTTP routerPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/julienschmidt/httprouter
Redis (go-redis)Prise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/go-redis/redis
Redis (redigo)Prise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/garyburd/redigo
Redis (new redigo)Prise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/gomodule/redigo
SQLPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql
SQLxPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/jmoiron/sqlx
MongoDBPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/go.mongodb.org/mongo-driver/mongo
MongoDB (mgo)Prise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/globalsign/mgo
BuntDBPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/tidwall/buntdb
LevelDBPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/syndtr/goleveldb/leveldb
miekg/dnsPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/miekg/dns
Kafka (confluent)Prise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/confluentinc/confluent-kafka-go
Kafka (sarama)Prise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/Shopify/sarama
Google APIPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/google.golang.org/api
go-restfulPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/emicklei/go-restful
TwirpPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/twitchtv/twirp
VaultPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/hashicorp/vault
ConsulPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/hashicorp/consul
GormPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/jinzhu/gorm
KubernetesPrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/k8s.io/client-go/kubernetes
MemcachePrise en charge complètegopkg.in/DataDog/dd-trace-go.v1/contrib/bradfitz/gomemcache/memcache

Remarque : la documentation sur les intégrations contient une description détaillée des paquets pris en charge et de leurs API, ainsi que des exemples d’utilisation.

Les paquets doivent être importés de la façon suivante :

import "gopkg.in/DataDog/dd-trace-go.v1/contrib/<RÉPERTOIRE_PAQUET>/<NOM_PAQUET>"

Configuration

Le traceur est configuré avec des paramètres d’option lorsque la fonction Start est appelée. Voici un exemple de configuration permettant de générer une trace via la bibliothèque HTTP :

package main

import (
    "log"
    "net/http"
    "strings"

    httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http"
    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

func sayHello(w http.ResponseWriter, r * http.Request) {
    msg := "Hello " + strings.TrimPrefix(r.URL.Path, "/")
    w.Write([] byte(msg))
}

func main() {
    // démarrer le traceur avec 0 option ou plus
    tracer.Start(tracer.WithServiceName("test-go"))
    defer tracer.Stop()

    mux := httptrace.NewServeMux() // initialiser le traceur http
    mux.HandleFunc("/", sayHello) // utiliser le traceur pour gérer les URL

    err := http.ListenAndServe(":9090", mux) // définir le port d'écoute
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Pour découvrir toutes les options disponibles pour le traceur, consultez la documentation de configuration.

Extraction et injection d’en-têtes B3

Le traceur de l’APM Datadog prend en charge l’extraction et l’injection d’en-têtes B3 pour le tracing distribué.

L’injection et l’extraction distribuées d’en-têtes sont contrôlées en configurant des styles d’injection/extraction. Deux styles sont actuellement pris en charge : Datadog et B3.

Configurez les styles d’injection via la variable d’environnement DD_PROPAGATION_STYLE_INJECT=Datadog,B3

Configurez les styles d’extraction via la variable d’environnement DD_PROPAGATION_STYLE_EXTRACT=Datadog,B3

Ces variables d’environnement prennent comme valeur une liste des styles d’en-tête autorisés pour l’injection ou l’extraction, séparés par des virgules. Par défaut, seul le style d’extraction Datadog est activé.

Si plusieurs styles d’extraction sont activés, les tentative d’extraction sont effectuées dans l’ordre selon lequel ces styles ont été configurés, et la première valeur extraite avec succès est utilisée.

Modifier le hostname de l’Agent

Configurez vos traceurs d’applications de façon à envoyer des traces à un hostname d’Agent personnalisé :

Le module de tracing Go recherche automatiquement les variables d’environnement DD_AGENT_HOST et DD_TRACE_AGENT_PORT puis s’initialise avec celles-ci.

package main

import (
    "net"
    "os"

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

func main() {
    addr := net.JoinHostPort(
        os.Getenv("DD_AGENT_HOST"),
        os.Getenv("DD_TRACE_AGENT_PORT"),
    )
    tracer.Start(tracer.WithAgentAddr(addr))
    defer tracer.Stop()
}

Configurer le nom de l’environnement APM

Le nom de l’environnement APM peut être configuré dans l’Agent ou en utilisant l’option de démarrage WithEnv du traceur.

package main

import (
    "os"

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

func main() {
    tracer.Start(tracer.WithEnv("<ENVIRONNEMENT>"))
    defer tracer.Stop()

    // ...
}

Pour aller plus loin