Pinboard: A Free, Self-Hosted APM Dashboard That Refused to Die

Pinboard is a free, self-hosted APM dashboard for PHP. It aggregates real-time metrics from Pinba, keeps history, and alerts you on slowdowns. No cloud, no

domingo, 26 de julio de 2026 • 5 min read • Q2BSTUDIO Team

Monitoriza aplicaciones PHP sin coste ni datos en la nube

In the world of software development and operations, there is an uncomfortable truth: infrastructure monitoring tools tell you that the server is on fire, but rarely who lit the match. Entire teams rely on Zabbix, Nagios, or Prometheus to know CPU, memory, or disk status, but when a client reports that 'the site got slow after lunch,' those graphs just shrug. The answer to 'which page, which code path, since when' lives one layer up: in application performance monitoring (APM). SaaS solutions like Datadog APM or New Relic are available, but with costs that for a company running dozens of sites on its own servers can exceed five-figure annual bills, plus a subtle catch: production traffic metadata ends up in someone else's cloud, which in European or enterprise environments opens compliance conversations nobody wants to have.

At Intaro, where the author leads backend development as deputy head, they have had that APM layer for over a decade without paying a cent: Pinboard, an open-source dashboard for Pinba, born in their own repository in 2013. This ecosystem sits alongside Zabbix, watching dozens of production sites live. When something degrades, Zabbix says where; Pinboard says exactly what: the URL, the timer group, and the exact moment it started.

Pinba, the underlying engine, aggregates every request from all PHP servers in real time, queryable via SQL, but it only holds a sliding 15-minute window in RAM. It is brilliant for 'what's happening now,' but useless for 'compare with last Tuesday.' Pinboard's core idea is elegantly simple: every 15 minutes, take a snapshot of the live data and file it. A scheduled aggregation command reads Pinba's in-memory views and writes timestamped snapshots into ordinary InnoDB tables (the ipm_* family) that persist as long as desired—one month by default. This generates history of traffic, response time, CPU and memory per site, per host, and per site-on-host; p90/p95/p99 percentiles; the top 10 slowest, most memory-hungry, and most CPU-hungry pages, with their exact URLs; and pages returning HTTP errors, so 5xx spikes come with names attached.

The most interesting technical detail lives at the boundary between Pinboard and the engine. How do you ask Pinba for request-time percentiles per virtual host? Not by writing a query, but by creating a table with ENGINE=PINBA and a comment defining the report. For example: CREATE TABLE ipm_pinba_report_by_server_90_95_99 ( ... ) ENGINE=PINBA COMMENT='report2:::90,95,99';. The engine parses that comment and from that moment maintains the aggregation incrementally in RAM as UDP packets arrive. Selecting from that table is an instant lookup, not a heavy computation. Pinboard's migrations create a set of these virtual tables, and the aggregator simply harvests them every 15 minutes. The heavy lifting happens where the data already is; the dashboard stays a thin, cheap reader.

The load on production servers is minimal: one UDP packet per request. The PHP extension adds no measurable latency, and the sites cannot even tell whether the dashboard exists. This architecture runs on real client sites, all day, every day.

Pinboard was created by Ilyas Salikhov at Intaro and open-sourced in April 2013. It garnered 475 GitHub stars, 89 forks, and community patches from a dozen contributors. But it was also unmistakably a 2013 artifact: PHP 5.3, Silex, Twig 1, Swiftmailer. Active development faded after 2016; the last commit landed in 2018, the same year Silex was officially discontinued. The project didn't just age, it fossilized: you couldn't legally composer install it on a modern server without complex rituals. And since upstream Pinba was itself stuck on MySQL 5.x, the whole stack quietly drifted toward 'runs only on servers we're afraid to touch.' Yet inside the company it kept running, and kept being useful—a decade-old dashboard still catching real regressions on real sites every week. Tools like that earn a rescue.

In 2026, the author revived Pinboard. It wasn't a port, but a rewrite standing on the old project's shoulders: the same proven data model and reports, everything else new. Backend with Symfony 8 and PHP 8.4/8.5, Doctrine DBAL 4, and PHPStan at level 10. Code last typed in the PHP 5 era now passes the strictest static analysis. The frontend was rebuilt with Webpack Encore and pnpm, replacing the 2013-vintage jQuery. Operations were simplified with a Docker Compose stack: nginx, PHP-FPM, a cron container for aggregation, and the Pinba engine (the fork for MySQL 8.4 LTS / MariaDB). A single docker compose up -d brings the system up. CI with tests and coverage, CodeQL security scanning, Dependabot, and automated releases were added. Thirty accumulated dependency advisories were flushed out. Subtle long-standing issues were also fixed, such as stale aggregation locks after crashes, a tag-history cleanup bug, and per-user server access filtering.

The project lives at github.com/intaro/pinboard, under the MIT license, and the Docker image is pulled about 700 times a month. The entire stack, one command, zero licensing fees. For development teams seeking to keep control of their data and avoid recurring costs, Pinboard is a real alternative to commercial solutions. And this is where Q2BSTUDIO comes in: as a software development and technology company, we know that every project has unique monitoring needs. Whether you are building custom software for your clients or managing cloud infrastructure with cloud AWS/Azure, having tools like Pinboard allows you to understand real code performance without relying on third parties. Integrating AI, cybersecurity, BI with Power BI, or intelligent agents also requires application-level visibility. Being self-hosted and free, Pinboard fits perfectly in environments where privacy and control are critical.

In summary, Pinboard shows that sometimes you don't need to reinvent the wheel—you just need to refuse to let what works die. Thirteen years after its first commit, it is still doing what it was built for: telling developers which page lit the match. And with new maintenance, it is ready for another thirteen years.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.