Ce produit n'est pas pris en charge par le site Datadog que vous avez sélectionné. ().

Présentation

Vous pouvez corréler les données Test Optimization avec les logs injectés dans Datadog, ce qui vous permet de visualiser et d’analyser les logs pour des cas de test spécifiques.

Examinez les logs pour des cas de test spécifiques grâce à la corrélation entre les logs et les tests.

Configuration

La corrélation peut être configurée différemment selon la manière dont vous envoyez vos données de test à Datadog.

Java

La soumission de logs agentless est prise en charge pour les langages et frameworks suivants :

  • dd-trace-java >= 1.35.2 et Log4j2.

Utilisez les variables d’environnement suivantes pour activer et configurer la soumission de logs agentless :

NomDescriptionValeur par défaut
DD_AGENTLESS_LOG_SUBMISSION_ENABLED (requis)Active/désactive la soumission de logsfalse
DD_AGENTLESS_LOG_SUBMISSION_LEVEL (facultatif)Définit le niveau de log pour la soumission agentlessINFO
DD_AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE (facultatif)Définit la taille maximale de la file d’attente des logs en attente1024
DD_AGENTLESS_LOG_SUBMISSION_URL (facultatif)Définit l’URL personnalisée pour la soumission des logs-

JavaScript/TypeScript

La soumission de logs agentless est prise en charge pour les versions de traceur et les bibliothèques de logs suivantes :

  • dd-trace-js v4.48.0 or later sur la ligne de version v4, ou dd-trace-js v5.24.0 or later sur la ligne de version v5, avec winston.
  • dd-trace-js v5.124.0 or later sur la ligne de version v5, ou dd-trace-js v6.13.0 or later sur la ligne de version v6, avec pino ou bunyan.

Utilisez les variables d’environnement suivantes pour activer et configurer la soumission de logs agentless :

NomDescriptionValeur par défaut
DD_AGENTLESS_LOG_SUBMISSION_ENABLED (requis)Active/désactive la soumission des logsfalse
DD_AGENTLESS_LOG_SUBMISSION_URL (facultatif)Définit une URL personnalisée pour la soumission des logs-

.NET

La soumission de logs agentless est prise en charge pour les langages et frameworks suivants :

  • dd-trace-dotnet >= 2.50.0 et XUnit TestOutputHelper.

Utilisez les variables d’environnement suivantes pour activer et configurer la soumission de logs agentless :

NomDescriptionValeur par défaut
DD_CIVISIBILITY_LOGS_ENABLED (requis)Active/désactive la soumission des logs CI Visibilityfalse

Swift

Utilisez les variables d’environnement suivantes pour activer et configurer la soumission des logs :

NomDescriptionValeur par défaut
DD_ENABLE_STDOUT_INSTRUMENTATIONActive/désactive la soumission des logs stdoutfalse
DD_ENABLE_STDERR_INSTRUMENTATIONActive/désactive la soumission des logs stderrfalse

Python

Prérequis : ddtrace >= 4.8.0.

La soumission des logs est prise en charge pour le framework de test pytest, et uniquement lorsque les logs sont émis avec le module logging de la bibliothèque standard.

Utilisez la variable d’environnement suivante pour activer la soumission des logs en mode Agentless :

NomDescriptionValeur par défaut
DD_AGENTLESS_LOG_SUBMISSION_ENABLED (requis)Active/désactive la soumission des logsfalse

Si vous utilisez Datadog Agent au lieu du mode Agentless, définissez plutôt DD_LOGS_INJECTION=true dans l’environnement :

logs hors processus

Lorsqu’un processus distinct exécute du code déclenché par un test, il a besoin d’un trace_id et d’un span_id provenant de cette trace de test pour corréler ses logs. Utilisez ddtrace.testing.logs.DDTestLogsHandler (ddtrace >= 4.11.0) pour envoyer ces enregistrements de logs vers l’ingestion de logs Datadog, corrélés avec la trace de test d’origine.

