TwiN/gatus
运维与部署面向开发者的自托管健康状态页,主动探测服务并按条件告警。
项目介绍
Gatus 是一个自托管的健康状态仪表盘,面向开发者和运维人员。它会按设定的间隔主动探测服务,支持 HTTP、ICMP、TCP、DNS、gRPC、SSH、TLS 等多种协议,并把结果交给可配置条件判断:状态码、响应时间、响应体(支持 JSONPath)、证书过期时间、解析出的 IP 等。任一条件不满足,端点即被视为不健康,并可触发告警。
它的设计出发点是主动发现问题。指标类告警依赖已有流量,如果负载均衡器挂掉、没有请求进来,就很可能收不到任何告警;Gatus 自己发起健康检查,因此可能在客户端受影响之前就发现异常(Why Gatus?)。端点可以分组、用环境变量复用,也可以把多个端点串成 Suite,通过共享上下文传递值,适合登录流程、增删改查之类的多步 API 验证。
告警覆盖 Slack、PagerDuty、Discord、Teams、Telegram、邮件、GitHub/GitLab/Gitea Issue、Home Assistant 以及自定义 Provider 等。存储支持内存、SQLite 和 Postgres,还提供 Prometheus 风格指标以及可嵌入的可用率、响应时间徽章。
快速使用
README 给出的最短路径是 Docker,前提是宿主机上可用的 Docker 守护进程:
docker run -p 8080:8080 --name gatus ghcr.io/twin/gatus:stable
启动后访问 http://localhost:8080 即可看到仪表盘。这一条命令使用内置配置;要监控自己的服务,需要把 config/config.yaml 挂载到默认的 config/config.yaml 路径,或用 GATUS_CONFIG_PATH 指向自己的文件或目录(Docker 用法)。最小配置示例:
endpoints:
- name: website
url: "https://twin.sh/health"
interval: 5m
conditions:
- "[STATUS] == 200"
- "[BODY].status == UP"
- "[RESPONSE_TIME] < 300"
每个间隔重新执行一次条件判断,失败即标记为不健康,这也是告警阈值的判断依据。配置支持 $VAR 和 ${VAR} 环境变量替换;当 GATUS_CONFIG_PATH 指向目录时,其中所有 *.yaml/*.yml 会被合并,map 深度合并、slice 追加,原始类型的参数只能定义一次。
使用约束
- 配置路径:默认
config/config.yaml,可用GATUS_CONFIG_PATH覆盖;值中需要字面$时用$$转义(配置说明)。 - 存储:默认内存模式,重启后历史数据丢失。需要持久化应改用
sqlite或postgres并设置storage.path;缓存仅部分后端支持。 - 告警凭据:多数告警渠道需要 token 或 webhook 地址,配置文件应按敏感信息处理。GitHub/Gitea 告警 Token 至少需要 issues 读写和 metadata 只读权限。
- 集成成熟度:README 明确标注 Datadog 与 IFTTT 告警 Provider 尚未测试(讨论 #1223);Suite 标注为 ALPHA,远程实例标注为 EXPERIMENTAL。
- 网络可达性:探测从 Gatus 所在环境发出。内网服务需要通过跳板机建立 SSH 隧道,或由内网 agent 推送 external endpoint。
- 许可证:Apache-2.0。
HotRepo 点评
Gatus 是 2019 年创建、已经比较成熟的 Go 项目,协议和告警渠道覆盖面都很宽。HotRepo 记录的 2026-11-08 Go 日榜快照中,它当天新增 88 Star,总数 12,604,位列当日 Go 语言榜第 14 名;站内没有全语言日榜名次记录,单次快照也不足以判断趋势。README 选择与 Alertmanager、Cloudwatch 对照是有信息量的:它补的是黑盒健康检查这一层,而不是替代指标观测,已经在用 Prometheus 的团队更可能把它和现有监控并行部署。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。