{"id":73800,"date":"2025-08-07T12:54:13","date_gmt":"2025-08-07T07:24:13","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=73800"},"modified":"2025-08-29T16:19:09","modified_gmt":"2025-08-29T10:49:09","slug":"paying-to-ping-we-switched-to-uptime-kuma-and-saved-big","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/paying-to-ping-we-switched-to-uptime-kuma-and-saved-big\/","title":{"rendered":"Paying to Ping? We Switched to Uptime Kuma and Saved Big"},"content":{"rendered":"<h2><span style=\"text-decoration: underline;\"><strong>Introduction<\/strong><\/span><\/h2>\n<p>We used to rely on Pingdom for uptime monitoring. It worked well with simple checks, nice UI, and reliable and clean alerts. But one day, someone on our DevOps team casually said:<\/p>\n<blockquote><p><strong>&#8220;Hey, why are we paying for something that only pings URLs?&#8221;<\/strong><\/p><\/blockquote>\n<p>And that kicked off a big conversation.<\/p>\n<h2><span style=\"text-decoration: underline;\"><strong>The Cost Wake-Up<\/strong><\/span><\/h2>\n<p>Pingdom wasn\u2019t expensive, but it wasn\u2019t cheap either \u2014 especially when:<\/p>\n<ul>\n<li>You\u2019re monitoring <strong>20+ services across staging, QA, integration, and prod\u00a0<\/strong><\/li>\n<li>You want multiple checks per minute<\/li>\n<li>You want more than one team member\/channel to get alerts<\/li>\n<li>You want status pages and integrations<\/li>\n<\/ul>\n<p>Our bill kept growing. And worse \u2014 we were hitting limits.<\/p>\n<h2><span style=\"text-decoration: underline;\"><strong>Enter Uptime Kuma<\/strong><\/span><\/h2>\n<p>Someone suggested <a href=\"https:\/\/uptime.kuma.pet\/\"><strong>Uptime Kuma<\/strong><\/a> \u2014 an open-source monitoring tool that looked like a side project at first. But then we tried it. And wow. It was exactly what we needed.<\/p>\n<div id=\"attachment_73817\" style=\"width: 1180px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-73817\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-73817 size-full\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-15.png\" alt=\"Uptime Kuma\" width=\"1170\" height=\"526\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-15.png 1170w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-15-300x135.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-15-1024x460.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-15-768x345.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-15-624x281.png 624w\" sizes=\"(max-width: 1170px) 100vw, 1170px\" \/><p id=\"caption-attachment-73817\" class=\"wp-caption-text\">Uptime Kuma<\/p><\/div>\n<p><strong>What We Did<\/strong><\/p>\n<p>We spun up Kuma on a small EC2 instance (t4g.micro \u2014 super cheap) and started setting up monitors:<\/p>\n<ul>\n<li>HTTP\/HTTPS URLs for APIs, websites, and Jenkins<\/li>\n<li>TCP checks for internal services<\/li>\n<li>Ping checks for critical IPs<\/li>\n<li>Custom alerts to Microsoft Teams &amp; Telegram<\/li>\n<li>MySQL Databases<\/li>\n<li>Kafka Producers\n<p><div id=\"attachment_73818\" style=\"width: 1610px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-73818\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-73818\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-16.png\" alt=\"Monitoring With Uptime Kuma\" width=\"1600\" height=\"856\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-16.png 1600w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-16-300x161.png 300w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-16-1024x548.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-16-768x411.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-16-1536x822.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-16-624x334.png 624w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><p id=\"caption-attachment-73818\" class=\"wp-caption-text\">Monitoring With Uptime Kuma<\/p><\/div><\/li>\n<\/ul>\n<p>Within an hour, we had replaced 100% of our Pingdom setup.<\/p>\n<h2><span style=\"text-decoration: underline;\"><strong>What We Loved Instantly<\/strong><\/span><\/h2>\n<ul>\n<li>Unlimited monitors \u2014 no pricing tiers<\/li>\n<li><strong>1-second i<\/strong>nterval checks (Pingdom doesn\u2019t go that fast unless you pay more)<\/li>\n<li><strong>Beautiful UI<\/strong> \u2014 honestly, better than expected<\/li>\n<li>Built-in public status pages \u2014 no extra tools required<\/li>\n<li>Custom alert integrations \u2014 via <strong>webhooks, email, Slack, Telegram<\/strong>, etc.<\/li>\n<li>Simple &amp; beautiful status pages.<\/li>\n<li>It can monitor everything from simple <strong>HTTP Endpoints to tiny Docker containers<\/strong>.\n<p><div id=\"attachment_73819\" style=\"width: 860px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-73819\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-73819\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-17.png\" alt=\"Monitor Types\" width=\"850\" height=\"1122\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-17.png 850w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-17-227x300.png 227w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-17-776x1024.png 776w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-17-768x1014.png 768w, \/blog\/wp-ttn-blog\/uploads\/2025\/08\/unnamed-17-624x824.png 624w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><p id=\"caption-attachment-73819\" class=\"wp-caption-text\">Monitor Types<\/p><\/div><\/li>\n<\/ul>\n<h2><span style=\"text-decoration: underline;\"><strong>Real-World Benefits<\/strong><\/span><\/h2>\n<p>1. <strong>More Control:<\/strong> We control how often things are checked, where they run, and who gets notified \u2014 no vendor lock-in.<\/p>\n<p>2. <strong>Cost Savings<\/strong>: We went from paying monthly to spending almost nothing (just the cost of one EC2 or internal VM).<\/p>\n<p>3. <strong>Monitoring Internal Services<\/strong>: Pingdom couldn\u2019t monitor private\/internal URLs \u2014 Uptime Kuma can (because we self-host it inside the network).<\/p>\n<h2><span style=\"text-decoration: underline;\"><strong>Before vs After<\/strong><\/span><\/h2>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 33.3333%;\"><span style=\"text-decoration: underline;\"><strong>Feature<\/strong><\/span><\/td>\n<td style=\"width: 33.3333%;\"><span style=\"text-decoration: underline;\"><strong>Pingdom (Paid)<\/strong><\/span><\/td>\n<td style=\"width: 33.3333%;\"><span style=\"text-decoration: underline;\"><strong>Uptime Kuma (Self-Hosted)<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">Monitor Limit<\/td>\n<td style=\"width: 33.3333%;\">Tiered pricing<\/td>\n<td style=\"width: 33.3333%;\">Free, Open Source, and Unlimited<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">Check Interval<\/td>\n<td style=\"width: 33.3333%;\">1 min (lower = $$$)<\/td>\n<td style=\"width: 33.3333%;\">Up to every 1 sec<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">Internal URL Monitoring<\/td>\n<td style=\"width: 33.3333%;\">No<\/td>\n<td style=\"width: 33.3333%;\">Yes<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">Alert Channels<\/td>\n<td style=\"width: 33.3333%;\">Limited<\/td>\n<td style=\"width: 33.3333%;\">Microsoft Teams, Slack, Telegram, WhatsApp, etc<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">Public Status Page<\/td>\n<td style=\"width: 33.3333%;\">Add-On<\/td>\n<td style=\"width: 33.3333%;\">Built-in<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\">Cost<\/td>\n<td style=\"width: 33.3333%;\">Recurring\/Subscription Required<\/td>\n<td style=\"width: 33.3333%;\">Free (just VM cost)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span style=\"text-decoration: underline;\"><strong>Security Notes<\/strong><\/span><\/h2>\n<ul>\n<li>Access is behind a VPN<\/li>\n<li>Config and data are stored on an attached volume<\/li>\n<li>We use security groups to limit access<\/li>\n<li>Slack and Teams alerts are webhook-based with proper tokens and webhooks<\/li>\n<\/ul>\n<h2><span style=\"text-decoration: underline;\"><strong>What the Team Said<\/strong><\/span><\/h2>\n<pre><strong>\u201cHonestly, I thought it would be buggy. But it\u2019s fast, clean, and we control everything.\u201d<\/strong><\/pre>\n<p>\u2014 One of our DevOps Engineers<\/p>\n<h2><span style=\"text-decoration: underline;\"><strong>What\u2019s Not Perfect?<\/strong><\/span><\/h2>\n<p>Let\u2019s be real \u2014 Uptime Kuma isn\u2019t flawless.<\/p>\n<ul>\n<li>No mobile app (yet)<\/li>\n<li>Some alert configs need trial and error<\/li>\n<li>Not as polished in analytics\/reporting as paid tools<\/li>\n<li>But we didn\u2019t mind. For most use cases, it just worked.<\/li>\n<\/ul>\n<h2><span style=\"text-decoration: underline;\"><strong>Our Final Setup<\/strong><\/span><\/h2>\n<p>We now monitor:<\/p>\n<ul>\n<li>All environments: dev, qa, integration, prod<\/li>\n<li>Private Tools and Applications like Jenkins, Nexus, ECS endpoints, APIs<\/li>\n<li>Public-facing applications<\/li>\n<li>We even have a shared status page for our internal teams so they can check if something\u2019s down before raising a ticket.<\/li>\n<\/ul>\n<h2><span style=\"text-decoration: underline;\"><strong>Final Thoughts<\/strong><\/span><\/h2>\n<p>Pingdom is great \u2014 no hate there. But for our use case, Uptime Kuma gave us 100% of the value at 0% of the cost. At <a href=\"https:\/\/www.tothenew.com\/\"><strong>To The New<\/strong> <\/a>(TTN), we manage infrastructure for multiple environments across various clients. Cost optimization is a continuous effort, and monitoring was one of those areas we knew could be improved. Reach out to us for your monitoring workload. We can build as well as monitor your infrastructure.<\/p>\n<p>If you\u2019re part of a DevOps or SRE team looking to:<\/p>\n<ul>\n<li>Cut monitoring costs<\/li>\n<li>Gain flexibility<\/li>\n<li>Monitor internal and external services from one centralized place<\/li>\n<li>Give Uptime Kuma a try.<\/li>\n<\/ul>\n<p>It might surprise you \u2014 just like it surprised us.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction We used to rely on Pingdom for uptime monitoring. It worked well with simple checks, nice UI, and reliable and clean alerts. But one day, someone on our DevOps team casually said: &#8220;Hey, why are we paying for something that only pings URLs?&#8221; And that kicked off a big conversation. The Cost Wake-Up Pingdom [&hellip;]<\/p>\n","protected":false},"author":1601,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":63},"categories":[2348],"tags":[6342,7451,5210,1892,7725,7724,7726,7721,7720,7718,7719,7722,7723,2987,5239,7717,7716],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/73800"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1601"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=73800"}],"version-history":[{"count":3,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/73800\/revisions"}],"predecessor-version":[{"id":74318,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/73800\/revisions\/74318"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=73800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=73800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=73800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}