UVDesk is a modern open-source helpdesk built on the Symfony PHP framework. It supports multiple channels out of the box — email, Facebook, and Twitter — routing customer messages into a unified ticket queue. Unlike simpler helpdesks, UVDesk runs background Symfony Messenger workers to fetch emails and process ticket events asynchronously. When those workers crash silently, new tickets stop appearing without any obvious error. Vigilmon lets you monitor UVDesk's web UI, REST API, SSL certificate, and background jobs in one place.
What You'll Set Up
- HTTP monitor for the UVDesk login page and web UI availability
- REST API monitor for
/api/v1/ticketswith auth header check - Symfony response header keyword check to confirm the framework is healthy
- SSL certificate expiry alerts for HTTPS UVDesk deployments
- Heartbeat monitor for UVDesk Symfony Messenger background workers (email fetching)
Prerequisites
- UVDesk Community Edition installed and running (PHP 8.x, Symfony 5/6)
- UVDesk API credentials (generated in Admin → API)
- A free Vigilmon account
Step 1: Monitor the UVDesk Web UI
The UVDesk login page is the primary availability signal. An HTTP 200 from the login page confirms that PHP-FPM, nginx/Apache, and Symfony's front controller are all working.
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - Enter your UVDesk URL:
https://helpdesk.yourdomain.com/en/login - Set Check interval to
1 minute. - Set Expected HTTP status to
200. - Enable Keyword match and enter:
UVDesk - Click Save.
The keyword check distinguishes a genuine UVDesk login page from a generic PHP or nginx error page that might still return HTTP 200.
Step 2: Monitor the UVDesk REST API
UVDesk exposes a REST API at /api/v1/ for ticket management. Monitoring the tickets endpoint confirms the API layer and database connectivity are healthy.
- Click Add Monitor in Vigilmon.
- Set Type to
HTTP / HTTPS. - Enter the API endpoint:
https://helpdesk.yourdomain.com/api/v1/tickets - Add a custom request header for authentication:
- Header name:
Authorization - Header value:
Basic <base64(email:api_token)>
- Header name:
- Set Expected HTTP status to
200. - Set Check interval to
5 minutes. - Click Save.
To generate the base64 credential:
echo -n "admin@yourdomain.com:YOUR_API_TOKEN" | base64
A healthy API response returns a JSON payload with ticket data. A 401 means the API credentials have changed; a 500 means Symfony or the database has an issue.
Step 3: Symfony Response Header Check
Symfony applications add a X-Debug-Token header in development mode and standardized error headers in production. More reliably, a healthy Symfony app returns a Content-Type: application/json or text/html; charset=UTF-8 header — distinguishing a real Symfony response from a CDN or proxy error page.
Add a response header check to your API monitor:
- Open the API monitor created in Step 2.
- Enable Response header check.
- Set Header name:
Content-Type - Set Expected value contains:
application/json - Click Save.
Alternatively, add a keyword check on the web UI monitor for the Symfony-generated CSRF token field name, which only appears when Symfony rendered the page:
_csrf_token
This field is embedded in the login form by Symfony's security component and is absent from proxy error pages or PHP fatal error responses.
Step 4: SSL Certificate Alerts
UVDesk deployments with multi-channel integrations often use subdomains or custom domains that have independent SSL certificates. Monitor each one.
Enable SSL monitoring on your web UI monitor:
- Open the monitor from Step 1.
- Under SSL Certificate, enable Monitor certificate expiry.
- Set Alert threshold to
21 days before expiry. - Click Save.
If you have additional UVDesk subdomains (e.g. a customer-facing portal on a separate domain), add a separate Vigilmon monitor for each:
# Check all your UVDesk-related domains
dig helpdesk.yourdomain.com
dig portal.yourdomain.com
Each domain gets its own SSL monitor. A 21-day lead time means you have enough time to renew via Let's Encrypt or your CA before customers see browser warnings.
Step 5: Heartbeat Monitoring for Symfony Messenger Workers
UVDesk uses Symfony Messenger to run asynchronous background jobs — primarily email channel workers that fetch incoming messages and convert them to tickets. These workers run as long-lived processes managed by supervisord or systemctl.
When a Messenger worker crashes, UVDesk stops ingesting emails silently. No error appears in the web UI; tickets simply stop arriving from email channels.
Set up a Vigilmon heartbeat:
- In Vigilmon, click Add Monitor → Cron Heartbeat.
- Name it
UVDesk Messenger Worker. - Set Expected ping interval to
5 minutes. - Copy the heartbeat URL (e.g.
https://vigilmon.online/heartbeat/abc123).
Wrap your Messenger worker in a script that pings Vigilmon after each successful message batch:
#!/bin/bash
# /usr/local/bin/uvdesk-worker.sh
cd /var/www/uvdesk
while true; do
php bin/console messenger:consume async --limit=10 --time-limit=240
curl -s https://vigilmon.online/heartbeat/abc123
sleep 1
done
Configure supervisord to keep this script running:
# /etc/supervisor/conf.d/uvdesk-messenger.conf
[program:uvdesk-messenger]
command=/usr/local/bin/uvdesk-worker.sh
directory=/var/www/uvdesk
autostart=true
autorestart=true
stderr_logfile=/var/log/uvdesk-messenger.err.log
stdout_logfile=/var/log/uvdesk-messenger.out.log
If the worker process crashes and supervisord cannot restart it, the heartbeat loop stops and Vigilmon fires an alert after the 5-minute interval.
For email-fetch cron jobs (alternative to Messenger workers), add the heartbeat to your crontab:
*/5 * * * * cd /var/www/uvdesk && php bin/console swiftmailer:email:fetch && curl -s https://vigilmon.online/heartbeat/abc123
Step 6: Configure Alert Channels
- Go to Alert Channels in Vigilmon and add email, Slack, or a webhook endpoint.
- Set Consecutive failures before alert to
2on the web UI monitor to absorb brief PHP-FPM restarts. - Set Consecutive failures to
1on the API monitor — API failures indicate a systemic problem worth immediate attention. - For the Messenger worker heartbeat, use default immediate alerting — a missed heartbeat means email ticket ingestion has stopped.
Use a maintenance window during UVDesk upgrades or Symfony cache clears:
# Clear Symfony cache (takes 10–30 seconds, causes brief downtime)
curl -X POST https://vigilmon.online/api/maintenance \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"monitor_id": "abc123", "duration_minutes": 5}'
cd /var/www/uvdesk && php bin/console cache:clear
Summary
| Monitor | Target | What It Catches |
|---|---|---|
| Web UI | https://helpdesk.domain.com/en/login | PHP-FPM down, Symfony routing broken |
| REST API | /api/v1/tickets + auth header | API layer failure, database unreachable |
| Symfony header | Content-Type: application/json | Proxy serving stale/error response |
| SSL certificate | Helpdesk and portal domains | Certificate expiry, Let's Encrypt failure |
| Messenger heartbeat | Heartbeat URL every 5 min | Email channel ingestion stopped |
UVDesk's multi-channel architecture makes it powerful — and more complex to monitor than a single-channel helpdesk. With Vigilmon watching the web UI, REST API, framework headers, SSL certificate, and background workers, you'll catch silent failures before they cascade into lost support tickets.