Skip to content

Latest commit

 

History

History
184 lines (123 loc) · 6.15 KB

File metadata and controls

184 lines (123 loc) · 6.15 KB

Spring Boot Example with Camel Observability Services

Introduction

This example illustrates how to use Spring Boot with Camel to demonstrate observability capabilities. It implements a REST service that generates random numbers with variable response times, showcasing distributed tracing, metrics collection, and monitoring through OpenTelemetry.

The project uses camel-observability-services-starter component for automatic instrumentation, camel-platform-http-starter for REST endpoints, and integrates with OpenTelemetry Java agent for comprehensive observability.

For additional information there is blog post

Observability Stack

To run the complete observability stack with Jaeger and Prometheus:

docker-compose up

This will start:

The application, using agent, sends telemetry data to the OpenTelemetry Collector, which exports traces to Jaeger and metrics to Prometheus.

Run

You can run this example using:

mvn spring-boot:run

After the Spring Boot application is started, you can execute the following HTTP requests:

curl http://localhost:8080/api/random

The command will call the random number generator endpoint. Each call will: - Generate a random number between 1-1000 - Simulate a random delay between 100-2000ms - Return the number as response body - Create traces and metrics for observability

You should see output similar to:

INFO 101511 --- [         task-1] generate-random-number                                   : Generated random number: 742 with delay: 1250ms

Exposed Observability endpoints

The camel-observability-services-starter will configure the application and overrides the actuator setup so the health and metrics (in prometheus format) endpoints will be

http://localhost:9876/observe/health

http://localhost:9876/observe/metrics

even if in this example the metrics will be distributed using OpenTelemetry agent and not scraping the /observe/metrics endpoint

Testing Observability

  1. Generate some traffic:

for i in {1..10}; do curl http://localhost:8080/api/random; echo; sleep 1; done
  1. View traces in Jaeger:

  2. View metrics in Prometheus:

The Spring Boot application can be stopped pressing [CTRL] + [C] in the shell.

Install example on OpenShift

Requirements

  • oc client installed (guide)

  • already logged in into cluster (running oc login)

  • destination project already created (running oc new-project obs-example)

Install operators

  • Red Hat build of OpenTelemetry doc

  • Tempo Operator doc

  • Cluster Observability Operator doc

Create resources

Create tempo monolithic named monolitic-example as distributed tracing storage:

oc apply -f ocp/tempo.yaml

Create roles to send traces via Collector, to the Tempo

oc apply -f ocp/roles.yaml

Create opentelemetry collector named obs-example used to collect everything coming from the agent on the applications and exporting the traces into the tempo storage and the metrics in a prometheus format:

oc apply -f ocp/otel-collector.yaml

Create the opentelementry instrumentation to allow to inject the agent parameter into the startup command in the application

oc apply -f ocp/otel-instrumentation.yaml

Install the distributed tracing UI plugin to show the traces on the OCP console doc

oc apply -f ocp/ui-plugin.yaml

Create the service monitor to allow the prometheus metrics exposed by the opentelemetry collector be scraped by the OpenShift metrics storage

oc apply -f ocp/service-monitor.yaml

Deploy the application

mvn clean install -Popenshift

now once the pods are ready it is possible to call the service

curl http://$(oc get route camel-example-spring-boot-observability-services -o go-template --template='{{.spec.host}}')/api/random

Show traces and metrics

The Distributed Tracing console is available on the OpenShift console in the Observe → Traces item

echo $(oc whoami --show-console)/observe/traces

To query the metrics it is possible to use the integrated OpenShift monitoring console in the Observe → Metrics item

echo $(oc whoami --show-console)/monitoring/query-browser

example query

camel_route_exchange_completed_total{service="obs-example-collector-headless", context="camel-observability-services"}

Help and contributions

If you hit any problem using Camel or have some feedback, then please let us know.

We also love contributors, so get involved :-)

The Camel riders!