Your Jellyfin server went silent at midnight. A family movie night turns into troubleshooting a Docker container restart loop. Your media library is unreachable, and you only found out because someone complained. For self-hosted media servers, downtime is personal — and preventable.
Jellyfin is an open-source media server that organizes and streams your personal media collection. Vigilmon provides the external uptime monitoring that catches Jellyfin failures before your next movie night — covering the health API, web UI, transcoding service, and SSL certificate.
This tutorial walks you through monitoring Jellyfin end-to-end with Vigilmon.
What You'll Build
- A Vigilmon HTTP monitor on Jellyfin's
/healthendpoint - A web UI availability monitor with keyword verification
- A transcoding service check via the API
- SSL certificate expiry alerts
- Alert channels for immediate notification
Prerequisites
- A running Jellyfin instance (typically on port 8096 behind a reverse proxy)
- A free account at vigilmon.online
Step 1: Monitor the /health Endpoint
Jellyfin exposes a dedicated health endpoint at /health. It returns {"Status": "Healthy"} when the server is fully operational.
Test it from your terminal:
curl https://jellyfin.yourdomain.com/health
Expected response:
{"Status": "Healthy"}
This endpoint requires no authentication and checks that the Jellyfin process is running, the database is reachable, and the HTTP stack is accepting connections. A process crash, out-of-memory kill, or database corruption will cause this endpoint to fail or become unreachable.
Set up the Vigilmon monitor:
- Log in to Vigilmon and click New Monitor → HTTP.
- Set URL to
https://jellyfin.yourdomain.com/health. - Set Check interval to 60 seconds.
- Set Expected status code to
200. - Under Advanced → Keyword check, add:
- Keyword present:
Healthy
- Keyword present:
- Save the monitor.
Vigilmon now polls your Jellyfin health endpoint every minute from multiple geographic regions.
Step 2: Monitor Web UI Availability
The /health endpoint confirms the server process is alive, but doesn't verify the Jellyfin web interface is loading. A missing build artifact, a broken Vue.js bundle, or a misconfigured reverse proxy can leave the backend healthy while the UI serves a blank screen.
Add a keyword monitor on the web UI:
- Click New Monitor → HTTP in Vigilmon.
- Set URL to
https://jellyfin.yourdomain.com/(your Jellyfin homepage). - Set Expected status code to
200. - Under Advanced → Keyword check, configure:
- Keyword present:
Jellyfin
- Keyword present:
- Save.
When the Jellyfin web client loads correctly, the HTML response includes the application name. If the frontend assets are broken or the static file server is misconfigured, this check fails independently of the /health monitor.
Step 3: Monitor the Transcoding Service
Transcoding is Jellyfin's most resource-intensive feature and the most likely subsystem to fail under load. You can verify the transcoding pipeline is operational via the API's encoding information endpoint.
First, generate an API key in Jellyfin:
- Open Jellyfin admin dashboard → Dashboard → API Keys.
- Click + New API Key, name it
vigilmon. - Copy the generated key.
Set up the monitor:
- Click New Monitor → HTTP in Vigilmon.
- Set URL to:
https://jellyfin.yourdomain.com/System/Info?api_key=YOUR_API_KEY - Set Expected status code to
200. - Under Advanced → Keyword check:
- Keyword present:
TranscodingTempPath
- Keyword present:
- Save.
The /System/Info endpoint returns comprehensive system information including the transcoding temp path configuration. If the Jellyfin service is degraded to a point where it can't serve authenticated API requests, this check fires while still isolating the failure from the unauthenticated /health endpoint.
Step 4: SSL Certificate Monitoring
Jellyfin is typically served over HTTPS via Nginx, Caddy, or Traefik. An expired TLS certificate will lock out every client — web browsers, mobile apps like Infuse and Jellyfin Mobile, and Kodi plugins alike.
Vigilmon automatically monitors SSL certificate validity on HTTPS monitors. Configure dedicated expiry alerts:
- Open any of your HTTPS Jellyfin monitors in Vigilmon.
- Go to Settings → SSL.
- Enable Alert when certificate expires within 14 days.
- Optionally enable Alert when certificate expires within 30 days for early warning.
You'll receive alerts like:
⚠️ SSL Warning: jellyfin.yourdomain.com
Certificate expires in 11 days (2026-07-15)
For Let's Encrypt auto-renewal via Certbot or Caddy: renewal failures are silent until clients start rejecting connections. Vigilmon's certificate monitor catches this gap before your media apps stop working.
Step 5: Monitor Stream Response Time
Jellyfin's /health endpoint confirms the process is alive, but not that it can respond fast enough to serve streams. High response latency on health checks is an early indicator of CPU saturation from transcoding, storage I/O pressure, or memory pressure — all of which cause buffering before an outright outage.
Configure response time alerting on your health monitor:
- Open your
/healthVigilmon monitor. - Go to Advanced → Response Time.
- Set Alert when response time exceeds to
3000ms. - Save.
For a more direct stream availability check, add a monitor on the /Sessions API endpoint — this confirms the streaming service layer is accepting connections:
- Add Monitor → HTTP.
- URL:
https://jellyfin.yourdomain.com/Sessions?api_key=YOUR_API_KEY. - Expected status code:
200. - Check interval: 5 minutes.
- Label:
Jellyfin Sessions API. - Save.
A slow /health response combined with a sessions timeout typically indicates the Jellyfin server is under heavy transcoding load. Catching this early lets you increase hardware resources or limit concurrent streams before users complain about buffering.
Step 6: Alert Channels
Go to Notifications → New Channel in Vigilmon and configure your preferred alert delivery:
- Email — immediate alerts to your inbox
- Webhook — forward to Discord, Slack, or ntfy.sh for push notifications on mobile
For Discord, paste your server webhook URL. A Jellyfin downtime alert looks like:
🔴 DOWN: jellyfin.yourdomain.com/health (HTTP 502)
Jellyfin health check failed
Region: EU-West
Triggered: 2026-01-15 02:14 UTC
Recovery notification:
✅ RECOVERED: jellyfin.yourdomain.com/health
Downtime: 6 minutes
Step 7: Status Page
Go to Status Pages → New Status Page in Vigilmon. Add your Jellyfin monitors and publish. Share the link with family members or co-users so they can check service status themselves instead of contacting you during outages.
What You've Built
| Scenario | How Vigilmon catches it |
|---|---|
| Jellyfin process crash or OOM kill | /health returns non-200 or connection refused |
| Reverse proxy (Nginx/Caddy) down | HTTPS monitor detects 502 or TLS error |
| Web UI assets broken or missing | Keyword monitor on homepage fails |
| Transcoding service degraded | System Info API monitor fires |
| Server under heavy load / high latency | Response time alert fires above threshold |
| SSL certificate expired or expiring | SSL expiry alert triggers at threshold |
| DNS misconfiguration | HTTP monitor detects DNS resolution failure |
Self-hosting your media library is rewarding — but without external monitoring, you're the last person to know when Jellyfin goes down. Vigilmon watches from outside your network, from multiple regions, with no agents to install.
Start monitoring your Jellyfin server today — register free at vigilmon.online.