Slowpoke vs Elastic APM
Elastic APM is the one tool on this list that matches Slowpoke on both of the things we usually win on: it is free, and you host it. The difference is what you have to run to get it (Elasticsearch, Kibana and an APM Server) and what it hands you once it is up.
The short answer
Which one you should pick
If the Elastic Stack is already in your building, this is a close call and Elastic may well win it. If it is not, you are being asked to adopt a search cluster in order to find a slow query.
Choose Elastic APM if
You already run the Elastic Stack
- Your logs are already in Elasticsearch and your team already lives in Kibana.
- You want logs, metrics, traces and APM correlated in one place you already operate.
- You need distributed tracing across many services, with full trace search. Slowpoke has none.
- You want Elastic's language agents, its OpenTelemetry distribution and OTLP intake in one server.
Choose Slowpoke if
You do not want to run a cluster to answer one question
- You have three servers and no platform team, and Elasticsearch is a second system to keep alive.
- You want the machines you inherited mapped for you, not an index to fill.
- You want EXPLAIN plans with the index to add, which no APM server produces.
- You want everything priced in one unit a non-engineer can read.
- You want the findings to become work that closes when the numbers say so.
Side by side
Slowpoke and Elastic APM, line by line
Written to be fair, including where Elastic APM is the better tool. If a row here is wrong or out of date, that is a bug: open an issue and it gets corrected.
| Aspect | Slowpoke | Elastic APM |
|---|---|---|
| Price | €0 | €0 for the free tier, self-hosted |
| Licence | Open source | Elastic Licence by default; an Apache-2.0 distribution exists |
| What you have to run | One 21 MB binary, SQLite or PostgreSQL | Elasticsearch, Kibana and APM Server |
| Memory footprint | 64 MB agent, small server | A JVM search cluster, sized to your data |
| Where your data lives | Your machines | Your machines |
| Before the first answer | One command per machine, about 15 minutes | Stand up the stack, then instrument the applications |
| Works with no instrumentation | Yes: access logs, slow logs, DB statistics, /proc | Agents or OTLP required |
| Maps what you inherited | Reads sites, pools, databases, caches, apps and frameworks | Shows what you instrumented |
| Says what it cannot see | Yes, with the lines that fix it | No |
| Prioritised for you | Seconds of waiting per day, one list | Charts, and the queries you write |
| Query plans with a fix | Real EXPLAIN, twelve named diagnoses | No |
| Code origin of a query | File and line, via framework packages | Auto-instrumentation rarely gives one |
| Distributed tracing | Not its job | Full trace waterfalls and search |
| Logs at scale | Never | It is Elasticsearch |
| Work that verifies itself | Missions closed by measurement | No |
Free is not the same as cheap
Elastic APM costs nothing to license in its free tier, and that is a real and generous thing. What it costs is operational: an Elasticsearch cluster and a Kibana, sized and tuned and kept alive, plus an APM Server in front. If you already run all of that for logs, adding APM is close to free in every sense and you should probably do it.
If you do not, the honest framing is that you are being asked to adopt and operate a distributed search system in order to find out why checkout is slow. Slowpoke is a 21 MB distroless image running as a non-root user, with SQLite as a supported database, and a 15 MB agent per machine capped at one CPU core and 64 MB. The agent even reports what it costs the machine, measured between one round and the next.
An index waits for you. Slowpoke goes and looks.
Elastic APM starts empty and fills up with whatever you instrument. That is the correct design for a platform, and it assumes you know what your estate contains.
Slowpoke assumes you have just arrived and do not. slowpoke-agent detect reads a machine and reports the nginx server blocks and whether their log format records request duration, the PHP-FPM pools, the local MySQL and PostgreSQL, Redis, and the applications with the framework each one uses. It writes its own configuration from what it found, and then lists what it still cannot read (a database with no user, a pool with its slow log off, a service with no framework package), each with the exact lines that close the gap and the lines that undo them.
The database answer no APM server gives
An APM server receives spans. A span can tell you a statement took 40 ms; it cannot tell you why, because the reason lives in the query planner.
Slowpoke's agent runs EXPLAIN next to the database, in a read-only transaction, only on statements it has already seen on that machine (the server never chooses the SQL), and translates the plan into twelve named diagnoses with the fix each one implies: the composite index to add, the varchar column being compared with an integer so the index is silently unusable, the deep OFFSET that wants a keyset cursor. On PostgreSQL 16 and newer it can plan statements stored without their values.
Can you run both?
Yes, and cleanly. The Slowpoke agent receives OTLP directly, so if your services already emit OpenTelemetry for Elastic they can send to Slowpoke as well without being instrumented twice. Keep Elastic for logs and trace search; let Slowpoke own the prioritisation, the query plans and the debt report.
FAQ
Slowpoke and Elastic APM, asked plainly
Both are free and self-hosted. What actually differs?
Does Slowpoke need Elasticsearch or ClickHouse?
Can Slowpoke read the OpenTelemetry I already send to Elastic?
Does Slowpoke do trace search?
Find out what you inherited
Give it fifteen minutes on one server and the first number is yours. Finding out costs nothing.