Documentation
DriftHalt monitors your servers by running a lightweight agent on each one. The agent collects data about what's installed, what's running, and how healthy the system is — then sends it to your dashboard every 15 minutes.
The agent is open source, read-only, and never accepts inbound connections. It only pushes data outbound to DriftHalt over HTTPS.
Agent language
Python 3
Scan interval
Every 15 minutes
OS support
Ubuntu 20.04+, Debian 11+
Agent license
MIT (open source)
1. Create an account
Go to drifthalt.com/register and sign up with your email and a password. The free plan lets you monitor up to 2 servers at no cost.
Free vs Pro
2. Get your API key
Your API key is how the agent authenticates with your account. Each agent install uses the same key — it identifies which account to report data to.
- 1.Log into your dashboard at drifthalt.com/dashboard
- 2.Click Account in the left sidebar
- 3.Find the API Key section and click Show then Copy
Keep your API key secret. Anyone with this key can register servers to your account. If it's ever compromised, rotate it from the Account page.
3. Install the agent
SSH into the server you want to monitor and run the install command. Replace YOUR_API_KEY with the key you copied from the Account page.
Run on your server:
curl -fsSL https://drifthalt.sh/install | sudo bash -s -- --api-key YOUR_API_KEYThe installer will:
- ✓Create a dedicated drifthalt system user with minimal permissions
- ✓Install the agent to /opt/drifthalt-agent
- ✓Create a systemd service that runs on boot
- ✓Run the first scan immediately and send data to your dashboard
Requirements
- ·Ubuntu 20.04+ or Debian 11+
- ·Python 3 installed (standard on most servers)
- ·sudo access to run the installer
- ·Outbound HTTPS access to drifthalt.com on port 443
Tip: The easiest way to get your install command with your API key already included is to click + Add Server in the top right of your dashboard. The command shown there has your unique API key pre-filled — just copy and paste it directly into your server.
Verify the agent is running
After install, confirm the service is active:
systemctl status drifthalt-agentView live logs:
journalctl -u drifthalt-agent -fUninstall
To remove the agent from a server:
curl -fsSL https://raw.githubusercontent.com/drifthalt/drifthalt-agent/main/uninstall.sh | sudo bash4. Using the dashboard
Once the agent runs its first scan, your server appears in the dashboard. Click into it to see all collected data across eight tabs.
Overview
A summary of the server — package count, running services, SSL certificates, and cron jobs. Resource gauges show current CPU, memory, disk, and swap usage. The Overview also shows PM2 process status (if configured) with restart counts and memory per process, OOM kill events from the last 24 hours, and baseline deviation count if a baseline has been set.
Packages
Every package installed via apt/dpkg with its version. Use the search box to find specific packages. Version comparison against latest known versions is shown for tracked packages. Pro accounts see versions for apt packages, GitHub releases, and Docker Hub images. Free accounts see apt packages only.
Services
All systemd services with their current status (running, stopped, failed). Filter by status to quickly find failed services. Note: UFW firewall may show as stopped even when active — verify with sudo ufw status on the server.
SSL
SSL certificates detected from your Nginx config, with issuer, expiry date, and days remaining. A color-coded bar shows urgency — green is healthy, yellow is expiring soon, red is critical.
Cron
Scheduled cron jobs from crontab and /etc/cron.d/, showing the user, schedule, and command for each job. The Last Run column shows how long ago each job was last invoked, based on system journal logs from the last 24 hours. Note: Last Run shows when the job started, not whether it succeeded. Jobs showing — have not run in the last 24 hours or could not be matched to a journal entry.
Containers
Docker containers running on the server, showing image name, tag, status, and exposed ports. Containers using the latest tag are highlighted — pinning to a specific version is recommended for production. Note: Docker must be installed before running the agent installer for container detection to work automatically. If you install Docker after the agent, re-run the install command to enable container visibility.
History
A timeline of recent scans for this server. Select any two scans and click Compare to see a diff of what changed between them — packages added or removed, services that changed status, SSL certs, and cron jobs. Use Set baseline to mark the current state as correct, then track deviations from it on the Overview tab.
Changelog
A per-server timeline of documented changes. Log what you changed and why — package updates, config changes, anything worth tracking. The Document this change button auto-fills from detected baseline deviations. All documented changes appear in the unified Activity Feed at /dashboard/changelog.
5. Alerts
DriftHalt sends email and webhook notifications when something needs your attention. All alert types are configurable from the Alerts page — you can enable or disable each type and set custom thresholds where applicable.
Server Offline
Fires when a server stops sending scans for 60 minutes. A stale warning fires at 30 minutes.
SSL Expiry
Fires when an SSL certificate is within 14 days of expiry.
Drift Detection
Fires when configuration changes are detected between two consecutive scans — packages added or removed, services changed, cron jobs modified.
Memory Warning
Fires when memory usage stays above the configured threshold (default 82%) for 3 consecutive scans.
Swap Warning
Fires when swap usage stays above the configured threshold (default 50%) for 3 consecutive scans.
Disk Warning
Fires when disk usage on the root partition stays above the configured threshold (default 85%) for 3 consecutive scans.
OOM Kill
Fires immediately when the Linux OOM killer terminates a process on any monitored server.
PM2 Restart
Fires when a PM2 process restarts 3 or more times in a single scan cycle.
Notification channels
All alerts are sent by email. You can also configure Slack, Discord, or any generic webhook (works with Ntfy, Gotify, n8n, Zapier, and more) from the Alerts page. Webhook notifications are available on the free tier.
6. Activity Feed
The Activity Feed at dashboard/changelog shows a unified timeline of everything that has happened across all your servers — both manual change log entries and auto-detected alert events in one place.
Manual entries
Documented changes you log yourself from the Changelog tab on any server. Record what changed and why — useful for audits, troubleshooting, and team communication.
Auto-detected events
Alert events automatically logged when DriftHalt detects something — server offline, drift detected, high memory, OOM kill, PM2 restart, and more. Color-coded by severity.
Filtering
Filter by tab (All / Manual / Auto-detected) or by server. Entries with notes can be expanded to show full details.
7. PM2 process monitoring
DriftHalt can monitor PM2 processes on your server, tracking restart counts, memory usage, and process status. If a process restarts 3 or more times between scans, you'll receive an alert. PM2 monitoring requires a one-time setup on each server where you want it enabled.
Requirements
PM2 installed and running on the server. DriftHalt agent v1.2.3 or later.
Setup
The DriftHalt agent runs as a system user called drifthalt, which has minimal permissions by design. PM2 runs under your personal Linux user account, so the agent cannot access it directly. This setup creates a small helper script that the agent is allowed to call — it runs PM2 as your user and returns process data safely.
Replace YOUR_USERNAME with the Linux user that runs PM2 on your server (commonly ubuntu, deploy, or your personal username).
Creates the helper script that reads PM2 process data:
sudo bash -c 'cat > /usr/local/bin/drifthalt-pm2-info << '\''EOF'\''
#!/bin/bash
PM2_HOME=/home/YOUR_USERNAME/.pm2 pm2 jlist
EOF'
sudo chmod +x /usr/local/bin/drifthalt-pm2-info
sudo chown YOUR_USERNAME:YOUR_USERNAME /usr/local/bin/drifthalt-pm2-infoGrants the drifthalt agent permission to run the helper script as your user:
echo "drifthalt ALL=(YOUR_USERNAME) NOPASSWD: /usr/local/bin/drifthalt-pm2-info" | sudo tee /etc/sudoers.d/drifthalt-pm2
sudo chmod 440 /etc/sudoers.d/drifthalt-pm2Once complete, PM2 data will appear in your next agent scan (within 15 minutes). No agent restart required.
What gets monitored
Process name and current status. Restart count — alerts when 3 or more restarts occur in a single scan cycle. Memory usage per process.
Alerts
When a PM2 process restarts 3 or more times between scans, DriftHalt sends an email and webhook notification with the process name, restart count, and a link to your dashboard.
FAQ
What does the agent collect?
The agent collects: hostname, OS info, kernel version, uptime, CPU/memory/disk/swap usage, installed packages and versions, systemd service status, Docker container info, SSL certificate expiry, cron jobs, open ports, PM2 process data (if configured), OOM kill events, and system user metadata (username, sudo access, SSH key presence). It never collects passwords, SSH private keys, environment variables, or file contents.
How often does the agent scan?
Every 15 minutes. This is fixed in the current version.
What if my server goes offline?
The agent retries on the next scan cycle if a send fails. The dashboard marks a server as "stale" if no scan has been received in over 30 minutes, and "offline" after 60 minutes.
Can I monitor servers that are not Ubuntu or Debian?
Not yet. Version 1 supports Ubuntu 20.04+ and Debian 11+. Support for other distributions is planned for a future release.
How do I add more than 2 servers?
Upgrade to Pro from the Account page. Pro is $6/month or $60/year and includes up to 10 servers.
Is my data private?
Yes. Every database query is scoped to your account — no other user can access your server data. See our Privacy Policy for full details on data handling and deletion.
How do I update the agent?
The agent does not auto-update. To update, re-run the install command on each server with your API key. The installer will overwrite the existing agent files and restart the service automatically.
Which browser works best?
Chrome or any Chromium-based browser (Edge, Brave) provides the fastest experience. Safari works but may load server detail pages slightly slower on the first visit.
Is the agent safe to install?
Yes. The agent is open source (MIT license) and read-only — it never modifies anything on your server. It only collects metadata and sends it outbound to DriftHalt over HTTPS. It never accepts inbound connections. You can review the full source code at github.com/drifthalt/drifthalt-agent.
How do I remove a server?
Open the server detail page in the dashboard and click "Remove server" in the top right. This deletes all data associated with that server. You should also uninstall the agent from the server itself to stop it from sending data:
curl -fsSL https://raw.githubusercontent.com/drifthalt/drifthalt-agent/main/uninstall.sh | sudo bashReady to get started?
Free plan covers 2 servers. No credit card required.
Create free account