Why Self-Host Your Endpoint Monitoring?
Commercial monitoring platforms charge per endpoint, restrict check types behind premium tiers, and store all your probe data on third-party servers. Self-hosting your endpoint monitoring stack eliminates these constraints entirely:
- Zero per-endpoint costs — monitor hundreds or thousands of targets without paying incremental fees
- Full data ownership — all probe results, latency measurements, and uptime history remain on your infrastructure
- Private network monitoring — probe internal services, staging environments, and LAN hosts that external monitors cannot reach
- Unlimited check frequency — run probes every 10 seconds or every 10 minutes, without throttling
- Custom alerting pipelines — route alerts to any channel via webhooks, email, or local notification services
For infrastructure teams running self-hosted services, having an independent health-check layer is essential. This guide compares three mature open-source tools — each with a distinct approach to endpoint monitoring — and provides production-ready deployment configurations. For broader infrastructure monitoring that complements endpoint checks, see our Zabbix vs LibreNMS vs Netdata comparison and our Uptime Kuma monitoring guide.
Tool Overview
| Tool | Stars | Language | Last Updated | Best For |
|---|---|---|---|---|
| Gatus | 10,690 | Go | April 2026 | Developer-oriented health dashboards with status pages |
| Blackbox Exporter | 5,645 | Go | April 2026 | Prometheus ecosystem integration and standardized probing |
| SmokePing | 1,868 | Perl | March 2026 | Network latency monitoring with historical trend visualization |
Gatus: Developer-Oriented Health Dashboard
Gatus is a lightweight, config-as-code health dashboard that supports HTTP, ICMP, TCP, and DNS probes. It evaluates probe results against configurable conditions (status code, response time, certificate expiry, body content) and presents findings on a clean web dashboard with built-in status pages.
Key Features
- Multi-protocol probes: HTTP, HTTPS, TCP, ICMP, DNS, and STARTTLS
- Rich condition language:
status == 200,responseTime < 500ms,certExpiration > 30d,body contains "ok" - Built-in status page: Auto-generated public or private status pages per group
- Extensive alerting: Slack, Discord, Teams, PagerDuty, Twilio, Email, Gotify, and custom webhooks
- Storage backends: SQLite (default), PostgreSQL, MySQL for persistent history
- Single binary: No external dependencies beyond the config file
docker Compose Deployment
| |
Gatus Configuration Example
Save as config.yaml and mount it into the container:
| |
Gatus processes the conditions field as a simple expression language. Each condition is evaluated against the probe result, and all must pass for the endpoint to be considered healthy.
Prometheus Blackbox Exporter: Standardized Probe Monitoring
The Blackbox Exporter is Prometheus’s official probe exporter. It exposes a single HTTP endpoint that accepts probe targets and returns metrics in Prometheus format. This design means it integrates seamlessly with the existing Prometheus mografanag stack — scrape configs, alerting rules, and Grafana dashboards all work out of the box.
Key Features
- Prometheus-native: Outputs standard Prometheus metrics, scrapable by any Prometheus server
- Probe types: HTTP/HTTPS, DNS, TCP, ICMP, gRPC
- TLS certificate validation: Configurable CA bundles and certificate expiry tracking
- Module system: Reusable probe configurations (e.g.,
http_2xx,dns_tcp,icmp_ipv4) - Multi-target pattern: Single exporter handles thousands of targets via Prometheus relabeling
- No built-in dashboard: Relies on Grafana for visualization
Docker Compose Deployment
| |
Blackbox Exporter Configuration
Save as blackbox.yml:
| |
Prometheus Scrape Configuration
Add this to your prometheus.yml to wire up the exporter:
| |
This relabeling pattern is what makes Blackbox Exporter powerful — you add new targets by editing the Prometheus config, not the exporter config. The single exporter instance probes every target and returns standardized metrics like probe_success, probe_duration_seconds, and probe_ssl_earliest_cert_expiry. For a complete guide on setting up Prometheus-based alerting, see our Prometheus Alertmanager vs Moira vs VictoriaMetrics VMAlert comparison.
SmokePing: Network Latency and Packet Loss Monitoring
SmokePing has been the go-to tool for network latency monitoring since 2001. It uses RRDtool to store and visualize latency data, producing distinctive graphs that show latency distribution, packet loss, and jitter over time. Unlike Gatus and Blackbox Exporter (which focus on “is it up?”), SmokePing answers “how is the network performing?”
Key Features
- Latency distribution graphs: Shows min/avg/max latency with standard deviation bands
- Packet loss tracking: Visual representation of lost probes over time
- Multiple probe types: FPing (ICMP), HTTP, DNS, TCP, Curl, TACACS+, Radius, LDAP
- Hierarchical configuration: Organize targets in tree structures for large deployments
- Alert system: Built-in alerting with threshold-based triggers
- Master/Slave mode: Distributed probing from multiple geographic locations
- RRDtool storage: Efficient time-series data storage with automatic downsampling
Docker Compose Deployment (LinuxServer.io Image)
| |
SmokePing Configuration
The LinuxServer.io image stores configuration in /config. Edit Targets to define your monitoring tree:
| |
SmokePing’s tree-based configuration (+ for sections, ++ for targets) makes it easy to organize hundreds of probes into logical groups. The probe directive at each level lets you mix ICMP, DNS, and HTTP probes in the same deployment.
Feature Comparison
| Feature | Gatus | Blackbox Exporter | SmokePing |
|---|---|---|---|
| HTTP Probing | ✅ Full (methods, headers, body) | ✅ Full (modules, regex) | ✅ Via CGI probe |
| DNS Probing | ✅ Native | ✅ Native | ✅ Via DNS probe |
| TCP Probing | ✅ Native | ✅ Native | ✅ Via TCP probe |
| ICMP/Ping | ✅ Native | ✅ Requires NET_RAW | ✅ Via FPing |
| Dashboard | ✅ Built-in web UI | ❌ Requires Grafana | ✅ Built-in web UI |
| Status Page | ✅ Auto-generated | ❌ No | ❌ No |
| Alerting | ✅ 15+ integrations | ✅ Via Alertmanager | ✅ Built-in threshold alerts |
| Latency Tracking | Basic (response time) | Via Prometheus metrics | ✅ Detailed distribution graphs |
| Packet Loss | ❌ No | ❌ No | ✅ Native tracking |
| Data Storage | SQLite / PostgreSQL / MySQL | Prometheus TSDB | RRDtool |
| Config Format | YAML | YAML | INI-style |
| Multi-location | ❌ Single instance | ✅ Multiple exporters | ✅ Master/Slave mode |
| Certificate Monitoring | ✅ Native (expiry check) | ✅ Native (TLS metrics) | ❌ No |
| Body Content Checks | ✅ JSON path, regex | ✅ Regex matching | ❌ No |
| Docker Image | ghcr.io/twin/gatus:stable | prom/blackbox-exporter | lscr.io/linuxserver/smokeping |
| Binary Size | ~25 MB | ~20 MB | ~150 MB (with dependencies) |
When to Use Each Tool
Choose Gatus When
- You want a standalone health dashboard with zero external dependencies
- Status pages for your services are a requirement
- You need flexible condition expressions (status codes, response times, certificate expiry, body content)
- Your team prefers config-as-code with a single YAML file
- You want direct alerting integrations without setting up Alertmanager
Gatus excels as a “set it and forget it” monitoring solution. Deploy it, point it at your endpoints, and get a clean dashboard with automatic alerting — no Grafana, no Prometheus, no additional infrastructure needed.
Choose Blackbox Exporter When
- You already run Prometheus and Grafana
- You need standardized metrics across your entire monitoring stack
- You manage hundreds or thousands of endpoints and want relabeling-based target management
- You want to combine endpoint probes with system metrics, application metrics, and logs in a single observability platform
- You need custom Grafana dashboards with cross-correlated data
The Blackbox Exporter is the right choice when endpoint monitoring is one component of a broader observability strategy. Its integration with the Prometheus ecosystem is unmatched.
Choose SmokePing When
- Network latency and packet loss are your primary concerns
- You need historical latency trends with distribution visualization
- You operate across multiple network segments or geographic locations
- You want to compare ISP performance or CDN edge latency over time
- You prefer RRDtool’s automatic data retention and downsampling
SmokePing remains unmatched for pure network quality monitoring. Its graphs are the gold standard for answering “is the network degrading?” rather than “is the service down?”
Deployment Architecture Recommendations
Minimal Stack: Gatus Alone
| |
Single container, single config file, zero dependencies. Ideal for homelabs and small teams.
Prometheus Stack: Blackbox Exporter + Prometheus + Grafana
| |
Full observability stack. Higher resource usage but maximum flexibility.
Network Monitoring: SmokePing + Reverse Proxy
| |
Lightweight but requires RRDtool knowledge for advanced customization.
Migration and Coexistence
These tools are not mutually exclusive. A common production pattern combines Blackbox Exporter (for Prometheus metrics) with Gatus (for status pages):
| |
Run SmokePing on a dedicated host or container for continuous latency baselines, while Gatus handles the “is it up” question and Blackbox Exporter feeds your internal observability pipeline.
FAQ
What is the difference between uptime monitoring and endpoint monitoring?
Uptime monitoring simply checks whether a service responds (binary up/down). Endpoint monitoring goes deeper — it validates HTTP status codes, measures response times, checks TLS certificate validity, verifies response body content, and tests DNS resolution. Gatus and Blackbox Exporter both provide endpoint-level validation, while SmokePing focuses on the network layer (latency, jitter, packet loss).
Can I use Blackbox Exporter without Prometheus?
Technically yes — the Blackbox Exporter exposes its own web interface at http://localhost:9115 where you can manually trigger probes. However, without Prometheus scraping the metrics, you lose historical data, alerting, and visualization. If you want a standalone solution without Prometheus, Gatus is a better fit.
Does Gatus support multi-location monitoring?
Not natively. Gatus runs as a single instance and probes from the host it is deployed on. If you need geographic multi-location probing, you can deploy multiple Gatus instances (one per location) and point them at a shared PostgreSQL database. SmokePing’s master/slave mode is purpose-built for distributed probing and may be easier to configure for this use case.
How much disk space does SmokePing use?
SmokePing uses RRDtool, which allocates fixed-size round-robin databases per target. A typical SmokePing instance monitoring 50 targets uses 100-500 MB depending on the RRA (Round Robin Archive) configuration. The RRA settings control how long data is retained at different resolutions — for example, keeping 1-minute granularity for 24 hours, 5-minute for 7 days, and 1-hour for 1 year. This is fundamentally different from SQLite or Prometheus TSDB, which grow continuously.
Can Gatus monitor services behind authentication?
Yes. Gatus supports custom HTTP headers (including Authorization: Bearer <token>), basic auth, client certificates, and POST bodies. You can also use environment variable substitution in the config file, which is useful for managing secrets. The client field in the endpoint configuration allows you to specify TLS certificates, skip certificate verification, or set proxy servers.
Which tool has the lowest resource footprint?
Blackbox Exporter uses the least resources when idle (~15 MB RAM) since it only computes metrics on demand when scraped. Gatus uses ~30-50 MB RAM for a moderate number of endpoints due to its built-in web server and SQLite storage. SmokePing uses ~100-150 MB due to Perl dependencies and the web interface (Apache + CGI), plus the RRDtool storage overhead.