SuiteCRM is the world's most popular open-source CRM platform — a feature-rich, AGPL-3.0-licensed fork of SugarCRM Community Edition used by businesses of all sizes as a self-hosted alternative to Salesforce, HubSpot, and Zoho CRM. When you self-host SuiteCRM, you take on full operational responsibility: a CRM outage silences your sales team, stalls support tickets, and breaks automated email campaigns that your business depends on.
This tutorial walks you through setting up comprehensive monitoring for a self-hosted SuiteCRM installation using Vigilmon, so you know the moment anything breaks — before your team does.
Why monitoring SuiteCRM matters
SuiteCRM is a PHP/MySQL application with several interdependent layers, each of which can fail independently:
- Web server / PHP-FPM failure — Apache or Nginx stops serving requests; users get 502 or 503 errors
- MySQL/MariaDB connectivity loss — PHP connects but the database refuses queries; SuiteCRM returns blank pages or SQL errors
- REST API v8 unavailability — integrations relying on the JSON API lose access to contacts, accounts, and opportunities
- Scheduler task stoppage — the cron-driven SuiteCRM scheduler stops running, silently halting email campaign delivery, workflow execution, and scheduled reports
- Session or authentication failure — login page loads but authentication always fails due to a corrupted session store or misconfigured
site_url
External monitoring from Vigilmon checks each layer from the outside, the same way your users and integrations do.
What you'll need
- A running self-hosted SuiteCRM instance (Linux/Apache or Docker)
- A free Vigilmon account — no credit card required
- Your SuiteCRM public URL (e.g.
https://crm.yourdomain.com)
Step 1: Monitor the SuiteCRM web UI availability
The first check confirms that your web server and PHP runtime are serving the SuiteCRM application at all.
- Log in to vigilmon.online and go to Monitors → New Monitor
- Choose HTTP / HTTPS
- Set the URL to:
https://crm.yourdomain.com/index.php - Check interval: 1 minute
- Expected status code:
200 - Save the monitor
SuiteCRM's index.php is the application entry point. A successful 200 response confirms Apache/Nginx is running, PHP-FPM is processing requests, and the application bootstrap is completing without a fatal error.
Step 2: Monitor the login page (full application stack check)
The login page is the deepest smoke-test you can run without authentication — it exercises PHP, the MySQL connection, and the session subsystem together.
- Create a new HTTP / HTTPS monitor
- URL:
https://crm.yourdomain.com/index.php?module=Users&action=Login - Check interval: 2 minutes
- Expected status code:
200 - (Optional) Response body contains:
SuiteCRMorUser Name - Save the monitor
If MySQL becomes unreachable or the SuiteCRM configuration is corrupted, this page will fail to render — catching failures that the bare /index.php check might miss.
Step 3: Monitor the REST API v8 endpoint
SuiteCRM's REST API v8 is the integration backbone. Third-party tools, mobile apps, and custom automations rely on it. If the API goes down, integrations fail silently.
- Create a new HTTP / HTTPS monitor
- URL:
https://crm.yourdomain.com/api/v8/ - Check interval: 2 minutes
- Expected status code:
200 - (Optional) Response body contains:
jsonapi - Save the monitor
The /api/v8/ endpoint returns JSON API metadata even without authentication, confirming that the API layer, routing, and JSON serialization stack are all operational.
Step 4: Monitor SSL certificate expiry
HTTPS SuiteCRM deployments must have a valid TLS certificate — an expired certificate locks out every user and integration simultaneously.
- Create a new SSL Certificate monitor in Vigilmon
- Domain:
crm.yourdomain.com - Alert thresholds:
- Warning: 30 days before expiry
- Critical: 7 days before expiry
- Save the monitor
Vigilmon will send an alert in time to renew before expiry, whether you're using Let's Encrypt with auto-renewal or a manually managed certificate.
Step 5: Monitor SuiteCRM scheduler tasks with a heartbeat
SuiteCRM uses a cron-based scheduler (cron.php) to execute automated workflows, send email campaigns, run scheduled reports, and process queue items. If the cron job stops running — due to a misconfigured crontab, a PHP memory limit error, or a disk-full condition — tasks silently accumulate without error messages.
Create a Vigilmon heartbeat monitor
- In Vigilmon, go to Monitors → New Monitor
- Choose Heartbeat / Cron Job
- Name it
SuiteCRM Scheduler - Set the expected interval to 5 minutes (or match your cron schedule)
- Copy the generated heartbeat URL — it will look like:
https://vigilmon.online/heartbeat/YOUR_TOKEN - Save the monitor
Configure the SuiteCRM cron job to ping Vigilmon
Add or update the SuiteCRM cron entry in /etc/cron.d/suitecrm or the www-data crontab:
* * * * * www-data cd /var/www/html/suitecrm && php -f cron.php > /dev/null 2>&1 && curl -fsS --retry 3 https://vigilmon.online/heartbeat/YOUR_TOKEN > /dev/null
The && ensures Vigilmon is only pinged when the PHP cron script exits successfully. If cron.php crashes or returns a non-zero exit code, the heartbeat is not sent and Vigilmon will alert you after the missed interval.
Alternative: Monitor via the SuiteUpdates entry point
If you prefer an HTTP health probe instead of a heartbeat, monitor the SuiteUpdates entry point which the scheduler populates:
- Create an HTTP / HTTPS monitor
- URL:
https://crm.yourdomain.com/index.php?entryPoint=SuiteUpdates - Expected status code:
200 - Check interval: 10 minutes
Step 6: Configure alert channels
- In Vigilmon, go to Alert Channels → Add Channel
- Add your preferred notification channels:
- Slack — route CRM outage alerts to your
#operationsor#sales-alertschannel - Email — notify the CRM administrator and sales team lead
- PagerDuty or webhooks — for on-call escalation if SuiteCRM is customer-facing
- Slack — route CRM outage alerts to your
Recommended alert tiers:
| Tier | Trigger | Channel | |------|---------|---------| | Immediate | Login page or API unavailable | Slack + email + pager | | Warning | Scheduler heartbeat missed | Slack + email | | Maintenance | SSL expiry within 30 days | Email |
Step 7: Set up a Docker Compose deployment with health checks
If you're running SuiteCRM with Docker, add container-level health checks:
version: "3.9"
services:
suitecrm:
image: bitnami/suitecrm:latest
ports:
- "80:8080"
- "443:8443"
environment:
SUITECRM_DATABASE_HOST: mariadb
SUITECRM_DATABASE_NAME: suitecrm
SUITECRM_DATABASE_USER: suitecrm
SUITECRM_DATABASE_PASSWORD: ${DB_PASSWORD}
depends_on:
mariadb:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/index.php"]
interval: 30s
timeout: 15s
retries: 3
start_period: 120s
restart: unless-stopped
mariadb:
image: mariadb:10.11
environment:
MARIADB_ROOT_PASSWORD: ${ROOT_PASSWORD}
MARIADB_DATABASE: suitecrm
MARIADB_USER: suitecrm
MARIADB_PASSWORD: ${DB_PASSWORD}
volumes:
- suitecrm_db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
suitecrm_db:
The Docker health checks restart unhealthy containers automatically; Vigilmon measures how long each outage lasted and alerts you so you have an audit trail.
Complete monitor setup summary
| Monitor | Type | Target | Interval | Catches |
|---------|------|--------|----------|---------|
| Web UI availability | HTTP | /index.php | 1 min | Web server / PHP crash |
| Login page stack | HTTP | /index.php?module=Users&action=Login | 2 min | MySQL, PHP, session failure |
| REST API v8 | HTTP | /api/v8/ | 2 min | API layer failure |
| Scheduler heartbeat | Heartbeat | cron.php exit ping | 5 min | Cron job stoppage |
| SuiteUpdates probe | HTTP | /index.php?entryPoint=SuiteUpdates | 10 min | Scheduler entry point |
| SSL certificate | SSL | crm.yourdomain.com | Daily | Certificate expiry |
Conclusion
Self-hosting SuiteCRM gives you full data ownership, an open module ecosystem, and no per-seat licensing costs — but it puts uptime squarely in your hands. A PHP-FPM crash, a full disk, or a missed cron job can silently break your sales operations for hours before anyone notices.
With Vigilmon monitoring every layer of your SuiteCRM deployment, you'll know within 60 seconds when something breaks — and the scheduler heartbeat means you'll know if automated tasks silently stop running, too.
Start monitoring for free at vigilmon.online.