Skip to content

Jellyfin

This content is not available in your language yet.

Whether Jellyfin keeps its libraries current and its viewers served: scheduled tasks that failed on their last run (the library scan first), plugins that no longer load, a restart waiting, and what is playing right now, transcoded or not.

From the DumbMonit server (or its relay agent) to the device:

PortProtocolPurpose
8096TCPAPI (HTTP, default)
8920TCPOnly with the https scheme on Jellyfin’s own HTTPS port

DumbMonit reads Jellyfin’s API with an API key created in the dashboard. It never starts a task, never stops a playback and never changes a setting.

The failure worth watching: the library scan that fails every night. A network share unmounted, a disk full, and new films and episodes stop appearing; Jellyfin itself keeps playing what it already knows, and the only trace is a line in Scheduled Tasks.

All metrics are prefixed dumbmonit_jellyfin_.

MetricWhatLabels
version_infovalue 1version
pending_restart1 when Jellyfin waits for a restart (after a plugin install or update)
shutting_down1 while Jellyfin shuts down
scheduled_tasks_failed, scheduled_tasks_runningtasks whose last run failed or was aborted; tasks running now
scheduled_task_failedvalue 1 per failed task (at most 32)task, error (first line of the message)
library_scan_last_ok, library_scan_age_secondslast run of “Scan Media Library”: succeeded or not, and how long ago it ended
plugins, plugins_brokeninstalled plugins; those that failed to load or do not support this version
plugin_brokenvalue 1 per broken pluginplugin, status
library_scan_scheduled1 when “Scan Media Library” has a periodic trigger (not only at startup); keeps the stale-scan rule off a scan you disabled
libraries, libraries_scanninglibraries; those Jellyfin is refreshing now
sessions, streams, streams_paused, transcodesclient sessions; those playing something, paused, and transcoding
transcodes_softwaretranscodes with no hardware acceleration, so on the CPU
streaming_usersdistinct users playing something
users, users_disabledaccounts; those disabled
failed_logins_recentfailed sign-ins in the last hour, from the activity log (at most 500 entries read)
storage_used_percent, storage_free_bytesone series per disk (libraries, data, metadata, cache, transcodes, logs; folders on the same disk count once); Jellyfin 10.11 and latervolume
scrape_errorscalls that failed on the last probe

Jellyfin does not check for its own updates (the package or the image does), so there is no update metric.

The built-in rules that apply: Jellyfin scheduled task failed, Jellyfin plugin broken, Jellyfin restart pending, Jellyfin library scan stale (no finished scan for three days, only when the scan is scheduled), Jellyfin storage almost full (90 %), Jellyfin heavy CPU transcoding (three or more software transcodes for 15 minutes), Jellyfin failed sign-ins (ten in an hour), plus Monitor unreachable.

Everything past the first four calls (storage, libraries, users, activity log) is optional: a Jellyfin that does not offer it (storage needs 10.11) or a key that cannot read it is skipped without error.

The panel above the charts reads what the probe stored; opening the page never calls Jellyfin. It says what is wrong first (failed tasks, broken plugins, a restart waiting), then streams, transcodes, sessions and the age of the last library scan, then the failed tasks and broken plugins by name with Jellyfin’s own error.

  1. In Jellyfin, open Dashboard → Advanced → API Keys → + and name the key as follows, then copy it.

    DumbMonit
  2. In DumbMonit, enter Jellyfin’s address and paste the key.

Vendor documentation: https://api.jellyfin.org/

Jellyfin cannot limit what a key may do: every key has full rights on the server. It is still the only way to read scheduled tasks and everyone’s playback; an ordinary user sees neither.

DumbMonit only reads /System/Info, /ScheduledTasks, /Sessions, /Plugins, /System/Info/Storage, /Library/VirtualFolders, /Users and /System/ActivityLog/Entries. It never starts a task, never stops a playback and never changes a setting. Keep the key to a network you trust and put Jellyfin behind HTTPS across the internet.

  • No storage, library or user figures: storage needs Jellyfin 10.11 or later, and these calls are skipped (not an error) when the key cannot read them. A call that really fails raises scrape_errors.
  • “Library scan stale” never fires: it only watches a scan that has a periodic trigger; check Dashboard → Scheduled Tasks → Scan Media Library.
  • A task keeps failing: the error label of scheduled_task_failed carries the first line of Jellyfin’s message; the full trace is in the Jellyfin log.
  • Failed sign-ins stay at 0: they come from the activity log, which the key must be able to read; the figure covers the last hour only.
  • Unauthorized: the key was revoked or mistyped; create a new one under Dashboard → Advanced → API Keys.
CredentialFields
API keySent in the Authorization: MediaBrowser … Token="…" header, the form Jellyfin 10.11 and later accept by default.

Address: a host name (jellyfin.lan), host:port, or a full URL with a path prefix (https://example.com/jellyfin); a trailing /web is accepted. Options: protocol (HTTP by default), port (8096), certificate check and request timeout (15 s).

Validated against Jellyfin 12.1.0 (official image).