Last updated: September 1, 2026
Author: WhatPing Engineering Team
Executive Summary
Every team that outgrows a single manually-checked dashboard eventually asks the same question: should we pay someone else to watch our infrastructure, or should we run the watching ourselves? The question sounds like a budgeting exercise, and teams often treat it as one — compare a monthly SaaS invoice against a free open-source download and pick whichever number is smaller. That comparison is almost always wrong, because it prices the software and ignores the system around it.
A self-hosted monitor is not free. It is a small production service that you now own: it needs a host, patching, backups, an update cadence, an on-call owner, and — critically — a location that is not the same infrastructure it is meant to be watching. A hosted monitor is not turnkey either. It means handing an outside party your endpoints, your alert destinations, and in some configurations your customers’ first indication that something is broken. Both models solve the same problem — knowing before your users do — and both introduce a new failure surface while doing it.
This guide lays out a decision framework built around five questions that actually predict which model will serve a given team well: how much engineering time you can spend on the monitor itself, what your compliance or data-residency posture requires, how many separate networks you’re already watching, what your alerting failure mode needs to look like, and how much you value being able to read the code that decides whether you’re down. We’ll walk through the architecture of both models, the failure patterns each one is prone to, real configuration you can run today, and the specific mistakes that show up repeatedly in postmortems — on both sides of this decision.
Key Takeaways
- The real cost of self-hosting is the second system, not the first. A monitoring stack that lives in the same account, region, or physical network as the thing it watches goes dark exactly when you need it — the cost isn’t the software, it’s the redundant infrastructure required to make self-hosting actually work.
- Hosted monitoring outsources probing location, not judgment. A vendor’s probe network solves the “is it just us” problem cheaply, but the alerting logic, thresholds, and channel configuration are still yours to get right regardless of who owns the servers.
- Compliance requirements decide this faster than preference does. If your data-residency, audit, or SOC 2/ISO scope explicitly names monitoring telemetry, that constraint usually settles the question before cost or convenience gets a vote.
- Self-hosted tools trade setup time for operational time. You pay once, up front, in configuration — then repeatedly, forever, in patching, upgrades, and the day a Docker base image gets deprecated.
- A credible hosted vendor tells you what it cannot do. The honesty of a status page, pricing page, and security page — stated limitations included — is a better signal of vendor reliability than any uptime percentage in the hero section.
1. Problem Statement
The decision gets framed as a binary — hosted or self-hosted — but the actual failures teams hit come from four distinct, more specific problems underneath that framing.
First, the “who watches the watcher” problem. A self-hosted monitoring stack deployed in the same cloud account or VPC as the production systems it tracks shares a fate with them. When that region has a network partition, the monitoring stack goes dark at the exact moment it needs to be loudest — an outage report from a customer arrives before the internal dashboard shows red, because both live behind the same router.
Second, the vendor trust and data-exposure problem. Hosted monitoring requires handing a third party your endpoint URLs, often internal hostnames, and your alert destinations — Slack webhooks, PagerDuty keys, Telegram tokens. A vendor breach or a policy change becomes your incident, not theirs, and you have limited ability to audit what happens to that data beyond what’s disclosed.
Third, the maintenance-debt problem of self-hosting. Open-source monitoring tools are genuinely capable, but they are software, and software needs an owner. A self-hosted instance patched fourteen months ago, running on an EOL runtime, on a VM nobody remembers provisioning, is a common infrastructure-audit finding — usually discovered only after it silently stopped alerting because a dependency update broke its notification integration.
Fourth, the single-vantage-point problem, which affects both models differently. A monitor that checks from one network location cannot distinguish “the target is actually down” from “our path to the target is broken” — the same distinction WhatPing’s own second-opinion mechanism is built to resolve. Self-hosted setups usually have exactly one vantage point by default, since a second location doubles the operational burden. Hosted setups solve this more cheaply because the vendor already runs infrastructure in multiple places — but the feature still has to exist in what you’re paying for; plenty of hosted tools also check from a single region.
2. History
Uptime monitoring’s hosted-versus-self-hosted split is older than most people assume, and tracing it clarifies why today’s landscape looks the way it does.
The practice starts with ping itself. Mike Muuss wrote the utility in December 1983 at the U.S. Army Ballistic Research Laboratory, built around the ICMP Echo Request and Echo Reply messages defined a year earlier in RFC 792. Through the 1980s, “monitoring” meant a cron job running ping in a loop on the same machine or LAN as the thing being watched — self-hosted by necessity, since no other model existed.
The 1990s brought the first purpose-built self-hosted monitoring software. SNMP, standardized in RFC 1157 in 1990, gave administrators a structured way to poll device counters and status. In 1999, Ethan Galstad released NetSaint, a plugin-based active-polling daemon renamed Nagios in 2002 after a trademark dispute — it became the reference architecture for a generation of infrastructure teams: install it on a box you control, write plugins for whatever you want to check, own the entire stack. Zabbix followed a similar path, with development starting in 1998 and public release in 2001. Icinga forked from Nagios in 2009 when part of its community wanted a faster release cadence — itself a useful data point about self-hosted maintenance burden: even a tool’s own maintainers can disagree badly enough about upkeep to fork the project.
Hosted, SaaS-delivered monitoring emerged as broadband and cloud hosting matured in the mid-to-late 2000s. Pingdom, founded in Sweden in 2007, was among the first to package external synthetic checks as a subscription rather than installed software — the pitch was simple: stop running your own probe, let ours run from locations you don’t have to provision. UptimeRobot followed with a free tier that made external monitoring accessible to individual developers. Through the 2010s the category expanded with StatusCake, Site24x7, and eventually Better Uptime (later Better Stack), competing mainly on probe network size and status-page polish.
The self-hosted side didn’t stand still either. Uptime Kuma, released by Louis Lam in 2021, became the default self-hosted answer for teams wanting a modern web UI and Docker-based deployment without Nagios’s configuration-file learning curve — bringing the SaaS-era experience back into a self-hosted package.
The most recent shift, through 2025 and into 2026, is less about new architecture and more about what hosted vendors are willing to say about themselves. A newer cohort has started publishing actual limitations — single probe location, no SLA, solo-developer operation, retention windows — directly on marketing pages rather than only in a support ticket after a customer asks. This closes part of the trust gap that used to be self-hosting’s main advantage: you no longer have to run the code yourself to know precisely what it does and doesn’t do, provided the vendor says so in writing.
3. Definition
Hosted uptime monitoring is a subscription or usage-based service where a third-party vendor operates the probing infrastructure, state and alerting logic, and dashboard, and you provide only the targets to check and destinations to notify. You never provision a server for the monitor itself.
Self-hosted uptime monitoring is a monitoring stack — open-source or commercial — that you deploy, patch, and operate on infrastructure you control: a VPS, an on-prem server, or a container in your own cloud account. You own every layer: probing process, check-history database, web interface, and notification dispatch.
The distinction that matters more than “who runs the software” is where the probing vantage point lives relative to what’s being watched, which produces four practical configurations, not two:
- Fully hosted, external vantage point. A vendor’s infrastructure, entirely outside your network, checks your public endpoints — the classic SaaS model (Pingdom, UptimeRobot, Better Stack, WhatPing).
- Fully self-hosted, external vantage point. You run your own stack, but deliberately place it outside the network it watches — a small VPS on a different provider or region, checking production from the outside. This captures hosted monitoring’s “who watches the watcher” benefit without handing data to a vendor.
- Fully self-hosted, internal vantage point. A daemon running inside the same network or host it checks — a systemd timer hitting a local /healthz endpoint. Cheapest and most common, and also most exposed to the “who watches the watcher” failure.
- Hybrid. Internal agent-based monitoring for resource-level visibility, paired with one hosted or externally-placed layer for public reachability and SLA verification — the configuration most mature organizations converge on after being burned by a single vantage point.
4. Architecture
The architectural difference between hosted and self-hosted monitoring isn’t really about what components exist — both models need a prober, a state engine, and a notification path — it’s about who owns the boundary between those components and where the failure domains sit.
Hosted architecture. The vendor operates a multi-tenant probing layer, typically distributed across multiple networks or regions, so no single infrastructure failure on their side takes out the whole probe fleet. Configuration and check results live in the vendor’s backend, which owns every state decision: whether a failure counts as a real outage, whether an incident opens, which alert fires. You interact through a dashboard and, for automation, a REST API. Your only infrastructure footprint is whatever you already run — the vendor’s system is entirely outside your operational boundary. The trade-off: you can’t inspect the decision logic beyond what’s documented, and a vendor-side outage is a monitoring outage you didn’t cause and can’t directly fix.
Self-hosted architecture. You provision the prober, the state engine, and usually the database yourself. This gives full visibility into every decision — you can read the source and inspect exactly what triggered an alert down to the line of code. But it means owning a production dependency with its own uptime requirement: the monitoring stack itself needs monitoring, patching, and availability, and if placed on the same infrastructure it watches, its failure domain overlaps with the thing it’s supposed to catch failing.
The practical question separating good self-hosted deployments from bad ones is simple: where does the stack live relative to what it watches? One placed in a separate cloud account or a cheap VPS from a different provider behaves, from a failure-domain perspective, almost identically to a hosted vendor’s probe network, minus the multi-region redundancy a larger vendor offers. One placed in the same VPC as production behaves like a smoke detector wired to the same circuit as the fire it’s meant to detect.
5. Internal Working
Understanding what actually happens during a check — and where each model’s logic executes — explains why certain failure classes are invisible to one architecture and not the other.
How a hosted HTTP check executes. The vendor’s probe node, outside your network, opens a TCP connection to your target, completes a TLS handshake for HTTPS, and sends a request carrying a distinguishing User-Agent. It measures response time, checks the returned status code against your configured range, and optionally matches the body against a keyword rule. The result is transmitted back to the vendor’s backend, where it’s evaluated against your failure threshold before any alert fires. Every step from “the check happened” to “an incident opened” occurs on infrastructure you don’t operate — your visibility into intermediate states is limited to whatever the vendor’s dashboard or API surfaces.
How a self-hosted check executes from an internal vantage point. A local daemon — a cron job, a systemd timer, a background thread in Uptime Kuma or Zabbix — opens a socket from the same host or network as the target. Because the checking process and target frequently share the same network path or hypervisor, an internal check can be fooled by local-network health that has nothing to do with what an external user experiences. A loopback health check succeeding while the public-facing load balancer in front of it has silently dropped out of rotation is the textbook case: internally everything reports green, because the check never traverses the actual path a real request takes.
How a self-hosted check executes from an external vantage point. The mechanics are identical to a hosted check — a probe outside the target’s network completes the same TCP/TLS/HTTP sequence — the only difference is that you, not a vendor, operate the box running the probe. This is why an externally-placed self-hosted monitor and a hosted monitor produce structurally similar reliability guarantees: what matters is network separation from the target, not who owns the hardware doing the separating.
6. Components
Both models assemble from a similar set of logical components — what differs is who owns and operates each one.
- Probe or checking process. Sends the ICMP echo, TCP SYN, or HTTP request. Vendor-operated in hosted models; self-provisioned in self-hosted models.
- State and threshold engine. Decides how many consecutive failures constitute “down” and when an incident opens or resolves. Exists in both models but is inspectable only in self-hosted deployments.
- Check-result store. A database — a lightweight SQL store for tools like Uptime Kuma, or a time-series store for larger deployments like Zabbix — holding latency, status codes, and outcomes.
- Notification dispatcher. Sends alerts to email, webhook, Telegram, SMS, or a paging service, and in well-built implementations, records whether delivery succeeded independently of the target’s actual state.
- Dashboard or interface. The web UI showing current status, historical uptime, and open incidents.
- Secrets store. Where webhook URLs, bot tokens, and API keys are held — entirely on vendor infrastructure in hosted models; in a config file or secrets manager you configured yourself in self-hosted ones.
- Public or internal status page. A customer- or team-facing availability summary generated from the same check data.
- The monitoring host itself, self-hosted only. The VM or container running the entire stack — an extra piece of infrastructure with its own patching and uptime requirement that simply doesn’t exist as a concern in the hosted model.
That last component is the one most cost comparisons leave out, and it’s usually the deciding factor in whether self-hosting saves money once you count engineer-hours rather than just server-hours.
7. Workflow
Regardless of model, an uptime check moves through the same five-stage lifecycle. What changes is which stages happen on infrastructure you can inspect.
Step 1: Scheduling. A control plane — the vendor’s scheduler, or a cron daemon in self-hosted models — determines a check is due and assigns it to a probing process.
Step 2: Execution. The probe sends the network request — ICMP, TCP SYN, or HTTP — toward the target and starts a timer.
Step 3: Result capture. The probe records the latency and outcome, or times out and records a specific error (connection refused, timeout, TLS failure, unexpected status).
Step 4: State evaluation. The result is compared against the monitor’s current state and threshold. A single failure typically moves a monitor to pending rather than immediately declaring an outage — WhatPing’s own state and threshold documentation walks through this exact mechanic — only a run of consecutive failures — commonly two or three — transitions it to confirmed down and opens an incident.
Step 5: Notification. Once an incident opens or resolves, the dispatcher sends alerts to configured channels and, in well-built systems, records delivery outcome separately per channel, so a failed webhook never gets confused with the target being healthy.
The practical difference shows up in steps 4 and 5: in a hosted system you configure the threshold and channel but can’t alter the evaluation code; in a self-hosted one you can — valuable if your failure-classification needs are unusual, irrelevant if they aren’t.
8. Configuration
Below is real, runnable configuration for both sides of this decision, so the comparison isn’t abstract.
Self-hosted: Uptime Kuma via Docker Compose. This is the most common self-hosted starting point for small teams. Create a docker-compose.yml:
version: "3.8"
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- ./uptime-kuma-data:/app/data
ports:
- "3001:3001"
restart: always
Bring it up:
docker compose up -d
This gets you a dashboard on port 3001. Critically, this container should not run on the same host as the services it’s meant to watch — deploy it on a separate small VPS from a different provider, or at minimum a different availability zone, to avoid recreating the internal-vantage-point problem described in Section 4.
Self-hosted: a minimal external health check via systemd, run from a separate monitoring VPS. For teams who want something even lighter than Uptime Kuma for a handful of targets:
#!/usr/bin/env bash
set -euo pipefail
TARGET_URL="https://app.example.com/healthz"
WEBHOOK_URL="https://hooks.slack.com/services/T000/B000/XXXX"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 "$TARGET_URL" || echo "000")
if [ "$HTTP_CODE" != "200" ]; then
curl -s -X POST -H "Content-Type: application/json" \
-d "{\"text\":\"ALERT: $TARGET_URL returned $HTTP_CODE\"}" \
"$WEBHOOK_URL"
fi
Paired with a systemd timer running this every 60 seconds from the separate VPS, this is a legitimate, low-cost self-hosted external monitor — the trade-off is that it has no built-in threshold logic, so a single transient blip fires a Slack message; you’d need to add a failure counter written to a local state file to replicate the consecutive-failure suppression a purpose-built tool gives you by default.
Hosted: provisioning a monitor via API. Most hosted vendors, including WhatPing, expose monitor creation as a REST call — see WhatPing’s API reference for the full endpoint list — so it can live in your infrastructure-as-code pipeline rather than being clicked into existence by hand:
curl -X POST https://api.whatping.com/v1/monitors \
-H "Authorization: Bearer $WHATPING_API_KEY" \
-H "Idempotency-Key: deploy-$(git rev-parse --short HEAD)" \
-H "content-type: application/json" \
-d '{
"name": "checkout-service",
"type": "http",
"url": "https://app.example.com/healthz",
"interval_seconds": 60
}'
9. Examples
Scenario: a five-person startup discovers their self-hosted monitor died with their production region. A small team had deployed Uptime Kuma on an EC2 instance in the same VPC as their production application, reasoning it kept everything simple. Six months in, an availability-zone network partition took down both the application and the Uptime Kuma instance simultaneously. Customers reported the outage on social media roughly eleven minutes before anyone internally noticed, because the dashboard sharing the same failure domain had also gone dark, and a dark dashboard looks identical to a quiet one at 2 a.m. The fix wasn’t abandoning self-hosting — it was moving the same instance to a $6/month VPS from a different provider in a different region. The software didn’t change; its address relative to what it watched did.
Scenario: an agency evaluating whether to move forty client sites off a self-hosted Nagios install. A small agency had run Nagios across roughly forty client sites, configured by a developer who left eighteen months earlier. Nobody remaining understood the plugin configuration well enough to add a forty-first site without risking the other forty, and the OS had fallen two major versions behind, blocking a needed patch. The real decision wasn’t “hosted versus self-hosted” in the abstract — it was “an unmaintained system with no institutional knowledge versus a fresh start.” Migrating to a hosted vendor with a straightforward bulk-provisioning API was clearly less risky than modernizing a configuration nobody could safely touch. The lesson generalizes: self-hosting’s real cost is paid when the original owner leaves, not when the system is built.
10. Performance
The resource cost of monitoring itself is asymmetric between the two models in a way that’s easy to underestimate.
Hosted monitoring’s resource cost to you is effectively zero. You provision nothing; the vendor absorbs probe compute, storage, and dispatch infrastructure entirely on their side. Your only overhead is outbound traffic the probe generates against your own servers — negligible at normal intervals.
Self-hosted monitoring’s resource cost scales with what you’re watching and how often. A single Uptime Kuma instance checking fifty targets at 60-second intervals is genuinely light — well under 5% of a CPU core on a $6/month VPS. The cost that actually matters isn’t CPU or RAM; it’s the compounding cost of every check writing an access-log line to whatever web server sits in front of the endpoint. At a 30-second interval, one monitor produces roughly 2,880 log entries per day against a single target — multiply across dozens of endpoints and you have a log-rotation problem that has nothing to do with the tool’s own footprint.
TLS handshake cost is the other line item people miss. Every HTTPS check performs a fresh key exchange unless the tool reuses connections, which most simple scripts don’t. On modest self-hosted hardware checking many HTTPS endpoints at short intervals, this overhead is measurable, though rarely severe below a few hundred monitors. On the hosted side, the vendor has typically already tuned their fleet for this at far higher scale.
The practical takeaway: self-hosted monitoring is cheap in compute and expensive in operational attention — patch cycles, log rotation, and the day the base image gets an EOL notice. Hosted monitoring is the reverse: zero infrastructure attention required, at the cost of zero visibility into how the vendor manages its own resource constraints.
11. Security
The security calculus differs sharply between the two models, and it’s worth separating “who can see my data” from “who is responsible for patching.” (WhatPing’s own security model documentation is a useful reference for what a hosted vendor should be disclosing.)
Self-hosted security responsibilities, entirely yours:
- Patch the underlying OS and the monitoring software itself. A self-hosted tool with a known CVE left unpatched is now a foothold on your network, not a vendor’s.
- Secure the secrets store. Webhook URLs and bot tokens typically live in a local database or config file; if that host is compromised, every alert-channel credential is exposed at once.
- Restrict inbound access to the dashboard. A self-hosted instance exposed to the public internet without authentication hardening is a recurring security-scan finding — the dashboard can leak which internal services exist and their current health.
- Isolate the monitoring host’s network position, per the architecture discussion above, so it doesn’t become both a single point of failure and a single point of compromise.
Hosted security responsibilities, entirely the vendor’s — and opaque beyond what they publish:
- Target validation against server-side request forgery. A hosted monitor fetches URLs from inside the vendor’s own network; a well-built vendor blocks targeting internal or private addresses to prevent their infrastructure being used as a scanning proxy. You can only verify this by testing it yourself or reading published security documentation.
- Credential redaction. Secrets you hand a vendor — a webhook URL, a bot token — should never be displayed back in full. Whether a vendor actually does this is confirmable only through their documented security model, not by inspecting code you don’t have.
- Vendor breach exposure. If a hosted vendor is compromised, every customer’s endpoint list and alert-channel credentials are potentially exposed in one event — a blast radius that doesn’t exist for self-hosted deployments, where a compromise affects only your own instance.
12. Troubleshooting
When a monitoring setup itself misbehaves — false alerts, missed alerts, or the monitor going quiet — the diagnostic path differs by model.
Self-hosted, Step 1: Confirm the monitoring host itself is healthy. Before assuming a target is actually down, check whether the monitoring instance has resource pressure of its own:
docker stats uptime-kuma
df -h
A monitoring container starved of memory or disk can produce false-down alerts that have nothing to do with the target’s actual state.
Self-hosted, Step 2: Check the monitoring tool’s own logs for silent failures.
docker logs uptime-kuma --tail 200
Notification delivery failures — an expired webhook, a revoked bot token — often surface here well before anyone notices alerts have stopped arriving.
Self-hosted, Step 3: Verify network path from the monitoring host to the target, especially if the monitor and target sit in different networks:
curl -ivs https://target.example.com/healthz
mtr --report --report-cycles 30 --no-dns target.example.com
Hosted, Step 1: Check the vendor’s own status page or incident history before assuming your target is the problem — a vendor-side outage produces symptoms (missed checks, delayed alerts, gaps in history) that look identical to a misconfigured monitor from your side.
Hosted, Step 2: Confirm the alert channel credential is still valid, since this is the most common cause of “the monitor said down but I never got paged” in hosted setups — a rotated webhook URL or revoked bot token that was never updated in the vendor’s dashboard. Most hosted vendors provide a delivery ledger or send-history log specifically for this; check it before assuming the monitor’s core logic failed.
Hosted, Step 3: Verify the target itself is reachable from a location other than the vendor’s probe network, to rule out the single-vantage-point problem — a quick manual curl from your own laptop or a different cloud region tells you whether the vendor’s probe path specifically has an issue, versus the target being genuinely down.
13. Best Practices
- Never co-locate a self-hosted monitor with what it watches. Deploy it on a different provider, region, or at minimum availability zone from your production infrastructure, even if that means paying for a second small VPS specifically for this purpose.
- Treat alert channel credentials as production secrets in both models. Rotate webhook URLs and bot tokens on the same cadence you rotate other application secrets, and verify the new credential is live in your monitoring configuration before revoking the old one.
- Test your notification pipeline on a schedule, not just at setup. PagerDuty integration keys expire, Slack webhooks get regenerated when a workspace admin changes settings, and email alerts silently land in spam after enough time passes without a delivered message being opened.
- Require multi-check or multi-region confirmation before declaring a hard outage, whichever model you’re on — a single failed check from a single vantage point is evidence, not proof, and treating it as proof is how flaky networks turn into 3 a.m. pages that didn’t need to happen.
- Reassess this decision when your team size or compliance scope changes materially, not just once at initial setup — a five-person startup’s self-hosted Uptime Kuma instance and a fifty-person compliance-scoped enterprise’s monitoring needs are different problems even if they started from the same tool.
- Read the vendor’s security and limitations pages before signing up for hosted monitoring, and read them again before renewing — a vendor’s stated limitations (single probe region, no SLA, data retention window) are the actual product specification, not marketing boilerplate to skim past.
14. Common Mistakes
- Choosing based on the monthly invoice alone. Comparing a $0 open-source download to a $15/month hosted plan without pricing in the engineer-hours required to patch, back up, and eventually migrate off an aging self-hosted instance produces a comparison that’s technically accurate and practically useless.
- Running the monitoring stack in the same failure domain as production, described at length above, remains the single most common architectural mistake in self-hosted deployments — and it’s invisible until the exact day it matters.
- Assuming “hosted” automatically means multi-region. Some hosted vendors, particularly smaller or newer ones, check from a single network location just like a naive self-hosted setup would. The label doesn’t guarantee the property; the vendor’s own documentation does.
- Never testing the failover path for the monitoring system itself. Teams test their application’s disaster recovery regularly and never once ask “what happens if our monitoring tool goes down” — a question worth answering deliberately rather than discovering during an actual incident.
- Ignoring who owns institutional knowledge of a self-hosted configuration. A self-hosted monitoring setup configured by one engineer who later leaves the company is a liability the moment nobody else can safely modify it — documentation and shared ownership matter here as much as the technology choice.
- Treating a vendor’s uptime percentage as the only thing worth checking before signing up. A vendor’s stated limitations, security disclosures, and data retention policy tell you more about whether the product will still serve you in a year than a 99.9% headline figure does.
15. Alternatives
Beyond the binary framing, four broad approaches are actually available, and most mature setups combine more than one:
- Fully hosted SaaS monitoring — Pingdom, UptimeRobot, Better Stack, Site24x7, StatusCake, WhatPing. Best for teams that want zero infrastructure overhead and are comfortable with a vendor holding endpoint and alert-channel data.
- Fully self-hosted, open-source — Uptime Kuma, Zabbix, Nagios, Icinga2, Checkmk. Best for teams with the engineering capacity to own patching and hosting, or with compliance requirements that make third-party data-sharing impractical.
- Externally-placed self-hosted — the same open-source tools above, deliberately deployed on infrastructure separate from production, often on a different provider entirely. Best for teams that want the failure-domain separation of hosted monitoring without sharing data with a vendor, and are willing to accept a smaller, single-provider probe footprint compared to a larger vendor’s multi-region network.
- Hybrid internal-plus-external. Internal agent-based monitoring — Prometheus node exporters, Zabbix agents, custom systemd health checks — for resource-level visibility, paired with one hosted or externally-placed layer purely for public reachability and SLA verification. This is the configuration most engineering organizations converge on once they’ve operated long enough to be burned by relying on a single vantage point, and it’s worth treating as the default recommendation for any team past roughly ten engineers rather than as an advanced or optional step.
16. Comparison Text Analysis
Model A: Fully Hosted.
- Setup time: minutes — create an account, add a monitor, configure a channel.
- Ongoing burden: effectively none on your side; the vendor absorbs patching, scaling, and probe-fleet maintenance.
- Data exposure: endpoint URLs and alert-channel credentials live on vendor infrastructure, governed by their retention policy, not yours.
- Auditability: limited to what the vendor documents publicly; you cannot inspect the decision logic.
- Multi-region coverage: often available and a key differentiator, but not universal — verify per vendor.
- Cost shape: predictable recurring fee, scaling with monitor count or check frequency.
- Best fit: small teams without spare engineering capacity, teams wanting reachability confirmed without provisioning anything, and any team whose compliance posture doesn’t restrict third-party telemetry sharing.
Model B: Fully Self-Hosted.
- Setup time: fifteen minutes to a few hours depending on tool, plus ongoing configuration as targets grow.
- Ongoing burden: real and recurring — OS patching, image updates, backups, and eventually a migration at end of life.
- Data exposure: nothing leaves your infrastructure; the only third party involved is whichever notification channel you configure, and even that exposure is limited to the alert content.
- Auditability: complete — you can read the exact code deciding whether a target is up, which matters when default threshold logic doesn’t fit an unusual case.
- Multi-region coverage: not automatic; requires deliberately maintaining a second instance in a separate location, which most teams skip.
- Cost shape: low direct infrastructure cost, offset by engineer-hours that rarely get tracked as a monitoring line item but are real.
- Best fit: teams with data-residency constraints, teams with unusual monitoring logic off-the-shelf products don’t support, and teams with the spare capacity and discipline to maintain a service nobody is contractually obligated to keep running.
Neither model is categorically better; they answer different constraints. The fastest way to pick correctly is identifying which list above describes a cost your team is actually equipped to absorb, rather than which sounds more appealing in the abstract.
17. Enterprise Deployment
At scale, the hosted-versus-self-hosted question typically resolves into “both, for different layers,” and the deployment challenge becomes standardizing that hybrid across a large, heterogeneous fleet rather than picking one model exclusively.
Self-hosted layer, deployed via configuration management for consistency across a fleet. An Ansible playbook that deploys a lightweight internal health-check daemon consistently across every managed host removes the “who configured this one server differently” problem that plagues ad hoc self-hosted setups:
---
- name: Fleet Internal Health Check Deployment
hosts: all_managed_servers
become: yes
vars:
script_path: "/usr/local/bin/internal_health_check.sh"
health_url: "http://127.0.0.1:8080/healthz"
tasks:
- name: Deploy internal health check script
ansible.builtin.copy:
dest: "{{ script_path }}"
mode: '0755'
content: |
#!/usr/bin/env bash
set -euo pipefail
CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 "{{ health_url }}" || echo "000")
[ "$CODE" -eq 200 ] || { logger -t InternalHealth -p daemon.err "Health check failed: $CODE"; exit 1; }
- name: Deploy systemd timer
ansible.builtin.copy:
dest: "/etc/systemd/system/internal-health.timer"
mode: '0644'
content: |
[Unit]
Description=Internal Health Check Every 60s
[Timer]
OnBootSec=30s
OnUnitActiveSec=60s
[Install]
WantedBy=timers.target
- name: Enable and start timer
ansible.builtin.systemd:
daemon_reload: yes
name: internal-health.timer
enabled: yes
state: started
Hosted layer, provisioned as part of the same deploy pipeline. Rather than a human clicking to add a monitor for each new service, the hosted monitor is created via API as a step in the CI/CD pipeline that deploys the service itself, using the idempotent creation pattern shown in Section 8 — this prevents the single most common enterprise self-hosted-monitoring failure mode in reverse: a hosted monitor left orphaned for a decommissioned service, alerting forever on something that no longer exists.
18. Cloud Deployment
Whichever model you choose, cloud provider firewall defaults will block the checks unless configured explicitly — a step that surprises teams who assume “the monitor will just work” once configured in the dashboard.
AWS: authorizing external hosted or self-hosted-external probes through Security Groups. AWS VPC Security Groups block all inbound traffic, including ICMP, by default:
SECURITY_GROUP_ID="sg-0123456789abcdef0"
MONITOR_PROBE_CIDR="203.0.113.0/24" # replace with your vendor's or self-hosted monitor's IP range
aws ec2 authorize-security-group-ingress \
--group-id $SECURITY_GROUP_ID \
--protocol tcp \
--port 443 \
--cidr $MONITOR_PROBE_CIDR
GCP: firewall rule for external probing, applicable to both hosted vendor IP ranges and a self-hosted external monitoring VPS.
gcloud compute firewall-rules create allow-external-monitoring \
--network=default \
--action=ALLOW \
--direction=INGRESS \
--rules=tcp:443,icmp \
--source-ranges=203.0.113.0/24 \
--target-tags=monitored-node
A self-hosting-specific cloud consideration. If you place a self-hosted monitor in your own cloud account for the “externally-placed” configuration described in Section 3, use a genuinely separate account or organization from production, not just a separate VPC in the same account. Many cloud outages are account-level or region-level, not VPC-level, and a shared account boundary reintroduces the same-failure-domain problem the separate placement was meant to solve.
19. FAQs
Q1: Is self-hosted monitoring actually cheaper than hosted monitoring?
Answer: Only if you don’t count engineering time. Direct infrastructure cost is genuinely low, often a few dollars a month. The recurring cost of patching, backups, and eventual migration is real but rarely tracked as a monitoring line item, which is why self-hosting looks cheaper on a spreadsheet than it proves to be for teams without spare capacity.
Q2: Can I run both hosted and self-hosted monitoring at the same time?
Answer: Yes, and past a certain team size this is the normal configuration — internal agents for resource-level visibility, plus one external hosted layer for public reachability and a second opinion when the internal layer reports trouble.
Q3: Does self-hosting actually improve my compliance posture?
Answer: It can, specifically when your compliance framework restricts third-party access to infrastructure topology — self-hosting then removes a vendor from your audited third-party list entirely. It doesn’t automatically improve compliance in general; a poorly-patched self-hosted instance can itself become a finding.
Q4: What’s the biggest risk with a self-hosted monitor that most teams don’t anticipate?
Answer: Sharing a failure domain with the thing it watches, so the exact event you needed alerted on also takes down your ability to be alerted. Fixable at near-zero cost by deploying on separate infrastructure — rarely caught before the first time it matters.
Q5: How do I evaluate whether a hosted vendor is trustworthy before committing?
Answer: Read their security and limitations documentation, not just pricing and features. A vendor stating plainly what it doesn’t do — no SOC 2, single probe region, no SLA during beta — gives you more useful information than marketing implying guarantees without specifying what backs them.
Q6: If I’m already running Prometheus internally, do I still need external monitoring?
Answer: Usually yes. Prometheus-style pull-based telemetry is excellent for resource-level visibility but generally polls from inside your own network, inheriting the same-vantage-point limitation throughout this guide — it can’t confirm a real external user can actually reach your service.
20. References
- Postel, J. (1981). Internet Control Message Protocol. RFC 792. Internet Engineering Task Force (IETF).
- Case, J., Fedor, M., Schoffstall, M., & Davin, C. (1990). Simple Network Management Protocol (SNMP). RFC 1157. IETF.
- Muuss, M. (1983). The Story of the PING Program. U.S. Army Ballistic Research Laboratory.
- Barth, W. (2008). Nagios: System and Network Monitoring, 2nd Edition. No Starch Press.
- Gregg, B. (2020). Systems Performance: Enterprise and the Cloud, 2nd Edition. Addison-Wesley Professional.
- WhatPing Engineering Documentation (2026). Security Model and Target Validation Architecture. Available at: https://www.whatping.com/docs/security
- WhatPing Engineering Documentation (2026). How WhatPing Works: Architecture Overview. Available at: https://www.whatping.com/how-it-works
21. Conclusion
The hosted-versus-self-hosted question resists a universal answer because it isn’t really one question — it’s five smaller ones about engineering capacity, compliance scope, data-sharing tolerance, the number of vantage points you need, and how much you value being able to read the exact logic deciding whether you’re down. Teams that treat it as a single cost comparison tend to pick based on whichever number is smaller today and pay the difference later, either in engineer-hours spent patching a self-hosted instance nobody planned to own long-term, or in a vendor dependency whose limitations only become clear during an incident.
The more durable approach is the one this guide has pointed toward throughout: separate the failure-domain question from the ownership question. A self-hosted monitor placed outside the network it watches solves most of the same problem a hosted vendor solves, without the data-sharing trade-off — and a hosted monitor from a vendor that documents its actual limitations honestly gives you most of self-hosting’s transparency without the maintenance burden. Pick the model that matches the constraint you actually have, reassess it as your team and compliance scope change, and treat the monitoring layer itself as a system with its own uptime requirement — because the day it fails silently is the day you find out the hard way which model you should have chosen.