Build a Jellyfin Monitoring Dashboard with Grafana and Prometheus (2026)
JellyWatch gives you mobile monitoring. But if you want a wall-mounted dashboard with real-time graphs, historical trends, and alerting rules - Grafana and Prometheus are the answer.
This guide shows you how to build a complete Jellyfin monitoring stack.
The Monitoring Stack
Jellyfin → Jellyfin Exporter → Prometheus → Grafana
| Component | Role |
|---|---|
| Jellyfin | Your media server |
| Jellyfin Exporter | Scrapes Jellyfin API, exposes metrics |
| Prometheus | Stores time-series metrics |
| Grafana | Visualizes metrics as dashboards |
Docker Compose: Full Stack
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
ports:
- 9090:9090
restart: unless-stopped
grafana:
image: grafana/grafana:latest
volumes:
- grafana_data:/var/lib/grafana
ports:
- 3000:3000
environment:
- GF_SECURITY_ADMIN_PASSWORD=changeme
restart: unless-stopped
jellyfin-exporter:
image: ghcr.io/quasar/jellyfin-exporter:latest
environment:
- JELLYFIN_URL=http://jellyfin:8096
- JELLYFIN_API_KEY=your_api_key_here
ports:
- 9027:9027
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:
Prometheus configuration
# prometheus.yml
global:
scrape_interval: 30s
scrape_configs:
- job_name: jellyfin
static_configs:
- targets: ["jellyfin-exporter:9027"]
- job_name: node
static_configs:
- targets: ["node-exporter:9100"]
Metrics Available
The Jellyfin exporter provides:
Server metrics
- Active session count
- Total users
- Library item counts (movies, episodes, music)
- Server version and uptime
Session metrics
- Per-session playback state (playing, paused)
- Transcode vs Direct Play ratio
- Client type and device info
- Bitrate and resolution per stream
System metrics (via Node Exporter)
- CPU usage
- RAM usage
- Disk I/O and free space
- Network throughput
Building the Grafana Dashboard
Panel 1: Active Sessions (Gauge)
jellyfin_active_sessions
A large gauge showing current stream count. Green (0-3), yellow (4-6), red (7+).
Panel 2: Transcode vs Direct Play (Pie Chart)
jellyfin_sessions_transcode_total
jellyfin_sessions_directplay_total
Shows the ratio of transcoded vs direct play sessions over time.
Panel 3: CPU Usage (Time Series)
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Real-time CPU usage graph with threshold alerts.
Panel 4: Storage Free Space (Bar Gauge)
node_filesystem_avail_bytes{mountpoint="/media"}
Shows remaining storage on your media drive.
Panel 5: Library Growth (Stat)
jellyfin_library_movies_total
jellyfin_library_episodes_total
Total items in your library - track growth over time.
Alerting Rules
CPU above 90% for 5 minutes
groups:
- name: jellyfin
rules:
- alert: HighCPU
expr: (100 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
for: 5m
labels:
severity: warning
annotations:
summary: "Jellyfin server CPU above 90%"
Storage below 10%
- alert: LowStorage
expr: (node_filesystem_avail_bytes{mountpoint="/media"} / node_filesystem_size_bytes{mountpoint="/media"}) < 0.1
for: 10m
labels:
severity: critical
annotations:
summary: "Media storage below 10%"
Route alerts to Ntfy, Discord, or Telegram via Grafana alerting or Alertmanager.
Pre-Built Dashboards
The Grafana community has pre-built Jellyfin dashboards:
- Search "Jellyfin" on grafana.com/grafana/dashboards
- Import by dashboard ID in Grafana → Dashboards → Import
Grafana + JellyWatch: Complementary Tools
| Feature | Grafana | JellyWatch |
|---|---|---|
| Historical trends | Excellent | Basic |
| Real-time sessions | Good | Excellent |
| Mobile access | Web (responsive) | Native Android app |
| Push notifications | Via alerting | Built-in |
| Setup complexity | Medium-High | Install and connect |
Use Grafana for deep analysis on a desktop. Use JellyWatch for instant mobile monitoring.
Deep analytics on desktop, instant monitoring on mobile. Download JellyWatch on Google Play - the perfect companion to your Grafana dashboard for on-the-go Jellyfin monitoring.




Comments
No comments yet. Be the first to share your thoughts.
Leave a comment