tutorial

Monitoring Libretime with Vigilmon

Libretime powers your community radio station — but a crashed Liquidsoap engine or a dead Icecast stream silences your broadcast. Here's how to monitor every Libretime component with Vigilmon.

Libretime is an open-source radio automation platform that handles scheduling, playout, and streaming for community radio stations. Its architecture is deliberately multi-component: a PHP/Symfony web application manages the schedule, Liquidsoap handles the actual audio playout engine, Icecast serves the live audio stream to listeners, and RabbitMQ coordinates internal messaging between services. When any one of these components fails, your broadcast may go silent — and listeners have no way to tell you. Vigilmon monitors every layer of your Libretime stack so you know the moment something breaks.

What You'll Set Up

  • Web application uptime monitor (port 80 / 443)
  • Icecast streaming server availability (port 8000)
  • API endpoint response time monitor
  • RabbitMQ management API health check
  • Liquidsoap process heartbeat
  • Stream output connectivity check
  • PostgreSQL connectivity probe via API

Prerequisites

  • Libretime installed and running (web app, Liquidsoap, Icecast, RabbitMQ, PostgreSQL all up)
  • Web UI accessible at http://yourhost or https://radio.yourdomain.com
  • Icecast listening on port 8000
  • A free Vigilmon account

Step 1: Monitor the Libretime Web Application

The web interface is how schedulers and admins interact with Libretime — show scheduling, upload management, and on-air display all live here.

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter your Libretime URL: https://radio.yourdomain.com (or http://yourhost).
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. Enable Monitor SSL certificate if using HTTPS, with expiry alert at 21 days.
  7. Click Save.

For a richer signal, monitor the login page directly:

https://radio.yourdomain.com/login

A 200 on the login page confirms that PHP-FPM, nginx, and the Symfony application layer are all functional.


Step 2: Monitor the Icecast Streaming Server

Icecast is what your listeners actually connect to. It runs on port 8000 and serves the live audio stream. If Icecast goes down, every listener gets disconnected.

TCP Port Check

  1. Click Add MonitorTCP Port.
  2. Host and port: yourhost:8000.
  3. Check interval: 1 minute.
  4. Click Save.

Icecast Status Page Check

Icecast exposes a status page at /status.xsl. Monitor it to confirm Icecast is serving responses:

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: http://yourhost:8000/status.xsl.
  3. Expected status: 200.
  4. Check interval: 2 minutes.
  5. Click Save.

Stream Mount Point Check

Most Libretime installations stream to a mount point like /main. Probe it directly to confirm the stream is actually broadcasting (not just that Icecast is running empty):

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: http://yourhost:8000/main (adjust to your mount point).
  3. Expected status: 200.
  4. Check interval: 2 minutes.
  5. Click Save.

A 404 or 503 on the mount point means Liquidsoap has disconnected from Icecast — the most common Libretime failure mode.


Step 3: Monitor the Libretime API

Libretime exposes a REST API for schedule data and system status. Probe it to confirm the PHP backend and PostgreSQL database are responding:

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: https://radio.yourdomain.com/api/v2/schedule/.
  3. Expected status: 200.
  4. Check interval: 2 minutes.
  5. Under Response validation, check that the response body contains "results" (a key in the schedule API response).
  6. Click Save.

An API failure while the web UI is up usually indicates a PostgreSQL connectivity problem — the API hits the database directly while the web UI may serve cached or static content.


Step 4: Monitor RabbitMQ Health

Libretime uses RabbitMQ to pass messages between its internal services. If RabbitMQ goes down, the playout scheduler can't communicate with Liquidsoap, causing shows to not start on time.

If you have the RabbitMQ management plugin enabled (default port 15672):

  1. Click Add MonitorHTTP / HTTPS.
  2. URL: http://yourhost:15672/api/healthchecks/node.
  3. Expected status: 200.
  4. Add HTTP Basic Auth credentials for your RabbitMQ management user.
  5. Check interval: 2 minutes.
  6. Click Save.

If the management UI is not exposed externally, use a TCP check on the AMQP port instead:

  1. Click Add MonitorTCP Port.
  2. Host and port: yourhost:5672.
  3. Check interval: 1 minute.
  4. Click Save.

Step 5: Heartbeat for Liquidsoap Playout Engine

Liquidsoap is the audio scheduler — it reads the show schedule from PostgreSQL, pulls audio files, and pushes them to Icecast. It runs as a long-lived process with no HTTP interface. Use a heartbeat to confirm it's alive and running scheduled shows.

  1. Click Add MonitorCron Heartbeat.
  2. Set expected interval to 5 minutes.
  3. Copy the heartbeat URL.
  4. Add a ping to your Liquidsoap startup script or a wrapper:
#!/bin/bash
# /opt/libretime/liquidsoap-probe.sh
# Run as a cron job every 5 minutes

if systemctl is-active --quiet libretime-liquidsoap; then
  curl -s https://vigilmon.online/heartbeat/YOUR_HEARTBEAT_ID
fi

Schedule it:

*/5 * * * * /opt/libretime/liquidsoap-probe.sh

If Liquidsoap crashes (common after audio file corruption or buffer underruns), the heartbeat stops pinging and Vigilmon alerts within 5 minutes.


Step 6: Monitor Podcast Import Worker Health

Libretime's podcast import worker fetches and ingests podcast RSS feeds on a schedule. Use a heartbeat to confirm it's executing:

  1. Add a Cron Heartbeat with expected interval matching your podcast import schedule (e.g., 60 minutes).
  2. Copy the heartbeat URL.
  3. Modify the import worker script or add an exec hook:
# After successful podcast import
curl -s https://vigilmon.online/heartbeat/YOUR_PODCAST_HEARTBEAT_ID

Step 7: Configure Alert Channels

  1. Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
  2. For the Icecast stream mount point monitor, set Consecutive failures before alert to 1 — a disconnected stream is always an emergency.
  3. For the web UI and API monitors, set threshold to 2 to absorb brief PHP-FPM restarts.
  4. Use Maintenance windows during scheduled Libretime upgrades to suppress expected downtime alerts.

Summary

| Monitor | Target | What It Catches | |---|---|---| | Web application (HTTP) | https://radio.yourdomain.com | PHP/Symfony down, nginx crash | | Icecast port (TCP) | yourhost:8000 | Icecast process crash | | Icecast status page | /status.xsl | Icecast misconfiguration | | Stream mount point | /main | Liquidsoap disconnected from Icecast | | Libretime API | /api/v2/schedule/ | PostgreSQL connectivity, PHP errors | | RabbitMQ | :15672/api/healthchecks/node | Message broker down | | Liquidsoap (heartbeat) | Heartbeat URL | Playout engine crash | | Podcast worker (heartbeat) | Heartbeat URL | Import job not running |

Libretime's multi-process architecture means a single component failure can silence your broadcast while other components appear healthy. With Vigilmon monitoring Icecast, Liquidsoap, RabbitMQ, the API, and your podcast workers independently, you get precise failure location — not just a report that "radio is down."

Monitor your app with Vigilmon

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

Start free →