这是什么
Gatus 是我在家庭实验室里跑的一个轻量服务监控。它部署在我的世界服务器(192.168.50.223,Ubuntu + CasaOS)上,监听 :8088,配置文件放在 /opt/gatus/config/config.yaml,目前有 16 项检查在跑。
为什么做
家里现在有三台设备:本服务器 xiejun-web(192.168.50.164,Debian 13)、Windows 11 电脑(192.168.50.155)、我的世界服务器(192.168.50.223)。上面还压着 9 个 Docker 容器、基岩版服务端(19132/udp)、网页版世界地图(:8081)、CasaOS 面板,以及一条 Tailscale 通道。
以前排查全靠手动 ping 和挨个 ssh 上去看,问题往往是「用的时候才发现」。东西一多,人肉巡检就不现实了。
解决什么问题
Gatus 把这些检查收敛成一份 YAML:网站走 HTTP 看状态码、响应内容和响应时间,机器走 ICMP 看主机是否还活着,隧道和对外服务也各有一条端点。条件不满足就触发告警,不用我盯着。状态页公网可看,出门在外打开浏览器就能确认服务挂没挂,不必先连上内网。
现状
运行中。16 项检查覆盖网站、机器、隧道三类,异常告警已接通。后续想再补上磁盘空间、证书到期这类更细的项。
功能
- 一份 YAML 定义全部端点,网站走 HTTP、机器走 ICMP、隧道单独一条
- 用 conditions 判断状态码、响应内容和响应时间,而不是只看端口通不通
- 条件不满足自动告警,不用人工盯着面板
- 状态页对外可访问,离开内网也能看整体健康度
- 覆盖 16 项检查,横跨三台设备和对外服务
技术栈
使用 / 部署教程
部署步骤
1. 建目录
mkdir -p /opt/gatus/config && cd /opt/gatus
2. 写配置 config/config.yaml(下面是示例,端点按自己的设备替换):
endpoints:
- name: xiejun-web
group: 机器
url: "icmp://192.168.50.164"
interval: 60s
conditions:
- "[CONNECTED] == true"
- name: 世界地图
group: 网站
url: "http://192.168.50.223:8081"
interval: 60s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 1500"
要点就三样:url 决定用什么协议探(http://、https://、icmp://、tcp://),interval 决定频率,conditions 决定什么算健康。别只写端口通,尽量带上状态码或响应内容,否则容易误报。
3. 起容器
services:
gatus:
image: twinproduction/gatus:latest
container_name: gatus
restart: unless-stopped
ports:
- "8088:8080"
volumes:
- ./config:/config
docker compose up -d,然后访问 http://<主机IP>:8088 看状态页。
4. 加告警
在配置里加 alerting,指向自己的 webhook 或邮件通道:
alerting:
custom:
url: "https://example.com/webhook"
default-alert:
failure-threshold: 3
success-threshold: 2
failure-threshold 建议别设成 1,网络抖一下就告警会把自己吵到关通知。
5. 验证与维护
改完配置重启容器即可生效。先故意停一个服务,确认状态页变红、告警能收到,再放回去 —— 监控本身没被验证过等于没有。后续加端点就是往 endpoints 里追一条,不用动容器。
注意
- config.yaml 里如果写了告警 webhook、Token 之类的凭据,分享或提交前先脱敏。
- 状态页公网可看意味着端点名称和内网 IP 会一并暴露,建议用别名代替具体内网地址。
- ICMP 探测依赖容器网络权限,部分环境下需要额外加
cap_add: [NET_RAW]才能生效。