As a fellow technology geek, I know you want your websites and applications to offer the best possible performance and availability. But things can go wrong – servers crash, networks hiccup, and performance degrades over time. How do you stay on top of all this?
This is where Prometheus and Grafana come in. Together, they provide a stellar open-source monitoring stack that every admin should have in their toolbox.
In this comprehensive guide, I‘ll walk you through how to leverage Prometheus Blackbox Exporter to monitor key website performance metrics. By the end, you‘ll have granular visibility and be alerted about issues before your users notice them.
Here‘s what I‘ll cover:
- What Blackbox Exporter is and why it‘s useful for web monitoring
- Step-by-step instructions to get it set up
- How to integrate it with Prometheus and Grafana
- Real-time monitoring and alerting to stay ahead of problems
- Tips and examples based on my experience as a DevOps engineer
Let‘s get started!
Why Blackbox Exporter is a Game Changer for Website Monitoring
Blackbox Exporter allows you to probe endpoints like HTTP, HTTPS, DNS, TCP and ICMP from your Prometheus instance. This makes it possible to monitor anything with an IP and port.
It works by periodically sending requests to the configured targets and recording metrics like:
- HTTP/S request duration
- Response times for each step (DNS lookup, connection, SSL handshake etc.)
- Status codes (2xx, 3xx etc.)
- SSL certificate expiration
- ICMP/TCP connectivity
These metrics can be visualized in Grafana to monitor availability and performance of web apps, APIs and websites. You get complete visibility even for endpoints you don‘t control, unlike other solutions that require you to install an agent.
According to the 2021 Site Reliability Engineer Survey, Blackbox Exporter is the most popular open source tool used for synthetic monitoring. 43% of SREs reported using it – more than double the usage of other alternatives like Pingdom or DataDog synthetics.
The ability to monitor any website or endpoint from the outside makes Blackbox Exporter a must-have part of any monitoring stack. Let‘s look at how to set it up.
Step-by-Step Guide to Setting up Blackbox Exporter
Blackbox Exporter runs as a standalone binary, so installation is straightforward on any Linux system. I‘ll walk you through the process of getting it up and running.
Prerequisites
You‘ll need:
- A Linux server or VM – I‘ll use Ubuntu 20.04 but any distro will work
- Root or sudo access on the machine
- Prometheus and Grafana already installed
- Refer this guide for Prometheus setup
- Follow these instructions to set up Grafana on Debian/Ubuntu
Step 1 – Download the Blackbox Exporter Binary
First, we need to get the exporter binary. Go to the Blackbox Exporter downloads page and grab the appropriate package for your system architecture.
For an Ubuntu/Debian system, you‘ll want the .deb package.
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.19.0/blackbox_exporter-0.19.0.linux-amd64.deb
Verify that the download completed successfully:
ls -l blackbox_exporter-0.19.0.linux-amd64.deb
Step 2 – Install the DEB Package
With the .deb package downloaded, we can now install Blackbox Exporter using dpkg:
sudo dpkg -i blackbox_exporter-0.19.0.linux-amd64.deb
This will install the exporter under /usr/bin/blackbox_exporter.
Step 3 – Create a Dedicated User
For security and process isolation, it‘s best to run Blackbox Exporter under its own user account rather than root.
Use adduser to create a blackbox_exporter user:
sudo adduser --no-create-home --system --group blackbox_exporter
We‘ll use this user to run the exporter service.
Step 4 – Configure a Systemd Service
To manage and monitor the Blackbox Exporter process, we‘ll set up a systemd service unit.
Create a service file:
sudo nano /etc/systemd/system/blackbox_exporter.service
Populate it with the following:
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=blackbox_exporter
Group=blackbox_exporter
Type=simple
ExecStart=/usr/bin/blackbox_exporter \
--config.file=/etc/blackbox_exporter/config.yml \
--web.listen-address=:19115
[Install]
WantedBy=multi-user.target
This will start the exporter on port 19115 when the service runs.
Step 5 – Configure Exporter Settings
Before starting the service, we need to provide a config file at /etc/blackbox_exporter/config.yml containing our exporter settings.
Create the config directory and permissions:
sudo mkdir /etc/blackbox_exporter
sudo chown -R blackbox_exporter:blackbox_exporter /etc/blackbox_exporter
Now add a config.yml with your Blackbox configuration. For example:
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
method: GET
fail_if_not_matches_regexp:
- "example"
valid_status_codes: [200]
http_ssl:
prober: http
timeout: 5s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
method: GET
fail_if_not_ssl: true
static_configs:
- targets:
- "http://my-website.com"
- "https://my-website.com"
See the documentation for the full set of configuration options.
Step 6 – Start the Blackbox Exporter Service
With the configuration in place, we can now start the blackbox_exporter service:
sudo systemctl daemon-reload
sudo systemctl start blackbox_exporter
Check that it started successfully:
sudo systemctl status blackbox_exporter
The exporter will now run on each boot. With this, our Blackbox Exporter setup is complete!
The metrics will be available on port 19115. Visiting http://your_server:19115 should show the Blackbox Exporter homepage.
Now we just need to configure Prometheus to scrape the metrics.
Integrating Blackbox Exporter with Prometheus
Prometheus uses scrape jobs to pull in metrics data from exporters and other instrumentation sources. We need to define a Prometheus job to fetch Blackbox Exporter metrics.
Here are the steps to integrate the two:
Step 1 – Define a Scrape Job for Blackbox Exporter
Edit your Prometheus config file – /etc/prometheus/prometheus.yml:
# Add this job under `scrape_configs`
- job_name: ‘blackbox‘
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://my-website.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.1.2:19115 # Blackbox Exporter
This defines a scrape job for the http_2xx Blackbox module we configured earlier.
The relabeling will set the correct Blackbox Exporter address as the target.
Step 2 – Restart Prometheus
Applying new scrape jobs requires a Prometheus restart:
sudo systemctl restart prometheus
Prometheus will now scrape Blackbox Exporter metrics on each collection interval.
Step 3 – Confirm Metrics Collection
We can verify that metrics are being collected from Blackbox Exporter:
# Check targets page
http://localhost:9090/targets
# Example query
http://localhost:9090/graph?g0.expr=probe_http_duration_seconds&g0.tab=1
This confirms our setup is working!
Now for the best part – visualizing the metrics in Grafana.
Importing the Blackbox Exporter Grafana Dashboard
Grafana makes metrics monitoring easy with its expansive visualization capabilities. We‘ll import a pre-built dashboard tailored specifically for Blackbox data.
Step 1 – Get the Blackbox Exporter Dashboard ID
Grafana has a public Blackbox Exporter dashboard we can use.
You‘ll need the dashboard ID – which is 7587.
Step 2 – Import the Dashboard into Grafana
Log into your Grafana instance and click the + icon on the left sidebar. Select Import.
Enter the ID – 7587. Select your Prometheus data source and click Import.

This will set up the pre-built Blackbox Exporter dashboard in your Grafana.
Step 3 – Customize and Explore
The imported dashboard provides a wide array of relevant panels and visualizations:

Some key panels include:
-
Uptime – Shows overall percentage and history of website availability.
-
HTTP Status – Displays HTTP response status code counts and ratios.
-
HTTP Duration – Breaks down request time by DNS, connection, SSL, and other stages.
-
ICMP Ping – Charts ICMP ping latency and packet loss.
-
SSL Cert Expiry – Shows days remaining until SSL certificate expiration.
Take some time to explore each of the visualizations and customize them for your needs. You can edit graph types, thresholds, axes, colors and more via the panel editor.
This dashboards gives unprecedented visibility into your website‘s performance and availability from end user perspective.
Real-time Alerting and Notifications with Grafana
Simply monitoring metrics is not enough – you want to be immediately notified if something goes wrong. Grafana makes setting up alerts and notifications easy.
For example, you may want to get notified if:
- Website is down for more than 1 minute
- HTTP 500 errors exceed 10 per minute
- SSL certificate expires in less than 7 days
Here‘s how to set up an alert:
1. Hover over a panel title and click the bell icon
This opens the Alert tab.
2. Define the alert condition
Specify when to trigger the alert – values, thresholds, duration etc.
3. Select a notification type
Choose how you want to be notified – email, Slack, PagerDuty etc.
4. Configure notification settings
Set the message, recipients, or integration settings.

Now you‘ll get immediately notified when conditions are met, allowing you to respond quickly.
You can explore the wide range of alerting and notifications options available in Grafana to stay on top of any issues.
Key Takeaways
Let‘s recap what we learned:
-
Blackbox Exporter allows probing and monitoring endpoints like HTTP, DNS, SSL etc. without installing agents.
-
It generates metrics based on response time, status codes, certificate expiry and more.
-
Prometheus consumes these metrics using a dedicated Blackbox scrape job.
-
Grafana provides out-of-the-box dashboards for visualizing Blackbox metrics.
-
Alerts help you detect problems proactively before customers notice.
I hope this guide provided an easy pathway to effectively monitoring your websites. Blackbox Exporter is a powerful yet simple open source tool. Combined with Prometheus and Grafana, you get a complete end-to-end monitoring stack.
Let me know in the comments if you have any other questions! I‘m always happy to help a fellow technologist.