DDTestLogsHandler lit les mêmes variables d’environnement que le plugin pytest pour détecter le backend (agentless ou proxy EVP). Il est disponible dans tout sous-processus où ces variables sont disponibles.

Mode Agentless (défini DD_CIVISIBILITY_AGENTLESS_ENABLED=true) :

VariableDescriptionValeur par défaut
DD_API_KEYClé Datadog API(obligatoire)
DD_SITESite Datadogdatadoghq.com

Mode Agent/proxy EVP (par défaut) :

VariableDescriptionValeur par défaut
DD_TRACE_AGENT_URLURL complète de l’agent-
DD_TRACE_AGENT_HOSTNAMENom d’hôte de l’agentlocalhost
DD_TRACE_AGENT_PORTPort de l’agent8126
Thread par worker

Pour un thread par worker de test, utilisez ThreadLocalCorrelationFilter pour associer les enregistrements de logs de chaque thread à la trace de test correcte :

import logging
from ddtrace.testing.logs import DDTestLogsHandler, ThreadLocalCorrelationFilter

with DDTestLogsHandler(service="my-service") as handler:
    correlation = ThreadLocalCorrelationFilter()
    handler.addFilter(correlation)
    logging.getLogger().addHandler(handler)

    while True:
        job = queue.get()  # queue and run_test are provided by your worker framework
        correlation.set_context(trace_id=job.trace_id, span_id=job.span_id)
        run_test(job.item)

DDTestLogsHandler vide automatiquement les enregistrements mis en mémoire tampon lorsqu’il est utilisé comme gestionnaire de contexte. Appelez handler.close() si vous n’utilisez pas la forme de gestionnaire de contexte.

Workers Asyncio

Pour les workers basés sur asyncio, ThreadLocalCorrelationFilter n’est pas compatible avec les workers basés sur asyncio car le stockage local au thread ne se propage pas au-delà des limites asyncio.Task. Sous-classez CorrelationFilter et utilisez plutôt un contextvars.ContextVar, que la boucle d’événements propage automatiquement au-delà des limites await :

import asyncio
import contextvars
import logging
from ddtrace.testing.logs import CorrelationFilter, DDTestLogsHandler

class ContextVarCorrelationFilter(CorrelationFilter):
    def __init__(self):
        super().__init__()
        self._trace_id = contextvars.ContextVar("dd_trace_id", default=None)
        self._span_id = contextvars.ContextVar("dd_span_id", default=None)

    def set_context(self, trace_id, span_id):
        self._trace_id.set(trace_id)
        self._span_id.set(span_id)

    def get_trace_id(self):
        return self._trace_id.get()

    def get_span_id(self):
        return self._span_id.get()

async def run_one(job, correlation):
    correlation.set_context(trace_id=job.trace_id, span_id=job.span_id)
    await run_test(job.item)

async def main(jobs):
    with DDTestLogsHandler(service="my-service") as handler:
        correlation = ContextVarCorrelationFilter()
        handler.addFilter(correlation)
        logging.getLogger().addHandler(handler)
        await asyncio.gather(*(run_one(job, correlation) for job in jobs))

Ruby

La soumission des logs agentless avec Test Optimization des tests est prise en charge pour les applications Rails. Avant d’activer, assurez-vous que votre application est instrumentée avec le traçage Datadog.

Pour utiliser la soumission des logs agentless, vous avez besoin de la version datadog-ci 0.16 ou ultérieure. Les bibliothèques de logs suivantes sont prises en charge :

  • activesupport >= 5.0 (uniquement lors de l’utilisation de ActiveSupport::TaggedLogging)
  • lograge >= 0.14
  • semantic_logger >= 4.0

Utilisez la variable d’environnement suivante pour activer la soumission des logs :

NomDescriptionValeur par défaut
DD_AGENTLESS_LOG_SUBMISSION_ENABLED (requis)Active/désactive la soumission des logsfalse
  1. Configurez la collecte de logs via l’Agent Datadog.
  2. Suivez les étapes décrites dans Corréler les logs et les traces.

Pour aller plus loin

Documentation, liens et articles supplémentaires utiles: