How to monitor Plex from outside your network
Updated Aug 19, 2026
The classic Plex failure is not a crash. It is the server streaming happily to the living room TV while everyone outside the house gets a spinner, and nobody finds out until a family member gives up and texts you.
Why Plex needs a second opinion
Plex reports on itself from inside the box. The Remote Access panel will admit it is unavailable, but you have to be looking at it, and it is testing the same path that is broken. What you care about is whether a phone on cellular data can start a stream.
- Your router dropped the port forward after a firmware update, so remote access falls back to relay and then stops.
- The ISP rotated your WAN address and dynamic DNS did not update, so your hostname points at a stranger.
- The Plex database corrupted mid scan and the server restarts in a loop, which local clients paper over with cached metadata.
- The NAS holding the library went offline. Plex is running, answering, and serving an empty library.
None of that is visible from the same LAN. It is visible from the internet, which is where the people complaining are.
The endpoint to check
Plex Media Server listens on TCP 32400. There is no official /health route, and inventing one is a good way to get a check that always passes. What exists, and what the open source monitoring tooling has converged on, is /identity.
GET /identity is one of the very few Plex endpoints that answers without an X-Plex-Token. It returns a MediaContainer element carrying machineIdentifier and version. A keyword check on machineIdentifier proves the server is up, serving, and identifying itself, rather than a proxy returning an error page.
| Target | Token required | Proves |
|---|---|---|
| /identity | No | Server is running and answering |
| /status/sessions | Yes, X-Plex-Token | Sessions API and auth are alive |
| /library/sections | Yes, X-Plex-Token | Libraries are mounted and readable |
| TCP 32400 | No | Port is open and reachable |
The authenticated endpoints tell you more. A check against /library/sections catches the case where Plex is up but a NAS mount vanished and every section with it. Send the token as an encrypted custom request header rather than a query string, so it stays out of access logs. Plex documents how to retrieve a token from a signed in web session in its support article on finding an authentication token.
If Plex is reachable from the internet
Most Plex installs are, because that is the entire point. Check the exact hostname your users type, not the LAN address:
curl -fsS 'https://plex.example.com/identity'
# <MediaContainer size="0" claimed="1" machineIdentifier="..." version="..." />
Configure that as a keyword check on machineIdentifier with a confirmation threshold of two, so a blip during a library scan does not page you. On a custom domain, add an SSL check: expired certificates turn every remote client into a connection error, and escalating expiry warnings prevent it.
A direct port forward deserves a TCP check on 32400 too. It fails loudly when the forward evaporates, and it tells a network problem apart from an application one when both checks go red together.
If you keep Plex off the public internet
Some people run Plex strictly over a VPN. Invert the direction: have the server report in on a schedule, and let the absence of a report be the alert.
*/2 * * * * curl -fsS -m 10 https://undownable.com/ping/your-monitor-id > /dev/null
That proves the host is alive, but it keeps pinging while Plex is dead. Gate it on the local /identity response:
*/2 * * * * curl -fsS -m 10 http://127.0.0.1:32400/identity > /dev/null \
&& curl -fsS -m 10 https://undownable.com/ping/your-monitor-id > /dev/null
Plex stops answering, the ping stops arriving, and the heartbeat monitor raises an incident once the expected interval passes. Set that interval to roughly two and a half times the cron period so one lost run is tolerated and two are not.
Running Plex in Docker on a NAS? Point the probe at the published port on the host and put the cron entry on the host, so a container that stopped entirely still fails the probe.
Getting the alert when the house is dark
If your notification path runs through the same house as Plex, the outage silences the alarm. Undownable delivers from outside, so the channel choice is what matters:
- ntfy, self hosted or hosted, using an access token beginning with tk_ sent as a bearer token and stored encrypted. Just do not host it on the rack that lost power.
- Telegram, the reliable answer when your ntfy server shares a UPS with Plex.
- Email as the boring fallback, or Discord if the household already lives in one.
Add a status page and point the family at it. Half the value of monitoring Plex is not being the person who has to answer whether the server is down.
Does Plex have a health check endpoint?
No. Plex ships no documented /health route. The unauthenticated /identity endpoint on port 32400 is the accepted substitute: it returns a MediaContainer with machineIdentifier and version, which makes a solid keyword check.
Do I need an X-Plex-Token for monitoring?
Not for /identity, which answers without one. You do need a token for /status/sessions and /library/sections. Put it in a custom request header so it stays encrypted at rest and out of logs.
Can I check whether remote streaming actually works?
Not without playing media, but checking the public hostname from outside covers what breaks it: dead port forwards, stale dynamic DNS, expired certificates, and a server that stopped answering.
How many monitors does a Plex setup need?
Two or three: an external keyword check on /identity at the public hostname, an SSL check if you use your own domain, and optionally a gated heartbeat. That fits inside the free plan.
Related reading
Monitoring that watches from the outside
Free plan with 10 monitors, plus a 14-day Pro trial. No credit card required.
Start free