Healthchecks 定时任务监控搭建教程
Healthchecks 是一款专门用于监控定时任务(Cron Jobs)的开源工具。它的工作原理很简单:为每个需要监控的任务创建一个唯一的 URL,任务成功执行后向该 URL 发送一个 HTTP 请求(称为「ping」)。如果在预期时间内没有收到 ping,Healthchecks 就会发送告警通知。这种「死人开关」模式非常适合监控备份脚本、数据同步任务等关键定时任务。
一、适用场景
- 备份脚本监控:确认数据库备份、文件备份是否按时执行。
- Cron 任务监控:监控服务器上的定时任务是否正常运行。
- 数据同步监控:确认数据同步任务是否按时完成。
- SSL 证书更新:监控 Let's Encrypt 证书自动续期是否成功。
- 定期报告:确认自动化报告是否按时生成和发送。
二、环境准备
- 搬瓦工 VPS 一台,512MB 内存即可(使用优惠码 NODESEEK2026 享受 6.77% 折扣)。
- 已安装 Docker 和 Docker Compose(参考 Docker 安装教程)。
三、Docker Compose 部署
mkdir -p /opt/healthchecks
cat > /opt/healthchecks/docker-compose.yml <<'EOF'
version: '3.8'
services:
healthchecks:
image: healthchecks/healthchecks:latest
restart: always
ports:
- "8000:8000"
environment:
DB: sqlite
DB_NAME: /data/hc.sqlite
SECRET_KEY: your_random_secret_key_here
ALLOWED_HOSTS: hc.yourdomain.com
SITE_ROOT: https://hc.yourdomain.com
SITE_NAME: My Healthchecks
DEFAULT_FROM_EMAIL: noreply@yourdomain.com
EMAIL_HOST: smtp.yourdomain.com
EMAIL_PORT: 587
EMAIL_USE_TLS: "True"
EMAIL_HOST_USER: noreply@yourdomain.com
EMAIL_HOST_PASSWORD: email_password
SUPERUSER_EMAIL: admin@yourdomain.com
SUPERUSER_PASSWORD: your_admin_password
REGISTRATION_OPEN: "False"
volumes:
- /opt/healthchecks/data:/data
EOF
生成 SECRET_KEY:
openssl rand -hex 32
四、启动服务
cd /opt/healthchecks
docker compose up -d
访问 http://VPS_IP:8000,使用设置的管理员邮箱和密码登录。
五、创建监控检查
5.1 在 Web 界面创建
- 登录后点击「Add Check」。
- 给检查起个名称,如「数据库备份」。
- 设置执行周期,如「每 24 小时」。
- 设置宽限期(Grace Period),即超过多久未收到 ping 才发告警。
- 保存后会获得一个唯一的 ping URL。
5.2 在脚本中集成
在定时任务脚本的末尾添加一行 curl 命令:
#!/bin/bash
# 数据库备份脚本
pg_dump -U postgres mydb > /backup/db_$(date +%Y%m%d).sql
# 备份成功后发送 ping
curl -fsS --retry 3 https://hc.yourdomain.com/ping/your-unique-uuid
5.3 报告成功或失败
# 报告成功
curl https://hc.yourdomain.com/ping/your-uuid
# 报告开始执行
curl https://hc.yourdomain.com/ping/your-uuid/start
# 报告失败
curl https://hc.yourdomain.com/ping/your-uuid/fail
# 带退出码报告
curl https://hc.yourdomain.com/ping/your-uuid/$?
六、配置通知渠道
Healthchecks 支持多种通知渠道:
- 邮件:默认通知方式,需要配置 SMTP。
- Telegram:在集成设置中添加 Telegram Bot。
- Slack:通过 Webhook 发送通知。
- Webhook:发送 HTTP 请求到自定义 URL。
- PagerDuty:集成 PagerDuty 告警系统。
七、配置反向代理
cat > /etc/nginx/sites-available/healthchecks <<'EOF'
server {
listen 80;
server_name hc.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
ln -sf /etc/nginx/sites-available/healthchecks /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d hc.yourdomain.com
八、实际应用示例
# 监控 Docker 容器备份
0 3 * * * docker exec postgres pg_dump -U user dbname > /backup/db.sql && curl -fsS https://hc.yourdomain.com/ping/uuid1
# 监控 SSL 证书续期
0 0 * * 1 certbot renew && curl -fsS https://hc.yourdomain.com/ping/uuid2
# 监控磁盘清理
0 4 * * 0 docker system prune -af && curl -fsS https://hc.yourdomain.com/ping/uuid3
九、数据备份
cp /opt/healthchecks/data/hc.sqlite /opt/healthchecks/backup_$(date +%Y%m%d).sqlite
总结
Healthchecks 是运维工作中不可或缺的工具,确保关键定时任务正常运行。搭配 Gotify 或 Ntfy 可以获得更灵活的通知能力。选购搬瓦工 VPS 请访问 bwh81.net,使用优惠码 NODESEEK2026 享受 6.77% 折扣。