Pour envoyer vos logs Python à Datadog, configurez un logger Python afin d’activer la journalisation au sein d’un fichier sur un host, puis suivez ce fichier avec l’Agent Datadog.
Les logs Python peuvent être complexes à gérer à cause des tracebacks. Les tracebacks entraînent la division des logs en plusieurs lignes, ce qui les rend difficiles à associer à l’événement de log d’origine. Pour y remédier, Datadog vous recommande d’utiliser un formateur JSON lors de l’écriture des logs afin de :
Garantir que chaque stack trace est correctement incorporée au bon log
Vous assurer que tous les attributs d’un événement de log sont correctement extraits (gravité, nom du logger, nom du thread, etc.)
Vous trouverez ci-dessous des exemples de configuration pour les bibliothèques de journalisation suivantes :
Le logger Python possède un paramètre extra supplémentaire permettant d’ajouter des attributs personnalisés. Utilisez DJANGO_DATADOG_LOGGER_EXTRA_INCLUDE pour spécifier une expression régulière qui renvoie le nom des loggers pour lesquels vous souhaitez ajouter le paramètre extra.
Créez un dossier python.d/ dans le répertoire de configuration conf.d/ de l’Agent.
Créez un fichier conf.yaml dans le répertoire conf.d/python.d/ avec le contenu suivant :
init_config:instances:##Log sectionlogs:- type:filepath:"<PATH_TO_PYTHON_LOG>.log"service:"<SERVICE_NAME>"source:pythonsourcecategory:sourcecode# For multiline logs, if they start by the date with the format yyyy-mm-dd uncomment the following processing rule#log_processing_rules:# - type: multi_line# name: new_log_start_with_date# pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
Si l’APM est activé pour cette application, associez vos logs et vos traces en ajoutant automatiquement l’ID des traces, l’ID des spans et les paramètres env, service et version à vos logs. Pour ce faire, suivez les instructions relatives à l’utilisation de Python pour l’APM (en anglais).
Remarque : si le traceur de l’APM injecte service dans vos logs, cela remplace la valeur définie dans la configuration de l’Agent.
Une fois cette opération terminée, le log doit avoir le format suivant :
2019-01-07 15:20:15,972 DEBUG [flask.app] [app.py:100] [dd.trace_id=5688176451479556031 dd.span_id=4663104081780224235] – Il s'agit d'un exemple
Si les logs sont au format JSON, les valeurs des traces sont automatiquement extraites tant qu’elles se trouvent au premier niveau ou au sein de blocs extra ou record.extra de premier niveau. Vous trouverez ci-dessous des exemples de log JSON valides pour lesquels les valeurs des traces sont automatiquement parsées.
{"message":"Hello from the private method","dd.trace_id":"18287620314539322434","dd.span_id":"8440638443344356350","dd.env":"dev","dd.service":"logs","dd.version":"1.0.0"}
{"message":"Hello from the private method","extra":{"dd.trace_id":"18287620314539322434","dd.span_id":"8440638443344356350","dd.env":"dev","dd.service":"logs","dd.version":"1.0.0"}}
{"message":"Hello from the private method","record":{"extra":{"dd.trace_id":"1734396609740561719","dd.span_id":"17877262712156101004","dd.env":"dev","dd.service":"logs","dd.version":"1.0.0"}}}