Sunshine is an open-source game streaming server designed to work with the Moonlight client. It runs on your gaming PC or server and streams your desktop at low latency to phones, tablets, TVs, or other computers. Sunshine has more moving parts than it appears: a web management dashboard, RTSP control channels, video and audio streaming ports, a GPU encoder pipeline, and a client pairing mechanism. Any of these can fail independently. Vigilmon lets you watch the dashboard, streaming ports, encoder health, and network connectivity from a single dashboard so you know immediately when your game streaming setup breaks.
What You'll Set Up
- HTTP uptime monitoring for the web dashboard (port 47990)
- Streaming control port availability (port 47984)
- Video streaming port health (port 47989)
- GPU encoder status via heartbeat
- Network latency monitoring for the streaming host
- Instant alerts for any failure
Prerequisites
- Sunshine running on a Windows, Linux, or macOS host
- A free Vigilmon account
Why Sunshine Monitoring Matters
Sunshine failure modes are subtle. The process can be running while specific components are broken, and you won't notice until you try to connect with Moonlight from across the house or while travelling:
- Web dashboard down — you can't change settings, pair new clients, or view logs; streaming may still work but you're flying blind
- Control port unavailable (47984) — Moonlight can't initiate sessions; all streaming attempts fail at connection time
- Streaming port unreachable (47989) — sessions start but the video/audio stream can't be established; clients connect then immediately drop
- GPU encoder failure — Sunshine can't encode frames; streaming sessions fail with encoding errors or blank screens
- High network latency — not a hard failure but causes input lag and video artifacts; worth knowing about before you blame the client or network equipment
- Process crash — Sunshine exits silently; there's no system tray notification and no obvious error until you try to connect
Each of these produces a different error on the Moonlight side. Monitoring the system proactively is far better than diagnosing from a failed session.
Step 1: Monitor the Web Dashboard
Sunshine's web management interface runs on port 47990 (HTTPS by default). Add an HTTP monitor to confirm the dashboard is up:
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - Enter
https://your-sunshine-host:47990(usehttp://if you haven't set up TLS). - Set Check interval to
1 minute. - Set Expected HTTP status to
200. - If using a self-signed certificate, enable Ignore SSL errors in the monitor settings.
- Click Save.
The dashboard being up is a strong signal that the Sunshine process itself is running. A process crash takes the dashboard down immediately.
Step 2: Monitor the Streaming Control Port
Moonlight uses port 47984 (TCP) to negotiate and initiate streaming sessions. If this port is unreachable, no streaming session can start — Moonlight will report a connection failure before a single frame is streamed.
Add a TCP connectivity monitor:
- Click Add Monitor → TCP.
- Host:
your-sunshine-host, Port:47984. - Check interval:
2 minutes. - Save.
This monitor catches firewall rule changes, port conflicts, and Sunshine crashes that don't bring down the web dashboard. It's one of the most valuable monitors in this setup because it directly mirrors what Moonlight tries first.
Step 3: Monitor the Video Streaming Port
The main video and audio stream is carried over port 47989 (TCP/UDP). A TCP connectivity check confirms the port is open and accepting connections:
- Click Add Monitor → TCP.
- Host:
your-sunshine-host, Port:47989. - Check interval:
2 minutes. - Save.
Note that actual streaming uses both TCP and UDP on this port. A TCP probe confirms the port is open; UDP reachability depends on your network and firewall configuration. If you experience streaming sessions that connect but immediately drop, check both the TCP monitor result and your UDP firewall rules.
For a comprehensive port sweep, also add monitors for the additional ports Sunshine uses:
- Port
47998(TCP) — Moonlight control channel - Port
48010(TCP) — RTSP
Step 4: Monitor GPU Encoder Status via Heartbeat
Sunshine's GPU encoder pipeline is the component most likely to fail silently. If the encoder fails (driver crash, GPU OOM, encoder feature unavailable), Sunshine may still accept connections but produce blank screens or immediately drop sessions.
Use a cron-driven Vigilmon heartbeat that queries Sunshine's log or health status:
In Vigilmon:
- Click Add Monitor → Cron Heartbeat.
- Expected interval:
5 minutes. - Copy the heartbeat URL.
On Linux hosts, add a script that checks for encoder errors in the Sunshine log:
# /etc/cron.d/sunshine-encoder-check
*/5 * * * * root \
! journalctl -u sunshine --since "6 minutes ago" | grep -qi "encoder.*fail\|nvenc.*error\|vaapi.*error" && \
curl -s https://vigilmon.online/heartbeat/YOUR_HEARTBEAT_TOKEN
On Windows hosts, use Task Scheduler to run a PowerShell script:
# Check Sunshine event log for encoder errors in the last 6 minutes
$errors = Get-WinEvent -LogName Application -ErrorAction SilentlyContinue |
Where-Object { $_.ProviderName -like '*sunshine*' -and $_.Level -le 2 -and
$_.TimeCreated -gt (Get-Date).AddMinutes(-6) }
if (-not $errors) {
Invoke-WebRequest -Uri "https://vigilmon.online/heartbeat/YOUR_HEARTBEAT_TOKEN" -Method GET
}
If encoder errors appear or the script fails, the heartbeat stops pinging and Vigilmon alerts you.
Step 5: Monitor Network Latency to the Streaming Host
Streaming latency is a quality metric, not just a binary up/down signal. High round-trip latency to the Sunshine host causes input lag even when everything is technically functioning. A latency spike before a gaming session is worth knowing about.
Add an ICMP ping monitor:
- Click Add Monitor → Ping.
- Host:
your-sunshine-host(internal LAN IP or hostname). - Check interval:
2 minutes. - Set Response time threshold:
20msfor local LAN,80msfor remote/WAN streaming. - Save.
This gives you a baseline latency graph over time. When streaming quality degrades, check this graph first — a latency spike here before the session degraded points to network issues, not Sunshine configuration.
Step 6: Configure Alert Channels
- In Vigilmon, go to Alert Channels → Add Channel.
- Add email, Slack (paste your incoming webhook URL), or a push notification service.
- For the web dashboard monitor, set Consecutive failures before alert to
2— Sunshine can briefly restart after a driver update. - For port 47984 and 47989 monitors, set to
1— unreachable streaming ports need immediate attention. - Enable the alert channel on all monitors.
Alert example:
🔴 DOWN: sunshine-host:47984 (TCP)
Status: Connection refused
Detected: 2 minutes ago
Summary
| Monitor | Target | What It Catches |
|---|---|---|
| Web dashboard | :47990 HTTPS | Sunshine process crashed |
| Control port | :47984 TCP | Session initiation broken |
| Streaming port | :47989 TCP | Video/audio stream unavailable |
| Encoder heartbeat | Cron heartbeat | GPU encoder failure, driver crash |
| Network latency | ICMP ping | Latency spikes, routing changes |
Sunshine gives you low-latency game streaming on your own hardware. Vigilmon makes sure the dashboard, streaming ports, and GPU encoder stay healthy — so your Moonlight session is ready when you are.
Get started free at vigilmon.online.