Dashy is the homelab enthusiast's favorite starting point — a beautiful, customizable dashboard that shows all your self-hosted services with live status indicators, widgets, and themes. The irony is that Dashy itself has no external uptime monitor: if the Dashy container crashes, you lose your dashboard and your service status overview at the same time. Vigilmon closes that loop by monitoring Dashy externally, confirming the Vue.js SPA is being served, the built-in health endpoint responds, the configuration service is accessible, and Dashy's status-checking worker can reach your other services.
What You'll Set Up
- Dashy web UI availability monitor (port 8080 HTTP)
- Dashy
/pinghealth endpoint monitor - Dashy
/conf.ymlconfiguration endpoint monitor - SSL certificate expiry alerts for HTTPS Dashy deployments
- Heartbeat monitor for Dashy's status-checking worker
Prerequisites
- Dashy running as a Docker container (port 8080 exposed)
- Dashy accessible on your local network or via a reverse proxy with a custom domain
- A free Vigilmon account
Step 1: Monitor the Dashy Web UI
Dashy's Vue.js SPA is served by an Express.js server on port 8080. A 200 response on the root path confirms the Dashy container is running and the frontend is being served:
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - Enter your Dashy URL:
http://your-server-ip:8080orhttps://dashy.yourdomain.com(if reverse-proxied). - Set Check interval to
5 minutes. - Set Expected HTTP status to
200. - Click Save.
If you run Dashy on a non-standard port or behind a path prefix, adjust the URL accordingly. For a local-only Dashy deployment (no domain), use the server's LAN IP:
http://192.168.1.100:8080
For Vigilmon's external probes to reach a local Dashy instance, Dashy must be accessible from the internet — either via a reverse proxy with a public domain or a VPN. If Dashy is intentionally LAN-only, set up a self-hosted Vigilmon agent or use the heartbeat approach in Step 5.
Step 2: Monitor the Dashy /ping Health Endpoint
Dashy exposes a dedicated /ping endpoint that returns a lightweight health confirmation:
{"success": true}
This endpoint is specifically designed for health checks and doesn't load the full Vue.js application. It's the fastest, most reliable way to confirm the Dashy Express server process is alive:
- Click Add Monitor → HTTP / HTTPS.
- Set URL to
http://your-server-ip:8080/pingorhttps://dashy.yourdomain.com/ping. - Set Check interval to
5 minutes. - Set Expected HTTP status to
200. - Under Response body contains, enter
trueto verify the JSON response. - Click Save.
The /ping endpoint returns 200 even when Dashy is initializing and hasn't finished loading its configuration — so it may succeed before the full UI is ready. Pair it with the root path monitor from Step 1 for complete coverage: /ping catches process crashes, the root path monitor catches configuration or rendering failures.
Step 3: Monitor the Dashy Configuration Endpoint
Dashy serves its configuration from /conf.yml (or /api/conf depending on version). This endpoint confirms Dashy's configuration service is accessible and the dashboard is loaded with your current service links:
- Click Add Monitor → HTTP / HTTPS.
- Set URL to
http://your-server-ip:8080/conf.ymlorhttps://dashy.yourdomain.com/conf.yml. - Set Check interval to
10 minutes. - Set Expected HTTP status to
200. - Click Save.
A 404 or 500 on /conf.yml while /ping returns 200 indicates the Dashy configuration file is missing, corrupt, or inaccessible to the container — the dashboard will load but show no sections or services.
If you use the API endpoint variant, monitor /api/conf instead:
http://your-server-ip:8080/api/conf
Step 4: SSL Certificate Alerts for HTTPS Dashy Deployments
Dashy itself doesn't handle SSL — it runs on plain HTTP on port 8080. HTTPS is typically provided by a reverse proxy (Nginx, Traefik, or Caddy) with a custom domain and Let's Encrypt certificate. An expired certificate on your reverse proxy makes Dashy inaccessible from HTTPS clients.
Add a certificate expiry monitor for your Dashy domain:
- Open the web UI monitor created in Step 1 (for your HTTPS Dashy URL).
- Enable Monitor SSL certificate under the SSL section.
- Set Alert when certificate expires in less than
21 days. - Click Save.
For a Traefik-managed certificate, verify the certificate is renewing correctly:
# Check the Traefik certificate store
docker exec traefik cat /acme.json | python3 -c "
import sys, json
data = json.load(sys.stdin)
for resolver in data.values():
for cert in resolver.get('Certificates', []):
print(cert['domain']['main'])
"
For Nginx with Certbot, check renewal status:
certbot renew --dry-run
A 21-day alert window in Vigilmon gives you buffer to investigate and manually renew if automatic renewal fails.
Step 5: Heartbeat Monitoring for Dashy's Status-Checking Worker
Dashy has a built-in service status-checking feature — it periodically pings all services configured in your conf.yml and displays colored status dots on each tile. If Dashy's status worker becomes unable to reach external services (due to network changes, DNS issues, or container networking problems), those status dots go stale.
Use Dashy's /status-check API endpoint as a heartbeat to verify the worker is operational and Dashy can reach your other services from its container:
- Click Add Monitor → Cron Heartbeat in Vigilmon.
- Set the expected ping interval to
30 minutes. - Copy the heartbeat URL (e.g.
https://vigilmon.online/heartbeat/abc123). - Set up a cron job that calls Dashy's status-check API for one of your critical services and pings Vigilmon on success:
# /etc/cron.d/dashy-status-worker-heartbeat
*/30 * * * * root curl -sf \
"http://your-server-ip:8080/status-check?url=https%3A%2F%2Fcloud.yourdomain.com" \
| grep -q '"online":true' \
&& curl -s https://vigilmon.online/heartbeat/abc123
Replace https://cloud.yourdomain.com with a URL-encoded address of one of your critical services as configured in Dashy. The /status-check endpoint returns JSON indicating whether the target is reachable:
{"online": true, "responseTime": 142}
This heartbeat serves a dual purpose: it confirms the Dashy status-checking worker is operational, and it verifies that the service being checked is reachable from the Dashy container's network perspective.
If you prefer a simpler heartbeat without service-specific checking:
*/30 * * * * root curl -sf http://your-server-ip:8080/ping > /dev/null \
&& curl -s https://vigilmon.online/heartbeat/abc123
Step 6: Configure Alert Channels
- Go to Alert Channels in Vigilmon and add email, Slack, Discord, or Telegram notifications.
- Set Consecutive failures before alert to
2on all monitors — Docker containers sometimes restart briefly on resource pressure without a persistent failure. - For the heartbeat, set the Grace period to
35 minutesto allow for the 30-minute cron interval plus execution time. - If you update Dashy's
conf.ymlconfiguration frequently, consider adding a brief maintenance window in Vigilmon — Dashy reloads configuration without restarting, but an invalid YAML change can crash the container.
Bonus: Monitor the Services Dashy Displays
The real value of combining Dashy and Vigilmon is monitoring every service that appears on your Dashy dashboard with Vigilmon as well. Your Dashy conf.yml is the definitive list:
# Extract URLs from conf.yml and add them to Vigilmon
sections:
- name: Media
items:
- title: Jellyfin
url: https://jellyfin.yourdomain.com
- title: Navidrome
url: https://music.yourdomain.com
- name: Productivity
items:
- title: Nextcloud
url: https://cloud.yourdomain.com
Add a Vigilmon HTTP monitor for each url in your Dashy configuration. This way, when Dashy's built-in status dots show red, you already have an alert in your inbox — and Vigilmon's history charts let you see exactly when each service went down.
Summary
| Monitor | Target | What It Catches |
|---|---|---|
| Web UI | http://host:8080 | Dashy container crash, Express down |
| /ping health endpoint | http://host:8080/ping | Process down, no response |
| /conf.yml config endpoint | http://host:8080/conf.yml | Configuration file missing or corrupt |
| SSL certificate | HTTPS reverse proxy domain | Cert renewal failure |
| Status-worker heartbeat | /status-check?url=SERVICE | Status worker offline, network failure |
Dashy shows you when your self-hosted services are up — Vigilmon shows you when Dashy itself is up. Together they give you a complete view of your homelab's health, with alerts that reach you before you even open a browser.