Nouvelles annonces sur les technologies sans serveur et réseau ainsi que sur le RUM (Real-User Monitoring) dévoilées à la conférence Dash ! Nouvelles annonces dévoilées à la conférence Dash !

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 basées sur un conteneur.

Commencez par installer et configurer l’Agent Datadog. Consultez la documentation supplémentaire relative au traçage d’applications Docker ou au traçage 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.9+

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

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
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
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

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 (
    "net/http"
    "strings"
    "log"
    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) {
  message := r.URL.Path
  message = strings.TrimPrefix(message, "/")
  message = "Hello " + message
  w.Write([]byte(message))
}

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 davantage de paramètres du traceur, consultez les options disponibles dans la documentation de configuration.

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()
}

Pour aller plus loin