tutorial

Monitoring Sunshine Game Streaming Server with Vigilmon

Sunshine is a self-hosted open-source game streaming server for Moonlight clients — with a web dashboard, streaming ports, GPU encoder pipeline, and client pairing all running on your gaming PC. Here's how to monitor every layer with Vigilmon.

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:

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter https://your-sunshine-host:47990 (use http:// if you haven't set up TLS).
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. If using a self-signed certificate, enable Ignore SSL errors in the monitor settings.
  7. 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:

  1. Click Add MonitorTCP.
  2. Host: your-sunshine-host, Port: 47984.
  3. Check interval: 2 minutes.
  4. 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:

  1. Click Add MonitorTCP.
  2. Host: your-sunshine-host, Port: 47989.
  3. Check interval: 2 minutes.
  4. 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:

  1. Click Add MonitorCron Heartbeat.
  2. Expected interval: 5 minutes.
  3. 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:

  1. Click Add MonitorPing.
  2. Host: your-sunshine-host (internal LAN IP or hostname).
  3. Check interval: 2 minutes.
  4. Set Response time threshold: 20ms for local LAN, 80ms for remote/WAN streaming.
  5. 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

  1. In Vigilmon, go to Alert ChannelsAdd Channel.
  2. Add email, Slack (paste your incoming webhook URL), or a push notification service.
  3. For the web dashboard monitor, set Consecutive failures before alert to 2 — Sunshine can briefly restart after a driver update.
  4. For port 47984 and 47989 monitors, set to 1 — unreachable streaming ports need immediate attention.
  5. 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.

Monitor your app with Vigilmon

Free plan — 5 monitors, no credit card required. Up and running in 60 seconds.

Start free →