Skip to content
← All articles

Website Monitoring with Grafana: Dashboards and Alerts

Short answer. Grafana does not probe anything itself — it visualizes metrics from sources like Prometheus, InfluxDB, or Loki and fires alerts. To get website availability data you need an exporter (such as blackbox_exporter) or an external synthetic monitor that writes metrics into a time-series database. Grafana then assembles availability, latency, and SSL dashboards and routes alerts to Telegram, Slack, or a webhook.

What Grafana does and does not do

The most common beginner misconception is that Grafana "monitors a website." It is a visualization and alerting layer, not a probing agent. The source of truth is a time-series database (TSDB). A typical stack looks like this:

  • Metric collector — blackbox_exporter, telegraf, or an external synthetic checker;
  • TSDB — Prometheus, VictoriaMetrics, or InfluxDB stores the series;
  • Grafana — draws panels and evaluates alert conditions;
  • Contact points — Telegram, Slack, email, PagerDuty, webhook.

Connecting a data source

After installing Grafana, add a data source through the UI (Connections → Data sources) or through a provisioning file. The declarative approach is preferable: the config lives in git and deploys reproducibly.

apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true
    jsonData:
      timeInterval: "30s"
      httpMethod: POST

Availability dashboard

A minimal site dashboard has four panels: status (up/down), response time (p50/p95), HTTP response code, and days until SSL expiry. Store dashboards as code too — export the JSON model and commit it to the repo.

{
  "title": "Site Availability",
  "panels": [
    {
      "type": "stat",
      "title": "Up",
      "targets": [
        { "expr": "probe_success{instance=\"https://example.com\"}" }
      ],
      "fieldConfig": {
        "defaults": {
          "mappings": [
            { "type": "value", "options": { "1": { "text": "UP" }, "0": { "text": "DOWN" } } }
          ],
          "thresholds": { "steps": [
            { "color": "red", "value": null },
            { "color": "green", "value": 1 }
          ] }
        }
      }
    },
    {
      "type": "timeseries",
      "title": "Response time p95",
      "targets": [
        { "expr": "probe_http_duration_seconds{instance=\"https://example.com\"}" }
      ]
    }
  ]
}

Configuring alerts

In Grafana 9+ alerting lives in a single Unified Alerting engine. A rule is a query plus a condition and threshold. A solid "site is down" alert is probe_success == 0 sustained for a few minutes, so a single network hiccup does not page anyone.

Alert parameterRecommendationWhy
For (duration)2–5 minSuppresses flapping false positives
Evaluation interval30–60 secBalances speed vs load
No Data handlingAlertingMissing metrics are also an incident
Severity labelcritical / warningRouting by importance

Routing notifications

Notification policies fan alerts out to teams and channels via label matching. Critical alerts go to PagerDuty and page the on-call engineer; warnings go to a Slack channel.

The golden rule of alerting: every notification must be actionable. If nobody responds to an alert, either fix it or delete it.

Where Grafana is weaker than external monitoring

If blackbox_exporter runs in the same cluster or data center as the site, an outage of that DC takes down both the site and your monitoring at once. External synthetic monitoring removes this blind spot: probes arrive from independent infrastructure outside your network.

enterno.io is external synthetic monitoring that complements Grafana rather than replacing it. HTTP / SSL / Ping / DNS checks run from RU / EU / US regions; the free tier offers 10 monitors at a 5-minute interval (paid tiers go to 1 minute and 30 seconds). Alerts reach Telegram, Slack, email, webhook, PagerDuty, and Jira. You can pull the metrics through the REST API v4 straight into Grafana as an "outside" source of truth.

Best practice: keep an internal blackbox inside the cluster for detailed diagnostics and an external synthetic checker outside for honest uptime. Aggregate both into one Grafana.

FAQ

Can Grafana check a website without Prometheus?

Yes, but you still need a collector: InfluxDB + Telegraf, Graphite, or an external synthetic source via API документацию. Grafana itself never issues HTTP probes.

How do I store dashboards and alerts in git?

Through provisioning: YAML files for data sources and notification policies, JSON models for dashboards. That is "monitoring as code" — reproducible and reviewable in a PR.

What replaces blackbox_exporter for external probing?

An external synthetic monitor like enterno.io that checks the site from several regions and exposes metrics via API. It closes the "my own DC went down" blind spot.

How do I avoid alert floods?

Set the For parameter to 2–5 minutes, group alerts by label, and use mute timings for scheduled maintenance.

Ready to add an external layer? Create a free monitor at enterno.io/monitors and feed its metrics into Grafana through the API. Related reading: monitoring as code, alerting best practices, and API uptime monitoring.

Check your website right now

Check your site →
More articles: DevOps
DevOps
Monitoring RAG Pipelines
22.06.2026 · 34 views
DevOps
Prometheus Blackbox Monitoring for Sites and APIs
18.06.2026 · 35 views
DevOps
Kubernetes Uptime Monitoring
18.06.2026 · 33 views
DevOps
LLM Observability Guide
22.06.2026 · 35 views