OpenTelemetry dans jBPM

 🚀 Introduction

Les systèmes modernes exigent une observabilité de bout en bout. En activant OpenTelemetry (OTel) dans jBPM, vous pouvez suivre les workflows, surveiller l’exécution des tâches et relier les événements de processus aux services externes.

Ce tutoriel montre comment activer OpenTelemetry dans jBPM avec deux approches :

  • Agent Java (aucun changement de code)

  • Instrumentation personnalisée (Process Event Listeners, WorkItemHandlers)


🧱 Prérequis

  • Environnement jBPM en cours d’exécution (KIE Server / Business Central sur WildFly ou jBPM dans Spring Boot)

  • OpenTelemetry Java Agent (opentelemetry-javaagent.jar)

  • Backend de traçage (au choix) :

    • 🧭 Jaeger → http://localhost:4317 (OTLP gRPC)

    • 📊 Grafana Tempo → OTLP gRPC

    • Tout fournisseur supportant OTLP


⚙️ Option A : Activer OTel avec l’Agent Java

WildFly (KIE Server / Business Central)

  1. Téléchargez l’agent Java OTel et placez-le dans /opt/otel/otel-agent.jar.

  2. Modifiez standalone.conf (Linux) ou standalone.conf.bat (Windows) :

JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/otel/otel-agent.jar" JAVA_OPTS="$JAVA_OPTS -Dotel.service.name=kie-server" JAVA_OPTS="$JAVA_OPTS -Dotel.exporter.otlp.endpoint=http://localhost:4317" JAVA_OPTS="$JAVA_OPTS -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp -Dotel.logs.exporter=otlp" JAVA_OPTS="$JAVA_OPTS -Dotel.resource.attributes=service.namespace=jbpm,env=dev"
  1. Redémarrez WildFly → vérifiez les traces dans Jaeger/Tempo.


Application Spring Boot jBPM

Lancez avec :

java -javaagent:/opt/otel/otel-agent.jar \ -Dotel.service.name=jbpm-app \ -Dotel.exporter.otlp.endpoint=http://localhost:4317 \ -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp -Dotel.logs.exporter=otlp \ -Dotel.resource.attributes=service.namespace=jbpm,env=dev \ -jar target/jbpm-app.jar

🧠 Option B : Instrumentation Personnalisée

Ajouter les Dépendances (Maven)

<dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> <version>latest</version> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk</artifactId> <version>latest</version> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-otlp</artifactId> <version>latest</version> </dependency>

Exemple Process Event Listener

public class OtelProcessEventListener implements ProcessEventListener { private final Tracer tracer = GlobalOpenTelemetry.getTracer("jbpm"); @Override public void beforeProcessStarted(ProcessStartedEvent event) { Span span = tracer.spanBuilder("process.start") .setAttribute("jbpm.process.id", event.getProcessInstance().getProcessId()) .setAttribute("jbpm.instance.id", event.getProcessInstance().getId()) .startSpan(); span.end(); } }

Enregistrez-le dans votre session KIE :

ksession.addEventListener(new OtelProcessEventListener());

Exemple WorkItemHandler Personnalisé

Span span = tracer.spanBuilder("service.call").startSpan(); try (Scope s = span.makeCurrent()) { span.setAttribute("http.url", url); span.setAttribute("jbpm.task.name", workItem.getName()); // appel externe } catch (Exception e) { span.recordException(e); span.setStatus(StatusCode.ERROR); throw e; } finally { span.end(); }

🔗 Propagation de Contexte

Pour garder une seule trace entre services :

W3CTraceContextPropagator.getInstance() .inject(Context.current(), httpRequest, (req, k, v) -> req.addHeader(k, v));

🧪 Test Rapide

  • Déployez un processus simple : Start → User Task → End

  • Déclenchez une Service Task (HTTP)

  • Vérifiez dans Jaeger/Tempo :

    • Span de démarrage du processus

    • Spans des nœuds déclenchés

    • Span de l’appel externe


📊 Architecture OpenTelemetry avec jBPM




















🛠️ Dépannage

  • Pas de spans : vérifier le chemin -javaagent et le port OTLP (4317 gRPC ou 4318 HTTP).

  • Services non liés : assurez-vous que les en-têtes traceparent sont propagés.

  • Trop de spans : activez l’échantillonnage :

-Dotel.traces.sampler=parentbased_traceidratio -Dotel.traces.sampler.arg=0.2

🎯 Conclusion

En activant OpenTelemetry dans jBPM, vous obtenez une observabilité complète :

  • Traçage de bout en bout des processus et des services externes

  • Corrélation entre logs et métriques

  • Diagnostic plus rapide et suivi de performance amélioré


💼 Support professionnel disponible

Si vous rencontrez des problèmes sur des projets réels liés au développement backend d’entreprise ou à l’automatisation des workflows, je propose des services de conseil payants, de débogage en production, de support projet et de formations ciblées.

Les technologies couvertes incluent Java, Spring Boot, PL/SQL, Azure, ainsi que l’automatisation des workflows (jBPM, Camunda BPM, RHPAM).

📧 Contact: ishikhanirankari@gmail.com | info@realtechnologiesindia.com


Comments

Popular posts from this blog

jBPM Installation Guide: Step by Step Setup

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained