tutorial

Monitoring Actual Budget with Vigilmon: Health Endpoint, Web UI, Sync Server & SSL Alerts

How to monitor Actual Budget self-hosted personal finance with Vigilmon — health endpoint, web UI availability, sync server availability, and SSL certificate alerts.

Actual Budget is the self-hosted personal finance application that gives you full control over your budget data — no subscriptions, no cloud dependencies, everything stored locally. The self-hosted deployment consists of a Node.js sync server that stores your budget files and a web client that syncs against it. If the sync server goes down, budget changes made on one device won't reach another. If the server disk fills up, sync writes fail silently. If the SSL certificate expires, the web client can't establish the HTTPS connection needed to sync. Vigilmon gives you external visibility into Actual Budget's health endpoint, web UI, sync server, and SSL certificate so you notice problems before they cause data inconsistency.

What You'll Build

  • An HTTP monitor on Actual Budget's health endpoint
  • An HTTP monitor verifying web UI availability
  • An HTTP monitor checking sync server availability
  • SSL certificate monitoring for your Actual Budget domain

Prerequisites

  • A running Actual Budget server instance with a public or network-reachable domain
  • HTTPS configured (e.g., https://budget.example.com)
  • A free account at vigilmon.online

Step 1: Verify Actual Budget's Health Endpoint

Actual Budget's server exposes a health check endpoint that confirms the Node.js process is running and ready to serve requests:

curl https://budget.example.com/health

A healthy Actual Budget server returns HTTP 200 with a plain text or JSON body such as:

{"status":"ok"}

Some versions return just "OK" as plain text. Either response confirms the sync server process is running and listening for connections.

# Check both status and body
curl -s -o /dev/null -w "%{http_code}" https://budget.example.com/health

This endpoint requires no authentication and is safe to poll from an external monitoring service.

Port note: Actual Budget's default port is 5006. If you're not running a reverse proxy, your health check URL would be https://budget.example.com:5006/health. With a reverse proxy (Nginx, Caddy, Traefik), port 443 is standard.


Step 2: Create a Vigilmon HTTP Monitor for the Health Endpoint

  1. Log in to VigilmonAdd Monitor → HTTP.
  2. URL: https://budget.example.com/health.
  3. Check interval: 60 seconds.
  4. Response timeout: 15 seconds.
  5. Expected status: 200.
  6. Keyword: ok.
  7. Click Save.

This monitor catches:

  • Actual Budget server process crashes or out-of-memory kills
  • Container or VM restarts that leave the service stopped
  • Network issues preventing external connections to your server
  • Node.js process failures after package updates

Step 3: Monitor Web UI Availability

Actual Budget's web client is served as a static single-page application from the same server. The UI can fail to load even when the health endpoint returns 200 — for example, if static files were corrupted, if the Node.js static file handler has a misconfiguration, or if a Content Security Policy header blocks the app from loading.

curl -I https://budget.example.com/

A healthy Actual Budget web UI returns HTTP 200 with HTML that includes Actual in the title or body.

  1. Add Monitor → HTTP.
  2. URL: https://budget.example.com/.
  3. Check interval: 2 minutes.
  4. Expected status: 200.
  5. Keyword: Actual.
  6. Label: Actual Budget Web UI.
  7. Click Save.

When the web UI monitor fires but the health endpoint is green, you have a static file serving issue. Check whether the public/ directory is intact and whether the Node.js server has read access to it.


Step 4: Monitor Sync Server Availability

The sync server endpoint is what Actual Budget clients (web and desktop) use to push and pull budget changes. Even if the general health endpoint is green and the web UI loads, the sync endpoint can fail if the data directory isn't writable, if a budget file is locked, or if the server is running out of disk space.

curl https://budget.example.com/sync

The sync endpoint returns HTTP 200 for a GET request to indicate it's ready to accept sync connections (actual syncing uses POST with authentication). An error or timeout here means your budget data across devices will fall out of sync.

  1. Add Monitor → HTTP.
  2. URL: https://budget.example.com/sync.
  3. Check interval: 3 minutes.
  4. Expected status: 200.
  5. Label: Actual Budget Sync Server.
  6. Click Save.

Why monitor sync separately: The most common failure mode for Actual Budget is disk-full on the data volume. The health endpoint keeps returning 200 while the sync endpoint starts returning 500s because budget file writes fail. An independent sync monitor catches this class of failure that the health check misses.


Step 5: Monitor SSL Certificates

Actual Budget's sync protocol requires HTTPS — the client will not sync over plain HTTP. An expired SSL certificate means all sync operations fail across every device you use for budgeting, and budget data diverges silently until you notice your transactions are missing.

  1. Add Monitor → SSL Certificate.
  2. Domain: budget.example.com.
  3. Alert when expiry is within: 30 days.
  4. Alert again: 14 days, 7 days, 3 days, 1 day.
  5. Click Save.

For a self-hosted personal finance tool, certificate renewal is particularly easy to forget — it's not checked daily and there's no user-facing error until the certificate actually expires and sync breaks. A 30-day Vigilmon alert ensures you have plenty of time to renew.


Step 6: Configure Alerting

In Vigilmon under Settings → Notifications, configure your alert channels:

| Monitor | Trigger | Action | |---|---|---| | /health | Non-200 or keyword missing | Check server process; restart Actual Budget service; check container logs | | Web UI | Non-200 or keyword missing | Check static file directory; verify Node.js file serving config | | /sync | Non-200 | Check data directory disk space; verify write permissions on budget files | | SSL certificate | < 30 days to expiry | Renew certificate; check Let's Encrypt or ACME client config |

Alert after: 2 consecutive failures for HTTP monitors. 1 failure for SSL monitors.


Common Actual Budget Failure Modes and What Vigilmon Catches

| Scenario | Vigilmon monitor | |---|---| | Node.js process crash | Health endpoint unreachable; alert within 60 s | | Server reboots with no autostart | All monitors fire simultaneously | | Data directory full | Sync monitor fires; health endpoint stays green | | Static files missing | Web UI monitor fires; health and sync stay green | | SSL certificate expires | SSL monitor alerts at 30 days; all client sync fails | | Budget file corruption | Sync returns 500; specific to affected budget file | | Reverse proxy misconfiguration | All HTTP monitors fire; SSL monitor may stay green | | Memory exhaustion on small VPS | Health endpoint times out; Node.js OOM killed |


Actual Budget is where your financial data lives — transaction history, category budgets, savings goals, and monthly spending records. Vigilmon watches the health endpoint, web UI, sync server, and SSL certificate so you know the moment Actual Budget has a problem, before you discover your budget transactions from the past week haven't synced across your devices.

Start monitoring Actual Budget in under 5 minutes — register 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 →