You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zh...@apache.org on 2022/06/23 00:27:14 UTC
[camel-quarkus-examples] 02/06: Use OpenTelemetry instead of deprecated OpenTracing in observability example
This is an automated email from the ASF dual-hosted git repository.
zhfeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus-examples.git
commit d212e3d88f0e649b57e9f3b5a56c849e7279d092
Author: James Netherton <ja...@gmail.com>
AuthorDate: Fri May 13 10:59:39 2022 +0100
Use OpenTelemetry instead of deprecated OpenTracing in observability example
---
observability/README.adoc | 8 ++---
observability/docker-compose.yml | 40 +++++++++++++++++++++
observability/otel-collector-config.yaml | 42 ++++++++++++++++++++++
observability/pom.xml | 10 +++++-
.../tracing/LoggingSpanExporterProducer.java | 35 ++++++++++++++++++
.../src/main/resources/application.properties | 10 +++---
6 files changed, 135 insertions(+), 10 deletions(-)
diff --git a/observability/README.adoc b/observability/README.adoc
index 5c990f0..fad3fff 100644
--- a/observability/README.adoc
+++ b/observability/README.adoc
@@ -63,19 +63,19 @@ You can also directly leverage MicroProfile Health APIs to create checks. Class
The tracing configuration for the application can be found within `application.properties`.
-To view tracing events, start a Jaeger tracing server. A simple way of doing this is with Docker:
+To view tracing events, start a tracing server. A simple way of doing this is with Docker Compose:
[source,shell]
----
-$ docker run -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 \
- -p 16686:16686 -p 14268:14268 -p 9411:9411 jaegertracing/all-in-one:latest
+$ docker-compose up -d
----
-With the server running, browse to http://localhost:16686. Then choose 'greetings-service' from the 'Service' drop down and click the 'Find Traces' button.
+With the server running, browse to http://localhost:16686. Then choose 'camel-quarkus-observability' from the 'Service' drop down and click the 'Find Traces' button.
The `netty-http` consumer route introduces a random delay to simulate latency, hence the overall time of each trace should be different. When viewing a trace, you should see
a hierarchy of 3 spans showing the progression of the message exchange through each endpoint.
+For convenience, tracing events are also logged to the application console.
=== Package and run the application
diff --git a/observability/docker-compose.yml b/observability/docker-compose.yml
new file mode 100644
index 0000000..eb60f01
--- /dev/null
+++ b/observability/docker-compose.yml
@@ -0,0 +1,40 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+version: "2"
+services:
+
+ # Jaeger
+ jaeger-all-in-one:
+ image: jaegertracing/all-in-one:1.33
+ ports:
+ - "16686:16686"
+ - "14268"
+ - "14250"
+
+ # Collector
+ otel-collector:
+ image: otel/opentelemetry-collector:0.50.0
+ command: [ "--config=/etc/otel-collector-config.yaml" ]
+ volumes:
+ - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
+ ports:
+ - "13133:13133" # Health_check extension
+ - "4317:4317" # OTLP gRPC receiver
+ - "55680:55680" # OTLP gRPC receiver alternative port
+ depends_on:
+ - jaeger-all-in-one
diff --git a/observability/otel-collector-config.yaml b/observability/otel-collector-config.yaml
new file mode 100644
index 0000000..b108831
--- /dev/null
+++ b/observability/otel-collector-config.yaml
@@ -0,0 +1,42 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+receivers:
+ otlp:
+ protocols:
+ grpc:
+ endpoint: otel-collector:4317
+
+exporters:
+ jaeger:
+ endpoint: jaeger-all-in-one:14250
+ tls:
+ insecure: true
+
+processors:
+ batch:
+
+extensions:
+ health_check:
+
+service:
+ extensions: [health_check]
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [jaeger]
\ No newline at end of file
diff --git a/observability/pom.xml b/observability/pom.xml
index 680c9dc..04d1a11 100644
--- a/observability/pom.xml
+++ b/observability/pom.xml
@@ -92,12 +92,20 @@
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-opentracing</artifactId>
+ <artifactId>camel-quarkus-opentelemetry</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.opentelemetry</groupId>
+ <artifactId>opentelemetry-exporter-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-opentelemetry-exporter-otlp</artifactId>
+ </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
diff --git a/observability/src/main/java/org/acme/observability/tracing/LoggingSpanExporterProducer.java b/observability/src/main/java/org/acme/observability/tracing/LoggingSpanExporterProducer.java
new file mode 100644
index 0000000..e3ccd2d
--- /dev/null
+++ b/observability/src/main/java/org/acme/observability/tracing/LoggingSpanExporterProducer.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.observability.tracing;
+
+import javax.enterprise.inject.Produces;
+
+import io.opentelemetry.exporter.logging.LoggingSpanExporter;
+import io.opentelemetry.sdk.trace.export.SpanExporter;
+
+/**
+ * Quarkus OpenTelemetry automatically discovers and configures SpanExporter beans at build time.
+ *
+ * The LoggingSpanExporter outputs span details to the application console.
+ */
+public class LoggingSpanExporterProducer {
+
+ @Produces
+ public SpanExporter loggingSpanExporter() {
+ return LoggingSpanExporter.create();
+ }
+}
diff --git a/observability/src/main/resources/application.properties b/observability/src/main/resources/application.properties
index 5b14547..876d847 100644
--- a/observability/src/main/resources/application.properties
+++ b/observability/src/main/resources/application.properties
@@ -20,11 +20,11 @@
#
quarkus.banner.enabled = false
-# Configure Quarkus Jaeger OpenTracing support
-quarkus.jaeger.service-name = greetings-service
-quarkus.jaeger.sampler-type = const
-quarkus.jaeger.sampler-param = 1
-quarkus.jaeger.endpoint = http://localhost:14268/api/traces
+# Identifier for the origin of spans created by the application
+quarkus.application.name=camel-quarkus-observability
+
+# gRPC endpoint for sending spans
+quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://localhost:4317
# Allow metrics to be exported as JSON. Not strictly required and is disabled by default
quarkus.micrometer.export.json.enabled = true