Monitoring Your Mobilizon Instance with Vigilmon
Mobilizon is a federated events and groups platform built on ActivityPub. It's the self-hosted alternative to Facebook Events — one where you own your data and your community's events federate across the wider Fediverse.
But federation creates a responsibility: when your instance is down, your events disappear from other instances' timelines, email reminders don't send, and event organizers can't update their attendees. External monitoring ensures you know about problems before your community does.
This tutorial covers:
- Web UI availability
- GraphQL API health check
- Federation endpoint monitoring
- Email notification service health
- SSL certificate alerts
Step 1: Check the Mobilizon API
Mobilizon's backend is an Elixir/Phoenix application that exposes a GraphQL API. The API root is accessible at /api:
curl https://events.yourdomain.com/api
A running Mobilizon instance returns a 200 response. For a more meaningful health check, send a lightweight GraphQL query:
curl -X POST https://events.yourdomain.com/api \
-H "Content-Type: application/json" \
-d '{"query": "{ config { name } }"}'
This returns your instance name and confirms the GraphQL endpoint is functional, the database is reachable, and the application is serving requests. A 200 with a data key in the response body means everything is working.
Step 2: Set up HTTP monitoring in Vigilmon
- Sign up at vigilmon.online
- Click New Monitor → HTTP
- Enter
https://events.yourdomain.com/ - Set check interval: 1 minute (paid) or 5 minutes (free)
- Add a keyword match for
Mobilizonor your instance name (found in the page<title>) - Save
Add a second monitor for the GraphQL API:
- Create a new HTTP monitor
- URL:
https://events.yourdomain.com/api - Method:
POST - Body:
{"query": "{ config { name } }"} - Header:
Content-Type: application/json - Keyword match:
"data" - Save
The two monitors catch different failure modes. The UI monitor catches frontend build failures and nginx misconfiguration. The GraphQL monitor catches database connectivity loss and application crashes, even when nginx is still returning a cached or static response.
Step 3: Monitor the federation endpoint
Mobilizon uses ActivityPub for federation. Other instances discover yours via WebFinger and exchange event and group data via actor inboxes. A broken federation endpoint means your events stop appearing on other instances.
Add monitors for the federation discovery endpoints:
WebFinger:
- New HTTP monitor
- URL:
https://events.yourdomain.com/.well-known/webfinger?resource=acct:relay@events.yourdomain.com - Expected status:
200 - Keyword match:
"subject"
NodeInfo:
- New HTTP monitor
- URL:
https://events.yourdomain.com/.well-known/nodeinfo - Expected status:
200 - Keyword match:
links
ActivityPub actor endpoint:
Mobilizon creates actors for groups and users. Monitor the instance's relay actor if you have one enabled:
https://events.yourdomain.com/relay
Expected status: 200, keyword match: "type":"Application".
If any of these federation endpoints return errors, your instance appears broken to the rest of the Fediverse even if your local users can still access it.
Step 4: Email notification service health
Mobilizon sends emails for event reminders, group invitations, and participation confirmations. If your SMTP service fails, these notifications queue up silently — organizers don't know their reminder emails aren't being sent.
Monitor your SMTP relay directly using Vigilmon's TCP port monitor (if your SMTP server is accessible):
- New Monitor → TCP Port
- Host:
mail.yourdomain.com(or your SMTP relay) - Port:
587(or465for SMTPS) - Save
This confirms your outbound mail server is accepting connections. A TCP failure means Mobilizon emails are failing at the SMTP handshake level.
For hosted SMTP services (Mailgun, Postmark, SendGrid), monitor the provider's API endpoint if available:
# Mailgun API health check example
curl -s https://api.mailgun.net/v3/domains \
-u "api:$MAILGUN_API_KEY" | jq '.total_count'
Alternatively, use a heartbeat approach: set up a Mobilizon test account that receives a daily test email (via a cron job or automation), and ping Vigilmon when the email is received. This end-to-end test catches SMTP authentication failures, domain reputation issues, and delivery failures that a simple TCP check misses.
Step 5: SSL certificate monitoring
Mobilizon requires HTTPS for ActivityPub federation — other instances won't federate with a server using an invalid certificate. Add SSL monitoring with plenty of lead time:
- Go to New Monitor → SSL Certificate in Vigilmon
- Enter
events.yourdomain.com - Set alert threshold: 30 days before expiry
- Save
If you serve Mobilizon over multiple domains or subdomains (e.g., for custom group URLs), add a monitor for each:
events.yourdomain.com
Mobilizon instances are often run on Let's Encrypt certificates with 90-day validity. A 30-day alert gives you a comfortable window to renew manually if your auto-renewal (certbot timer or similar) fails.
Step 6: Alerts via Slack or email
In Vigilmon, go to Notifications → New Channel and configure Slack or email.
Suggested alert routing for a Mobilizon instance:
- Web UI down → immediate Slack/Discord ping to your admin channel
- GraphQL API down → immediate alert (this affects all event operations)
- Federation endpoint down → alert (affects your Fediverse presence)
- SMTP TCP check failing → alert (email reminders are silently failing)
- SSL expiry warning → email 30 days out, escalate to Slack at 7 days
For a community-run instance, consider adding a co-admin to receive email alerts so there's no single point of contact failure.
Step 7: Status page
Create a public status page for your event community:
- Go to Status Pages → New Status Page in Vigilmon
- Add your web UI, GraphQL API, and federation monitors
- Name it something like "events.yourdomain.com Status"
- Link to it from your instance's About page or terms page
When an organizer messages "I can't access my event page," a status page link is the fastest first response. It also builds trust with your community — transparency about incidents is a feature of community-run infrastructure, not a liability.
What you've built
| What | How |
|------|-----|
| Web UI availability | HTTP monitor → / with keyword match |
| GraphQL API health | HTTP POST monitor → /api with query |
| WebFinger federation | HTTP monitor → /.well-known/webfinger |
| NodeInfo | HTTP monitor → /.well-known/nodeinfo |
| ActivityPub actor | HTTP monitor → /relay |
| SMTP connectivity | TCP port monitor → port 587 |
| SSL certificate | Vigilmon SSL monitor, 30-day threshold |
| Alerts | Vigilmon Slack/email notification channels |
| Community status page | Vigilmon public status page |
Federation means your uptime affects your whole community's Fediverse presence. Vigilmon makes sure you're the first to know when something goes wrong.
Next steps
- Add response time monitoring to detect slow GraphQL queries before they hit timeout limits (Mobilizon's map and search features can be query-heavy)
- Monitor your PostgreSQL database separately if it runs on a different host
- Set up an end-to-end email test using a monitoring email address to catch silent SMTP failures
- If you run multiple Mobilizon instances across different communities, create a shared admin status page
Get started free at vigilmon.online.