Self-hosted vs SaaS APM: the trade-offs nobody talks about
Every comparison article ends with an affiliate link. This one tries to be honest about when self-hosting is the wrong choice, and when it's the right one.
If you’re running a Rails app and thinking about performance monitoring, every comparison article you’ll find lands in roughly the same place: “SaaS APMs are easier, here’s our affiliate link.”
This isn’t that article.
I’m building Rails Pulse (a self-hosted performance monitoring engine for Rails), so I have an obvious bias. I’m also going to tell you when self-hosting is the wrong choice, because I think the honest version of this comparison is more useful than the one that ends with a conversion.
SaaS APMs are genuinely easier to start with
Let’s get this out of the way. Datadog, New Relic, Skylight: they’re easier to set up than anything you self-host. Add a gem, set an API key, and you have dashboards in ten minutes. No database migrations, no hosted infrastructure to maintain, no upgrades to manage.
If you have a small team, limited ops experience, and just want to know when things are slow, a SaaS APM is probably the right call. The operational overhead of self-hosting is real, and I’d rather you picked the right tool than the one I’m building.
That said, there are things the “just use Datadog” crowd don’t talk about much. Let’s look at both sides.
What you give up with a SaaS APM
Your data leaves your servers. All of it.
This sounds abstract until you think about what APM data actually contains.
Every slow query your APM captures includes the SQL, the parameters, and often the call stack that produced it. Every traced request includes the endpoint, the payload shape, and timing for each operation inside it. Over time, your APM vendor accumulates a detailed picture of how your application works, what your users do, and where your business logic lives.
For most teams, this doesn’t matter. Their data isn’t sensitive enough for it to be a concern, and the operational simplicity of a SaaS APM is worth it.
For some teams, it matters a lot. Healthcare products handling patient data. Fintech apps moving money. Legal SaaS platforms storing client communications. Any company operating under GDPR where data residency requirements are explicit. For these teams, the question isn’t “is self-hosting more work?” It’s “is there a version of this where our monitoring data never leaves our infrastructure?”
Consumption-based pricing is unpredictable
Datadog starts at around $15 per host per month, which sounds manageable. What’s less obvious upfront is that the real cost comes from data ingestion (traces, logs, metrics) which is billed separately and scales with your traffic. A modest Rails app with decent traffic can run $200–500/month before you’ve added any premium features.
New Relic has a generous free tier (100GB/month of data), but once you cross it the pricing becomes consumption-based and harder to forecast. Skylight and Scout are more predictable, but they’re scoped to request performance and don’t cover background jobs or memory.
The pattern is: SaaS APM pricing is often cheap when you don’t need it much, and expensive when you do.
You’re renting access to your own performance data
This is the trade-off that doesn’t get enough attention. With a SaaS APM, you have access to your data through their UI and API, but only while you’re paying, and only through the surfaces they provide. If you cancel, that history is gone. If their API doesn’t expose what you need, you can’t get to it.
For most operational uses (debugging a slow endpoint, reviewing request trends) this is fine. For teams who want to build custom reporting, run their own analysis, or retain performance history indefinitely, it’s a meaningful constraint.
What self-hosting actually costs you
I want to be honest about this, because the self-hosting pitch often understates the real burden.
Setup time. A self-hosted tool requires an initial setup that a SaaS APM doesn’t. In Rails Pulse’s case, that’s adding the gem, running a database migration, and mounting the engine in your routes. It’s not heavy, but it’s not zero.
Maintenance. You’re responsible for gem updates, any schema changes, and making sure the data doesn’t grow unbounded in your database. A SaaS APM handles all of this for you.
No managed infrastructure. Your APM data lives in your database, which means you need to think about retention policies and query performance as it grows. There’s no ops team on the other end managing that for you.
No third-party integrations out of the box. SaaS APMs often come with PagerDuty integrations, Slack alerts, and dashboards that connect to your whole observability stack. Self-hosted tools typically have less of this, at least early on.
If your team doesn’t have capacity to own this, that cost is real and shouldn’t be dismissed.
Who should take self-hosting seriously
Teams in regulated industries. Healthcare, fintech, legal, government: if your application operates under data residency requirements or you’re working toward SOC2, having your monitoring data in your own infrastructure simplifies your compliance posture. It removes a vendor from your audit scope and removes the question of what that vendor does with your data.
Teams already paying $300+/month for APM. At this spend level, the TCO comparison starts to look different. The setup overhead of a self-hosted tool is a one-time cost; the SaaS bill is ongoing. Worth running the numbers.
Teams who’ve had a vendor security incident. Once you’ve been through a supplier data breach (even tangentially), you think differently about what third parties have access to. APM data is a particularly rich target: it describes your infrastructure, your query patterns, and your application logic in detail.
Privacy-conscious founders. Some people just don’t want their operational data in someone else’s hands. That’s a valid position, not a paranoid one.
Who probably shouldn’t bother
Small teams with no ops experience. The maintenance overhead is real and the cost of a SaaS APM at this scale is low. Start simple.
Teams already deeply invested in a SaaS APM. If you have years of historical data, established alerting rules, and integrations your team relies on, the switching cost is high. Self-hosting makes more sense at a natural inflection point, not as a mid-stream migration.
Teams that need enterprise support SLAs. Self-hosted tools don’t come with a support contract. If your business depends on a guaranteed response time from your monitoring vendor, that changes the equation.
Where Rails Pulse fits
Rails Pulse is a Rails engine. It installs as a gem, runs inside your existing Rails app, and writes all performance data to tables in your own database using ActiveSupport::Notifications, the same instrumentation system Rails itself uses.
There’s no external service to sign up for. No data egress. No API key to rotate. Your monitoring data is in the same place as the rest of your data, under your control, accessible via your existing database tools.
That’s the trade-off I made: more setup responsibility for you, complete data ownership in return.
Whether that’s the right trade-off depends on your team, your data sensitivity, and your tolerance for operational overhead. For some Rails teams, it’s the right answer. For others, a SaaS APM is a better fit and I’d rather you knew that upfront.
Rails Pulse is a Rails engine that monitors your app from the inside: no data leaving your servers, no SaaS subscription. It’s what I built because I couldn’t find a tool that did this.
Open source and free to try: github.com/railspulse/rails_pulse. If you want to see what setup actually looks like, the installation docs walk through it end to end.
Stay up to date
Get updates on new releases and what I'm building.