Observabilité des workflows

Ce guide couvre les traces OpenTelemetry pour le diagnostic au niveau de l'exécution.

Traces (OpenTelemetry)

Traces (OpenTelemetry)

Les traces capturent les détails d'exécution (spans, timings, erreurs) et sont optimisées pour le débogage et l'analyse de performance. Elles sont indépendantes des événements de tâches personnalisés.

Observabilité des activités

Observabilité des activités

Les activités génèrent automatiquement des spans. Utilisez le paramètre name pour les rendre plus lisibles :

@workflows.activity(name="Processing customer emails")
async def process_emails(params: ActivityParams) -> ActivityResult:
    # Your activity code
Échantillonnage des traces

Échantillonnage des traces

La collecte de traces est échantillonnée. Par défaut, le worker utilise un échantillonneur basé sur le parent avec un taux configurable, ce qui permet de respecter les décisions en amont.

En bref : pour un contrôle optimal de l'échantillonnage, transmettez un header traceparent au point d'entrée de votre workflow (ou à la périphérie de l'API). Cela vous permet de forcer l'activation ou la désactivation de l'échantillonnage et de propager la trace parente de manière cohérente.

Récupération des traces de workflow

Récupération des traces de workflow

Trois méthodes sont disponibles pour récupérer les données de trace d'une exécution donnée :

  • get_workflow_execution_trace_otel() — Renvoie les données de trace OpenTelemetry brutes (spans avec timings, attributs et relations parent-enfant). Utilisez cette méthode pour alimenter vos propres backends d'observabilité (Jaeger, Grafana Tempo, etc.).
  • get_workflow_execution_trace_summary() — Renvoie un résumé de haut niveau de l'exécution : durée totale, nombre d'activités, nombre d'erreurs. Utile pour les tableaux de bord et les vérifications rapides de statut.
  • get_workflow_execution_trace_events() — Renvoie une liste chronologique des événements de l'exécution. Définissez include_internal_events=False pour filtrer les événements internes à la plateforme et voir uniquement vos événements de workflow et d'activité.
from mistralai.client import Mistral

client = Mistral(api_key="your_api_key")

# Get raw OpenTelemetry trace data (spans, timings, attributes)
trace = client.workflows.executions.get_workflow_execution_trace_otel(
    execution_id=execution_id,
)

# Get high-level summary (duration, activity count, errors)
summary = client.workflows.executions.get_workflow_execution_trace_summary(
    execution_id=execution_id,
)

# Get chronological event list
events = client.workflows.executions.get_workflow_execution_trace_events(
    execution_id=execution_id,
    include_internal_events=False,  # Hide system events
)