If you already use Grafana for observability, adding uptime monitoring is a natural extension. Here’s how to set it up with both self-hosted and cloud approaches.
Option 1: Blackbox Exporter (Self-Hosted)
The Prometheus Blackbox Exporter probes endpoints via HTTP, TCP, DNS, and ICMP, exposing results as Prometheus metrics that Grafana can visualize.
Setup
- Deploy Blackbox Exporter:
services: blackbox-exporter: image: prom/blackbox-exporter:latest ports: - "9115:9115" volumes: - ./blackbox.yml:/etc/blackbox_exporter/config.yml- Configure probes:
modules: http_2xx: prober: http timeout: 5s http: valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] valid_status_codes: [200] method: GET follow_redirects: true tcp_connect: prober: tcp timeout: 5s dns_check: prober: dns timeout: 5s dns: query_name: "example.com" query_type: "A"- Configure Prometheus scraping:
scrape_configs: - job_name: 'blackbox' metrics_path: /probe params: module: [http_2xx] static_configs: - targets: - https://example.com - https://api.example.com/health relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115Key Metrics
probe_success— 1 if probe succeeded, 0 if failedprobe_duration_seconds— Total probe durationprobe_http_status_code— HTTP response status codeprobe_ssl_earliest_cert_expiry— SSL certificate expiry timestamp
Grafana Dashboard
Create a dashboard with these panels:
- Uptime percentage —
avg_over_time(probe_success[30d]) * 100 - Response time —
probe_duration_seconds - SSL expiry countdown —
(probe_ssl_earliest_cert_expiry - time()) / 86400(days until expiry) - Status overview — Table showing all targets with current status
Alerting
# Grafana alert rule- alert: EndpointDown expr: probe_success == 0 for: 2m labels: severity: critical annotations: summary: "Endpoint {{ $labels.instance }} is down"Option 2: Grafana Cloud Synthetic Monitoring
If you use Grafana Cloud, Synthetic Monitoring is built in and runs checks from 20+ global locations without managing infrastructure.
Setup
- Go to Grafana Cloud → Synthetic Monitoring
- Add a new check (HTTP, multi-step, DNS, TCP, or traceroute)
- Select probe locations
- Configure alerting rules
- View results in pre-built dashboards
Advantages Over Self-Hosted
- Multi-region by default — Probes run from multiple global locations
- No infrastructure — No Prometheus or Blackbox Exporter to manage
- Pre-built dashboards — Instant visibility without configuration
- Integrated alerting — Uses Grafana’s alerting system
Limitations
- 5 checks on free tier — Limited for comprehensive monitoring
- Costs scale — More checks = higher bill
- Less customizable — Can’t modify probe behavior like self-hosted
Limitations of Grafana for Uptime Monitoring
Whether self-hosted or cloud, Grafana as a monitoring tool has gaps:
- No built-in status pages — You need a separate tool for public-facing status
- Single-region (self-hosted) — Blackbox Exporter runs from one location without complex multi-instance setups
- Requires Prometheus knowledge — Not a turnkey uptime monitoring solution
- No native incident management — Alerting only, no incident lifecycle tracking
When to Use Grafana vs Dedicated Tools
Use Grafana when:
- You already run Prometheus/Grafana for infrastructure
- You want monitoring data alongside existing dashboards
- You have engineering capacity to maintain the setup
Use a dedicated tool (like Warden) when:
- You need multi-region monitoring without managing multiple Prometheus instances
- You need built-in status pages and incident communication
- You want a turnkey solution with minimal setup
- You need sub-minute check intervals from multiple locations
The best approach for many teams: use Grafana for infrastructure dashboards and a dedicated uptime tool for external availability monitoring. Warden can export metrics to Prometheus, giving you the best of both worlds.
Related tools:
- Uptime Calculator — Calculate SLA targets and downtime
- Latency Percentile Calculator — Analyze probe response times