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.
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")
}
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.
Créez un dossier go.d/
dans le répertoire de configuration de l’Agent conf.d/
.
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
Redémarrez l’Agent.
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
Documentation, liens et articles supplémentaires utiles: