This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot-examples.git

commit 5959d840d2b2074e463f87ff6154fddd91e84718
Author: Stanislav Deviatov <[email protected]>
AuthorDate: Wed May 17 12:22:01 2023 +0200

    Add documentation and fix logging
---
 .../java/com/example/demo/MySimpleCamelRouter.java |   3 +-
 .../CarBooking/src/main/resources/logback.xml      |   2 +-
 .../java/com/example/demo/MySimpleCamelRouter.java |   3 +-
 .../FlightBooking/src/main/resources/logback.xml   |   2 +-
 .../java/com/example/demo/MySimpleCamelRouter.java |   4 +-
 .../HotelBooking/src/main/resources/logback.xml    |   2 +-
 opentelemetry/README.adoc                          | 155 +++++++++++++++++++++
 .../java/com/example/demo/MySimpleCamelRouter.java |   2 +-
 .../TripBooking/src/main/resources/logback.xml     |   2 +-
 opentelemetry/adoc/img/metrics.png                 | Bin 0 -> 301663 bytes
 opentelemetry/adoc/img/trace-async-dag.png         | Bin 0 -> 114031 bytes
 opentelemetry/adoc/img/trace-async.png             | Bin 0 -> 166886 bytes
 opentelemetry/adoc/img/trace-sync-dag.png          | Bin 0 -> 83823 bytes
 opentelemetry/adoc/img/trace-sync.png              | Bin 0 -> 145216 bytes
 pom.xml                                            |   1 +
 15 files changed, 164 insertions(+), 12 deletions(-)

diff --git 
a/opentelemetry/CarBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
 
b/opentelemetry/CarBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
index 4e4415c..d98a53c 100644
--- 
a/opentelemetry/CarBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
+++ 
b/opentelemetry/CarBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
@@ -18,14 +18,13 @@ public class MySimpleCamelRouter extends RouteBuilder {
                 .to("direct:bookCar");
 
         from("direct:bookCar").routeId("bookCar-http")
-                .log(LoggingLevel.INFO, "New book car request with 
traceId=${header.x-b3-traceid}")
+                .log(LoggingLevel.INFO, "New book car request with 
trace=${header.traceparent}")
                 .bean(new AvailableCars(),"getAvailableCar")
                 .unmarshal().json(JsonLibrary.Jackson);
 
         // kafka based 
         from("kafka:car_input?brokers=kafka:9092").routeId("bookCar-kafka")
                 .log(LoggingLevel.INFO, "New book car request via Kafka topic")
-                // .to("log:debug?showAll=true&multiline=true")
                 .bean(new AvailableCars(),"getAvailableCar")
                 .to("kafka:car_output?brokers=kafka:9092");
 
diff --git a/opentelemetry/CarBooking/src/main/resources/logback.xml 
b/opentelemetry/CarBooking/src/main/resources/logback.xml
index e566426..ff3668d 100644
--- a/opentelemetry/CarBooking/src/main/resources/logback.xml
+++ b/opentelemetry/CarBooking/src/main/resources/logback.xml
@@ -6,7 +6,7 @@
         <!-- encoders are assigned the type
              ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
         <encoder>
-            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{traceId:-},%X{spanId:-}] 
%logger{36} - %msg%n</pattern>
+            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{trace_id:-},%X{span_id:-}] 
%logger{36} - %msg%n</pattern>
         </encoder>
     </appender>
 
diff --git 
a/opentelemetry/FlightBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
 
b/opentelemetry/FlightBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
index ec74462..8b9edbb 100644
--- 
a/opentelemetry/FlightBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
+++ 
b/opentelemetry/FlightBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
@@ -19,14 +19,13 @@ public class MySimpleCamelRouter extends RouteBuilder {
                 .to("direct:bookFlight");
 
         from("direct:bookFlight").routeId("bookFlight-http")
-                .log(LoggingLevel.INFO, "New book flight request with 
traceId=${header.x-b3-traceid}")
+                .log(LoggingLevel.INFO, "New book flight request with 
trace=${header.traceparent}")
                 .bean(new AvailableFlights(),"getAvailableFlight")
                 .unmarshal().json(JsonLibrary.Jackson);
 
         // kafka based 
         
from("kafka:flight_input?brokers=kafka:9092").routeId("bookFlight-kafka")
                 .log(LoggingLevel.INFO, "New book flight request via Kafka 
topic")
-                // .to("log:debug?showAll=true&multiline=true")
                 .bean(new AvailableFlights(),"getAvailableFlight")
                 .to("kafka:flight_output?brokers=kafka:9092");
 
diff --git a/opentelemetry/FlightBooking/src/main/resources/logback.xml 
b/opentelemetry/FlightBooking/src/main/resources/logback.xml
index e566426..ff3668d 100644
--- a/opentelemetry/FlightBooking/src/main/resources/logback.xml
+++ b/opentelemetry/FlightBooking/src/main/resources/logback.xml
@@ -6,7 +6,7 @@
         <!-- encoders are assigned the type
              ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
         <encoder>
-            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{traceId:-},%X{spanId:-}] 
%logger{36} - %msg%n</pattern>
+            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{trace_id:-},%X{span_id:-}] 
%logger{36} - %msg%n</pattern>
         </encoder>
     </appender>
 
diff --git 
a/opentelemetry/HotelBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
 
b/opentelemetry/HotelBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
index 189a0ae..5c84edf 100644
--- 
a/opentelemetry/HotelBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
+++ 
b/opentelemetry/HotelBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
@@ -18,15 +18,13 @@ public class MySimpleCamelRouter extends RouteBuilder {
                 .to("direct:bookHotel");
 
         from("direct:bookHotel").routeId("bookHotel-http")
-                .log(LoggingLevel.INFO, "New book hotel request with 
traceId=${header.x-b3-traceid}")
+                .log(LoggingLevel.INFO, "New book hotel request with 
trace=${header.traceparent}")
                 .bean(new AvailableHotels(),"getAvailableHotel")
                 .unmarshal().json(JsonLibrary.Jackson);
 
-                        
         // kafka based 
         from("kafka:hotel_input?brokers=kafka:9092").routeId("bookHotel-kafka")
                 .log(LoggingLevel.INFO, "New book hotel request via Kafka 
topic")
-                // .to("log:debug?showAll=true&multiline=true")
                 .bean(new AvailableHotels(),"getAvailableHotel")
                 .to("kafka:hotel_output?brokers=kafka:9092");
     }
diff --git a/opentelemetry/HotelBooking/src/main/resources/logback.xml 
b/opentelemetry/HotelBooking/src/main/resources/logback.xml
index 61b3d74..9399031 100644
--- a/opentelemetry/HotelBooking/src/main/resources/logback.xml
+++ b/opentelemetry/HotelBooking/src/main/resources/logback.xml
@@ -7,7 +7,7 @@
         <!-- encoders are assigned the type
              ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
         <encoder>
-            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{traceId:-},%X{spanId:-}] 
%logger{36} - %msg%n</pattern>
+            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{trace_id:-},%X{span_id:-}] 
%logger{36} - %msg%n</pattern>
         </encoder>
     </appender>
 
diff --git a/opentelemetry/README.adoc b/opentelemetry/README.adoc
new file mode 100644
index 0000000..ab6efab
--- /dev/null
+++ b/opentelemetry/README.adoc
@@ -0,0 +1,155 @@
+== OpenTelemetry example
+
+== Introduction
+
+This example shows how to use Camel with OpenTelemetry standard:
+image:./adoc/img/example.jpeg?raw=true[example]
+
+The environment is the following:
+
+* Demo apps:
+** link:TripBooking[Trip booking app]
+** link:FlightBooking[Flight booking app]
+** link:HotelBooking[Hotel booking app]
+** link:CarBooking[Car booking app]
+* OpenTelemetry Collector
+* Jaeger
+* Prometheus
+* Apache Kafka _(for async communication between apps cases)_
+
+=== Build
+
+You will need to compile this example first:
+
+[source,sh]
+----
+$ mvn compile
+----
+
+All the following docker-compose commands should be run from this directory.
+
+=== Run the example
+
+You may want to remove any old containers to start clean:
+
+[source,sh]
+----
+$ docker rm -f kafka zookeeper prometheus jaeger otel-collector
+----
+
+We suggest using multiple terminal windows to start the following components:
+
+* Infrastructure components
+* Demo apps
+** TripBooking
+** FlightBooking
+** HotelBooking
+** CarBooking
+* Testing for sending HTTP requests
+
+==== Startup infrastructure components
+
+[source,sh]
+----
+$ docker-compose -f containers/docker-compose.xml up
+----
+
+==== Startup demo apps
+Please use four different shells for each application:
+
+===== CarBooking
+[source,sh]
+----
+$ mvn compile spring-boot:run -f CarBooking/pom.xml
+----
+
+===== HotelBooking
+[source,sh]
+----
+$ mvn compile spring-boot:run -f HotelBooking/pom.xml
+----
+
+===== FlightBooking
+[source,sh]
+----
+$ mvn compile spring-boot:run -f FlightBooking/pom.xml
+----
+
+===== TripBooking
+[source,sh]
+----
+$ mvn compile spring-boot:run -f TripBooking/pom.xml
+----
+
+==== Testing
+
+You can use any HTTP client (web browser, curl, httpie, postman etc.) for 
testing purposes.
+
+===== cURL
+
+Sync communication (over HTTP):
+
+[source,sh]
+----
+$ curl http://127.0.0.1:8080/camel/bookTrip
+----
+
+Async communication (over Kafka):
+
+[source,sh]
+----
+$ curl http://127.0.0.1:8080/camel/asyncBookTrip
+----
+
+==== Links
+
+* Prometheus UI: http://localhost:9090/graph
+* Jaeger UI: http://localhost:16686
+
+=== Outcome
+==== Tracing
+===== Sync case
+You should get a trace view similar to this one:
+
+image::adoc/img/trace-sync.png[]
+
+DAG is the following:
+
+image::adoc/img/trace-sync-dag.png[]
+
+===== Async case
+You should get a trace view similar to this one:
+
+image::adoc/img/trace-async.png[]
+
+DAG is the following:
+
+image::adoc/img/trace-async-dag.png[]
+
+==== Metrics
+
+You will get Camel related metrics similar to these:
+
+image::adoc/img/metrics.png[]
+
+==== Logging
+
+MDC Logging is enabled, and tracing information printing into the logs to find 
corresponding trace logs entries. For example:
+
+[source,sh]
+----
+...
+11:52:18.923 INFO  [d02a363f16e88d9f012a36563b5464f5,9a328d33319645ab] 
bookTrip-http - New book trip request with 
trace=00-d02a363f16e88d9f012a36563b5464f5-9570717e10d38afa-01
+11:52:18.931 INFO  [d02a363f16e88d9f012a36563b5464f5,9a328d33319645ab] 
bookTrip-http - Response: [{"bookingId":82,"car":"Volkswagen 
Jetta","startDate":"12-11-2018","endDate":"15-11-2018","price":152}, 
{"bookingId":907,"flight":"China Eastern Airlines 
2782","startDate":"12-11-2018","endDate":"15-11-2018","price":133}, 
{"bookingId":926,"hotel":"Sheraton","startDate":"12-11-2018","endDate":"15-11-2018","price":200}]
+...
+----
+
+=== Help and contributions
+
+If you hit any problem using Camel or have some feedback, then please
+https://camel.apache.org/community/support/[let us know].
+
+We also love contributors, so
+https://camel.apache.org/community/contributing/[get involved] :-)
+
+The Camel riders!
\ No newline at end of file
diff --git 
a/opentelemetry/TripBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
 
b/opentelemetry/TripBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
index 00d822f..ea8e7b0 100644
--- 
a/opentelemetry/TripBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
+++ 
b/opentelemetry/TripBooking/src/main/java/com/example/demo/MySimpleCamelRouter.java
@@ -21,7 +21,7 @@ public class MySimpleCamelRouter extends RouteBuilder {
         from("direct:bookTrip")
                 .routeId("bookTrip-http")
                 .routeDescription("This is demo service for demonstration 
telemetry aspects")
-                .log(LoggingLevel.INFO, "New book trip request with 
traceId=${header.x-b3-traceid}")
+                .log(LoggingLevel.INFO, "New book trip request with 
trace=${header.traceparent}")
                 .multicast(new MergeAggregationStrategy()).parallelProcessing()
                          
.to("http://localhost:8081/camel/bookCar?bridgeEndpoint=true";)
                          
.to("http://localhost:8082/camel/bookFlight?bridgeEndpoint=true";)
diff --git a/opentelemetry/TripBooking/src/main/resources/logback.xml 
b/opentelemetry/TripBooking/src/main/resources/logback.xml
index e566426..ff3668d 100644
--- a/opentelemetry/TripBooking/src/main/resources/logback.xml
+++ b/opentelemetry/TripBooking/src/main/resources/logback.xml
@@ -6,7 +6,7 @@
         <!-- encoders are assigned the type
              ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
         <encoder>
-            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{traceId:-},%X{spanId:-}] 
%logger{36} - %msg%n</pattern>
+            <pattern>%d{HH:mm:ss.SSS} %-5level [%X{trace_id:-},%X{span_id:-}] 
%logger{36} - %msg%n</pattern>
         </encoder>
     </appender>
 
diff --git a/opentelemetry/adoc/img/metrics.png 
b/opentelemetry/adoc/img/metrics.png
new file mode 100644
index 0000000..d1a9c99
Binary files /dev/null and b/opentelemetry/adoc/img/metrics.png differ
diff --git a/opentelemetry/adoc/img/trace-async-dag.png 
b/opentelemetry/adoc/img/trace-async-dag.png
new file mode 100644
index 0000000..494acb6
Binary files /dev/null and b/opentelemetry/adoc/img/trace-async-dag.png differ
diff --git a/opentelemetry/adoc/img/trace-async.png 
b/opentelemetry/adoc/img/trace-async.png
new file mode 100644
index 0000000..053b11d
Binary files /dev/null and b/opentelemetry/adoc/img/trace-async.png differ
diff --git a/opentelemetry/adoc/img/trace-sync-dag.png 
b/opentelemetry/adoc/img/trace-sync-dag.png
new file mode 100644
index 0000000..573d725
Binary files /dev/null and b/opentelemetry/adoc/img/trace-sync-dag.png differ
diff --git a/opentelemetry/adoc/img/trace-sync.png 
b/opentelemetry/adoc/img/trace-sync.png
new file mode 100644
index 0000000..5f97ad9
Binary files /dev/null and b/opentelemetry/adoc/img/trace-sync.png differ
diff --git a/pom.xml b/pom.xml
index 0b21ae0..29bd6d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,7 @@
                <module>master</module>
                <module>metrics</module>
                <module>observation</module>
+               <module>opentelemetry</module>
                <module>paho-mqtt5-shared-subscriptions</module>
                <module>platform-http</module>
                <module>pojo</module>

Reply via email to