tutorial

Monitoring Bluecherry NVR with Vigilmon

Bluecherry is an open-source NVR with hardware capture card support — but the bc-server recording daemon can fail silently. Here's how to monitor Bluecherry's web UI, system API, recording streams, and SSL health with Vigilmon.

Bluecherry is an open-source NVR and IP camera management platform built on C and PHP, deployed on Debian and Ubuntu servers. It's one of the few open-source NVR solutions that supports hybrid analog+IP camera setups — combining RTSP stream recording for IP cameras with direct PCI-E hardware capture card support for legacy analog cameras. It's widely used by security integrators and businesses that need H.264/H.265 hardware decode, web UI playback, and physical capture card support in a single self-hosted platform. But the bc-server recording daemon that handles stream ingest can exit silently, leaving the web UI responsive while no video is actually being recorded. Vigilmon gives you continuous verification that Bluecherry's web server, system API, recording daemon, and SSL certificates are all healthy.

What You'll Set Up

  • HTTP uptime monitor for the Bluecherry web UI (port 7001 login page)
  • REST API health check for the Bluecherry system info endpoint
  • TCP port monitor for Bluecherry's web server availability
  • SSL certificate alerts for HTTPS Bluecherry deployments
  • Cron heartbeat to confirm the bc-server recording daemon is active

Prerequisites

  • Bluecherry NVR installed and running on Debian or Ubuntu (port 7001)
  • At least one camera or capture device configured and recording
  • A free Vigilmon account

Step 1: Monitor the Bluecherry Web UI

Bluecherry's web interface is served on port 7001. The login page at /login.php is the primary availability indicator — if PHP-FPM, the Bluecherry web service, or the underlying Apache/Nginx instance fails, this page will become unreachable.

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter the URL: http://your-bluecherry-host:7001/login.php
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. Click Save.

For HTTPS deployments (Bluecherry supports self-signed and Let's Encrypt certificates):

https://nvr.yourdomain.com:7001/login.php

Or if behind a reverse proxy on the standard HTTPS port:

https://nvr.yourdomain.com/login.php

This catches web server crashes, PHP failures, and host-level network issues within the first monitoring cycle.


Step 2: Check the Bluecherry System Info API

Bluecherry provides a REST API (v2) that exposes system status, camera information, and recording metadata. The /api/v2/system/info.json endpoint returns a JSON object with system status details and confirms that the Bluecherry application layer is healthy.

http://your-bluecherry-host:7001/api/v2/system/info.json

A successful response includes version, status, and system resource information:

{
  "status": "OK",
  "version": "3.1.2",
  "cpu_usage": 12.5,
  "disk_usage": 45.2
}

Add a Vigilmon HTTP monitor for this endpoint:

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter http://your-bluecherry-host:7001/api/v2/system/info.json.
  3. Set Check interval to 2 minutes.
  4. Under Response body check, enter "status" to confirm the JSON response is valid.
  5. Set Expected HTTP status to 200.
  6. Click Save.

The API layer depends on the bc-server process being accessible to the web application. An API failure while the login page is still returning 200 indicates a partial failure of Bluecherry's backend services — an important distinction this separate probe catches.


Step 3: TCP Port Monitor for Web Server Health

A TCP-level check on port 7001 confirms that Bluecherry's web server is accepting connections at the network layer, independently of application-level HTTP responses.

  1. Click Add MonitorTCP Port.
  2. Enter your Bluecherry host address.
  3. Set Port to 7001.
  4. Set Check interval to 1 minute.
  5. Click Save.

If your Bluecherry deployment is behind a reverse proxy with a different external port (80 or 443), add the TCP monitor for the external port as well. A TCP failure is typically faster to diagnose than an HTTP failure and confirms whether the issue is at the network layer (firewall rule, service crash) or the application layer (PHP error, config fault).


Step 4: SSL Certificate Alerts for HTTPS Deployments

Bluecherry supports HTTPS configuration directly through its web server configuration. Certificates can be self-signed (for LAN-only deployments) or Let's Encrypt-issued for internet-accessible installations. Certificate expiry is particularly common on NVR systems that receive less frequent maintenance attention than application servers.

Enable SSL monitoring on the web UI monitor from Step 1:

  1. Open the Bluecherry web UI monitor in Vigilmon.
  2. Enable Monitor SSL certificate.
  3. Set Alert when certificate expires in less than 21 days.
  4. Click Save.

For deployments with self-signed certificates, Vigilmon will still track the certificate expiry date even if the certificate is not browser-trusted — this is useful for monitoring the renewal cycle of internally managed certificates.

Sample Nginx reverse proxy configuration for Bluecherry with Let's Encrypt:

server {
    listen 443 ssl;
    server_name nvr.yourdomain.com;

    ssl_certificate     /etc/letsencrypt/live/nvr.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nvr.yourdomain.com/privkey.pem;

    location / {
        proxy_pass         http://localhost:7001;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto https;
        proxy_read_timeout 120s;
    }
}

A 21-day alert window provides enough lead time to renew before expiry:

sudo certbot renew --force-renewal --nginx

Step 5: Heartbeat Monitoring for the bc-server Recording Daemon

The core of Bluecherry is the bc-server daemon, which handles all stream ingest from IP cameras and hardware capture cards. The web UI and API can remain responsive while bc-server has exited, leaving cameras appearing online in the interface but not actually recording.

Use Vigilmon's cron heartbeat with a script that checks the streaming API to confirm recording streams are active:

  1. In Vigilmon, click Add MonitorCron Heartbeat.
  2. Set the expected ping interval to 5 minutes.
  3. Copy the heartbeat URL (e.g. https://vigilmon.online/heartbeat/abc123).

Create a check script on the Bluecherry host:

#!/bin/bash
# /usr/local/bin/check-bluecherry-daemon.sh

BC_HOST="http://localhost:7001"
HEARTBEAT_URL="https://vigilmon.online/heartbeat/abc123"

# Check if bc-server process is running
BC_PID=$(pgrep -x bc-server)

if [ -n "$BC_PID" ]; then
  # Optionally verify via the stream API
  STREAM_STATUS=$(curl -sf "${BC_HOST}/api/v2/stream.php?limit=1" \
    | jq -r '.status // empty' 2>/dev/null)

  # Ping heartbeat if process is running
  curl -sf "$HEARTBEAT_URL" > /dev/null
fi

Make it executable and schedule it:

chmod +x /usr/local/bin/check-bluecherry-daemon.sh

Add to crontab:

*/5 * * * * /usr/local/bin/check-bluecherry-daemon.sh

For a more thorough check that also verifies stream endpoints are accessible, query the Bluecherry camera list API and confirm at least one camera shows an active recording status:

#!/bin/bash
# Extended check using the camera API

BC_HOST="http://localhost:7001"
HEARTBEAT_URL="https://vigilmon.online/heartbeat/abc123"

ACTIVE_CAMERAS=$(curl -sf "${BC_HOST}/api/v2/cameras.json" \
  | jq '[.cameras[] | select(.status == "Recording")] | length' 2>/dev/null)

if [ "${ACTIVE_CAMERAS:-0}" -gt "0" ]; then
  curl -sf "$HEARTBEAT_URL" > /dev/null
fi

Adjust the API path to match your Bluecherry version — the v2 API structure can vary between community and commercial releases. Check your Bluecherry admin panel under System → API Documentation for the exact endpoint paths available in your installation.


Step 6: Configure Alert Channels

  1. Go to Alert Channels in Vigilmon and connect Slack, email, or a webhook to your NVR monitoring group.
  2. Set Consecutive failures before alert to 2 on the web UI and API monitors — Bluecherry occasionally takes 30–60 seconds to recover from database queries or hardware capture card interrupts.
  3. For the heartbeat monitor, set the alert threshold to 1 missed ping — a single missed 5-minute heartbeat means the bc-server daemon may be down.

Summary

| Monitor | Target | What It Catches | |---|---|---| | Web UI | http://host:7001/login.php | Web server crash, PHP failure | | System API | /api/v2/system/info.json | API fault, backend service failure | | TCP Port | Host port 7001 | Web server down, firewall change | | SSL Certificate | https://nvr.yourdomain.com | Certificate expiry, renewal failure | | Cron Heartbeat | Vigilmon heartbeat URL | bc-server crash, recording stalled |

Bluecherry's hybrid analog+IP camera support makes it unique in the open-source NVR space — but that breadth of hardware compatibility also means more failure modes to watch: capture card driver issues, stream ingest errors, and the bc-server daemon exiting under load. With Vigilmon watching Bluecherry's web UI, system API, and recording daemon heartbeat, you'll catch failures immediately rather than discovering blank footage after a security incident.

Monitor your app with Vigilmon

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

Start free →