七千二百袋水泥
七千二百袋水泥
Published on 2025-10-25 / 3 Visits

在NAS上部署Gatus服务监控系统全面指南:深度对比uptime-kuma实现多协议健康检查与智能告警配置

Gatus 是一款专为监控服务健康状态设计的仪表板工具,它广泛支持 HTTP、ICMP、TCP、DNS、SCTP、SSH 等多种网络协议。用户可以通过定义状态码、响应时长、证书到期时间、响应正文内容等详细条件来全面评估服务的运行状况。在告警功能方面,Gatus 提供了丰富的集成支持,包括 webhook、Gotify、ntfy、Pushover、Telegram、Slack、Discord、GitHub 等数十种通知方式,确保用户能及时接收服务异常信息。

Image

  • 项目源码地址https://github.com/TwiN/gatus
  • 官方网站https://gatus.io/(该项目提供商业付费版本,用户可根据需求选择)
  • Docker Compose 部署配置
services:  
  gatus:  
    image: docker.1ms.run/twinproduction/gatus:latest  
    container_name: gatus  
    restart: unless-stopped  
    ports:  
      - 8083:8080  
    volumes:  
      - ./config:/config  
      - ./data:/data

Gatus 的 Docker 镜像默认发布在 Docker Hub 平台,为了加速镜像拉取过程,我在上述 Compose 文件中添加了镜像加速地址 docker.1ms.run。需要注意的是,这个加速地址来源于网络公开资源,其可用性无法长期保证,用户在使用时可能需要根据实际情况调整。


核心功能特性

  • 高度灵活的健康检查机制:Gatus 允许用户基于响应代码、连接状态、响应时间、IP 地址、数据包长度、JSON 内容、SSL 证书状态、域名信息等多种条件进行服务健康评估。
  • 简洁易用的配置方式:采用 YAML 格式的配置文件,结构清晰易懂,添加新的监控项或修改现有设置都非常便捷。
  • 全面的告警通知支持:工具内置了对 Slack、Mattermost、Messagebird、PagerDuty、Twilio、Google Chat、Teams 等平台的通知发送功能,同时支持用户自定义 webhook 以满足个性化需求。
  • 低资源消耗与高效性能:基于 Go 语言开发,Gatus 在运行时占用系统资源较少,执行效率高,适合在资源受限的环境如 NAS 中部署。
  • 暗黑模式界面:提供视觉友好的暗色主题,方便用户在低光环境下使用。

Image

部署与配置体验

在启动 Gatus 容器之前,建议用户先创建并配置好监控文件和告警设置。以下是一个经过测试可用的企业微信告警配置示例,供大家参考:

storage:  ## 配置数据库存储类型
  type: sqlite
  path: /data/data.db

alerting:
  custom:
    url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=《这里替换为你自己的Key》"
    method: "POST"
    body: |
      {
        "msgtype": "markdown",
        "markdown": {
          "mentioned_list": ["@all"],
          "content": "## 站点告警: [ALERT_TRIGGERED_OR_RESOLVED]\n- [ENDPOINT_NAME]\n- [ALERT_DESCRIPTION]\n- [RESULT_ERRORS]"
        }
      }

endpoints:
  - name: slink图床
    url: "https://slink.games.freemyip.com"
    interval: 8m
    conditions:
      - "[STATUS] == 200"
      - "[RESPONSE_TIME] < 300"
      - "[DOMAIN_EXPIRATION] > 720h"   ## 检查域名有效期是否大于 30天
      - "[CERTIFICATE_EXPIRATION] > 168h" ## 检查证书有效期是否大于7天
    alerts:
      - type: custom
        failure-threshold: 2  # 失败2次就告警
        send-on-resolved: true
        description: "slink挂了"

完成配置后,启动 Docker 容器,在浏览器中访问 http://<nas-ip>:8083 即可查看监控面板。例如,在我的测试环境中,由于 SSL 证书已过期,系统触发了告警,界面显示为红色警示状态。

上述配置展示了如何监控一个 HTTPS 网站,Gatus 还支持多种其他服务类型的监控,以下是一些常见示例:

监控 TCP 服务(如 Redis)

endpoints:
  - name: redis
    url: "tcp://127.0.0.1:6379"
    interval: 30s
    conditions:
      - "[CONNECTED] == true"

监控 UDP 服务

endpoints:
  - name: example
    url: "udp://example.org:53"
    conditions:
      - "[CONNECTED] == true"

监控 SCTP 服务

endpoints:
  - name: example
    url: "sctp://127.0.0.1:38412"
    conditions:
      - "[CONNECTED] == true"

监控 WebSocket 服务

endpoints:
  - name: example
    url: "wss://example.com/"
    body: "status"
    conditions:
      - "[CONNECTED] == true"
      - "[BODY].result >= 0"

监控 ICMP 服务(Ping 检查)

endpoints:
  - name: ping-example
    url: "icmp://example.com"
    conditions:
      - "[CONNECTED] == true"

监控 DNS 查询

endpoints:
  - name: example-dns-query
    url: "223.5.5.5"  # 指定 DNS 服务器
    dns:
      query-name: "example.com"
      query-type: "A"
    conditions:
      - "[BODY] == 93.184.215.14"
      - "[DNS_RCODE] == NOERROR"

监控 SSH 服务

endpoints:
  - name: ssh-example
    url: "ssh://example.com:22"  # 端口可选,默认为 22
    ssh:
      username: "username"
      password: "password"
    body: |
      {
        "command": "uptime"
      }
    interval: 1m
    conditions:
      - "[CONNECTED] == true"
      - "[STATUS] == 0"

除了上述类型,Gatus 还支持 TLS 监控等高级功能,例如指定本地证书进行验证,由于篇幅限制,这里不逐一详细展开。

综合评估与对比

  • 功能广度方面:Gatus 在支持的协议类型和检查条件上远超 uptime-kuma,提供了更全面的监控覆盖。
  • 功能深度方面:Gatus 在细节处理上更为精细,例如请求条件设置、监控类型多样性、告警触发条件和通知方式等方面都表现出更强的可定制性。
  • 用户体验角度:Gatus 目前存在一些不足,例如界面缺乏中文支持,且所有配置均通过 YAML 文件完成,缺乏可视化操作界面,这可能导致配置过程容易出错,对新手用户不够友好。