Videos
Goblin in action, recorded on quarkus-goblin-demo — The Falling Whale — a medieval tavern whose services are guarded by MicroProfile Fault Tolerance, running under real traffic with Prometheus, Grafana, Loki and Tempo. Every scenario can be replayed on the demo application.
The complete guide
Every assault, the blast radius, the chaos layers, profiles, scenarios and auto-off, the history and the Markdown report, the observability stack, driving Goblin from an AI agent through Dev MCP, and the post-mortem the tavern writes on its own. About seven minutes.
| 0:00 |
Getting started: the Dev UI and the Chaos Dashboard |
| 0:38 |
Server-side assaults (see Assault types) |
| 2:01 |
Client-side assaults |
| 2:33 |
Blast radius (see Targeting) |
| 2:54 |
Chaos layers (see Chaos layers) |
| 3:54 |
Profiles, scenarios and auto-off (see Profiles) |
| 4:45 |
History and Markdown report (see Dev UI panel) |
| 5:24 |
Observability: Prometheus, Grafana, Loki, Tempo (see Metrics (Micrometer / Prometheus) and Tracing (OpenTelemetry)) |
| 6:11 |
AI agents with Dev MCP (see Driving Goblin from an AI agent) |
| 6:24 |
Wrapping up: Disable all and the post-mortem |
Testing your API timeouts with latency
A slow dependency is sneakier than a failing one: it answers, just too late. This video injects latency layer by layer and watches what the timeouts really do: a timeout that never sees the latency, a timeout doing its job, the grey zone around the timeout, a service without a timeout, retries that multiply the waiting time, and an average response time that hides the tail. About six minutes.
| 0:00 |
Introduction |
| 1:33 |
Baseline: normal service |
| 1:47 |
The latency the timeout never sees — latency on the |
| 2:08 |
The timeout does its job — latency on the |
| 2:34 |
The grey zone |
| 3:09 |
No timeout — latency on the |
| 3:31 |
Timeout × retries, and the circuit breaker — client latency on the |
| 4:07 |
The average lies — latency on part of the requests |
| 4:50 |
What your tools see: Grafana, Tempo |
| 5:24 |
Key takeaways |
The key takeaways:
-
Put a timeout on every remote call, and check that it covers the slow part: a fault injected on the inbound HTTP boundary hits the request before the guarded method runs (see Chaos layers).
-
Set it above your normal p99, or it cuts healthy requests.
-
Count the real budget: timeout × (retries + 1) + delays, and keep it below the timeout of your own caller.
-
Add a fallback and a circuit breaker to fail fast when the dependency stops answering.
-
Watch percentiles, not the average.
To replay these scenarios on your own application, see End-to-end example: prove your resilience annotations work.