Boring Observability GitHub

Self-hosted observability for Laravel.

We make monitoring tools that install with composer require and run inside your application. Their data goes in your own database and their dashboards are served from your own domain, so there is no agent to deploy and nothing leaves your servers.

What we make

Each product has its own pages, with its docs and its pricing. What they have in common is the rule that your data stays with you.

Skyline Available

Queue control on top of Laravel Horizon.

A drop-in replacement for Horizon that keeps its dashboard and adds the alerting and controls it leaves out. It tells you when Horizon stops, a queue stalls or workers crash-loop, and sends a recovery message when it clears. Held ShouldBeUnique locks get a screen and a release button, and a single queue can be paused.

  • ▸ Memory and CPU measured per job, and every job logged
  • ▸ Queue depth and job metrics exported to Prometheus
Requizon Available

A dashboard for the HTTP calls your app makes out.

One middleware on Laravel's HTTP client records every outbound call with its duration, status and failure type. When a vendor has a bad morning, you can see which API it was, on which path, and what it sent back.

  • ▸ A 200 OK with an error in the body counted as a failure
  • ▸ Credentials redacted from parameters and headers before they are stored
Sailfish Available

The MySQL history a restart wipes out.

performance_schema only counts since the server last booted. Sailfish reads it every five minutes and keeps what moved, so "when was this index last used?" still has an answer next month.

  • ▸ Flags indexes that went cold, were never used or are redundant, and surges in full-table scans
  • ▸ Sends urgent events to mail, Slack or a webhook, and the rest in a daily digest

Free, MIT-licensed, on Packagist

Smaller packages we maintain in the open. None of them needs one of the products above.

Prometheus metrics for your application's outbound HTTP, with a Grafana dashboard to read them. Duration, host, endpoint and outcome of every transfer, and no bodies, headers or database.

More about httptheus
$ composer require boring-o11y/httptheus

PHPStan rules for Livewire. A public property the browser can set but the server trusts, like $tenantId seeded in mount(), fails CI until it is marked #[Locked].

More about wirestan
$ composer require --dev boring-o11y/wirestan

All our packages. Everything else we publish is on github.com/boring-o11y.

Missing a tool?

If something in your Laravel stack keeps going unobserved, tell us about it. It might be what we build next.

tech@boring-observability.dev