Step 7 — Seeing what happens

Metrics, health and traces, and reading them when something is wrong.

← step 6 · the path →

Run it

One command, whichever language you came for. The image carries the toolchain, the library and RabbitMQ; the management UI is on http://localhost:15672 (guest/guest) while it runs, and --keep holds it open afterwards.

docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-java:0.7.15 step 7
docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-python:0.7.12 step 7
docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-ruby:0.7.14 step 7
docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-dotnet:0.7.13 step 7
docker run --rm -p 15672:15672 ghcr.io/acemq-company/acemq-tutorials-go:0.9.9 step 7

Side by side

Java Python Ruby .NET Go
Example 03-telemetry 03-metrics-and-health
04-tracing
03-observability 09-telemetry-csharp 02-metrics-and-health
06-tracing
Tutorial: observability Java Python Ruby .NET Go
Observability Java Python Ruby .NET Go

Java

acemq-java-amqp 0.7.15, acemq-java-amqp-examples examples-v0.7.15.

intermediate/03-telemetry

An order takes nine seconds. Without propagation that shows up as four unrelated one-second spans in four services, and five seconds nobody can account for. With it, one trace explains the whole thing.

Python

acemq-python-amqp 0.7.12, acemq-python-amqp-examples examples-v0.7.12.

advanced/03-metrics-and-health

/acemq-metrics, /acemq-health and /acemq-info, on the same paths as Java, Go and .NET.

advanced/04-tracing

A consumer's span joined to the publish that caused it, minutes and processes apart.

Ruby

acemq-ruby-amqp 0.7.14, acemq-ruby-amqp-examples examples-v0.7.14.

advanced/03-observability

The three questions somebody asks about a running service, and where each answer comes from: how much is moving, whether it is working, and which message it was.

.NET

acemq-dotnet-amqp 0.7.13, acemq-dotnet-amqp-examples examples-v0.7.13.

intermediate/09-telemetry-csharp

An order is placed, a handler ships it by publishing again, and a second handler hears about the shipment. Four operations and two trips through the broker land in one trace — and then the same traffic is scraped as Prometheus metrics, over HTTP, and checked against what actually happened.

Go

acemq-go-amqp 0.9.9, acemq-go-amqp-examples examples-v0.9.9.

advanced/02-metrics-and-health

A consumer handles twenty events and rejects four of them, while the actuator package serves what happened over HTTP: /acemq-health for a probe, /acemq-info for what is running, and /acemq-metrics for Prometheus. The paths are the same as in the Java and .NET libraries, so a scrape configuration or a probe written for one works against the others.

advanced/06-tracing

A consumer's span is a child of the publish that caused it, and the parent came off the message rather than out of ambient context.