Pour envoyer vos logs Go à Datadog, activez la journalisation au sein d’un fichier et suivez ce fichier avec votre Agent Datadog. Vous pouvez utiliser la configuration suivante aveclogrus, une bibliothèque de journalisation open source.

Datadog vous recommande fortement de configurer votre bibliothèque de journalisation de façon à générer vos logs au format JSON. Vous n’aurez ainsi pas besoin de créer de règles de parsing personnalisées.

Configurer votre logger

Pour une configuration Go classique, ouvrez un fichier main.go et collez le code suivant :

package main

import (
  log "github.com/sirupsen/logrus"
)

func main() {

    // utiliser le JSONFormatteur
    log.SetFormatter(&log.JSONFormatter{})

    // enregistrer comme d'habitude un événement avec logrus
    log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("Mon premier événement de golang à stdout")
}

Vous pouvez ajouter des métadonnées à un log en fournissant l’objet JSON à afficher dans l’événement de log.

Ces métadonnées peuvent correspondre à hostname, username, customers, metric ou à toute autre information facilitant de dépannage et la compréhension du fonctionnement de votre application Go.

package main

import (
  log "github.com/sirupsen/logrus"
)

func main() {

    // utiliser JSONFormatter
    log.SetFormatter(&log.JSONFormatter{})

    // enregistrer un événement avec logrus 
    log.WithFields(log.Fields{"string": "foo", "int": 1, "float": 1.1 }).Info("Mon premier événement de golang à stdout")

  // Pour les métadonnées, un schéma récurrent consiste à réutiliser les champs entre les déclarations de journalisation en réutilisant
  contextualizedLog := log.WithFields(log.Fields{
    "hostname": "staging-1",
    "appname": "foo-app",
    "session": "1ce3f6v"
  })

  contextualizedLog.Info("Événement simple avec des métadonnées globales")

}

Configurer votre Agent Datadog

Une fois la collecte de logs activée, configurez la collecte de logs personnalisée afin de suivre vos fichiers de log et envoyer les nouveaux logs à Datadog.

  1. Créez un dossier go.d/ dans le répertoire de configuration de l’Agent conf.d/.

  2. Créez un fichier conf.yaml dans votre dossier go.d/ avec le contenu suivant :

    ##Log section
    logs:
    
      - type: file
        path: "<path_to_your_go_log>.log"
        service: <service_name>
        source: go
        sourcecategory: sourcecode
    
  3. Redémarrez l’Agent.

  4. Lancez la sous-commande status de l’Agent et cherchez go dans la section Checks pour vérifier que les logs sont bien transmis à Datadog.

Si les logs sont au format JSON, Datadog parse automatiquement les messages de log pour extraire les attributs. Utilisez le Log Explorer pour visualiser et dépanner vos logs.

Associer vos logs à vos traces

Si la solution APM est activée pour cette application, vous pouvez améliorer la corrélation entre vos logs et vos traces d’application en suivant la documentation relative à la journalisation Go pour APM. Cela vous permet d’ajouter automatiquement des identifiants de trace et de span à vos logs.

Meilleures pratiques

  • Nommez le logger avec un nom qui correspond à la fonctionnalité ou au service concerné.
  • Utilisez les niveaux de log DEBUG, INFO, WARNING et FATAL. Dans Datadog, l’adresse FATAL de Go correspond à un niveau de gravité de Emergency.
  • Commencez par enregistrer les informations les plus importantes. Développez l’exhaustivité de votre journalisation au fur et à mesure des itérations.
  • Utilisez des métadonnées pour ajouter du contexte à tous vos logs. Cela vous permet de rapidement filtrer les utilisateurs, les clients ou les attributs métiers capitaux.

Pour aller plus loin