200字
CloudEye 监控面板:一款简洁强大的服务状态监控工具
2025-12-19
2025-12-19

前言

在运维工作中,服务状态监控是必不可少的一环。市面上有很多优秀的监控工具,如 Uptime Kuma、Prometheus + Grafana 等,但它们要么功能过于复杂,要么资源占用较高。

今天介绍一款我自己开发的轻量级监控面板 —— CloudEye,它具有以下特点:

  • 轻量级:基于 SQLite,无需额外数据库

  • Docker 部署:一条命令启动,支持 x86/ARM 架构

  • 多种监控类型:HTTP、TCP、Telegram 群组、Komari 探针

  • Webhook 通知:支持 Discord、Slack、企业微信等

  • 现代化 UI:深色/浅色主题,拖拽排序,响应式设计

logo.png


快速开始

1. 环境要求

  • Docker 已安装

  • Docker Compose 已安装(可选,但推荐)

2. 创建部署文件

在服务器上创建一个目录,并新建

docker-compose.yml文件:

mkdir -p ~/cloudeye && cd ~/cloudeye

nano docker-compose.yml

写入以下内容:

version: '3.8'
services:

uptime-monitor:

image: ghcr.io/debbide/monitora:latest

container_name: uptime-monitor

restart: unless-stopped

ports:

      - "3000:3000"

volumes:

      - ./data:/app/data

environment:

NODE_ENV: production

PORT: "3000"

DATA_DIR: /app/data

3. 启动服务

docker compose up -d

4. 访问面板

打开浏览器访问 http://你的服务器IP:3000

默认密码admin

⚠️ 首次登录后请立即修改密码!


功能详解

📡 HTTP/HTTPS 监控

最基础的监控类型,支持:

  • 自定义请求方法:GET、POST、HEAD 等

  • 期望状态码:可设置多个,如 200,201,204,301,302

  • 关键词检测

    • 期望关键词:页面必须包含指定关键词才算正常

    • 禁止关键词:页面包含指定关键词则判定为异常

  • 超时设置:自定义请求超时时间

  • 检测间隔:支持动态间隔(正常时用较长间隔,异常时用较短间隔)

配置示例

参数

说明

名称

我的博客

监控项名称

URL

https://example.com

要监控的网址

检测类型

HTTP

选择 HTTP 类型

请求方法

GET

默认使用 GET

期望状态码

200,201,204

多个用逗号分隔

检测间隔

5 分钟

正常状态下的检测频率

异常时间隔

1 分钟

可选,异常时加快检测


🔌 TCP 端口监控

监控服务器端口是否可连接,适用于:

  • 数据库服务(MySQL 3306、PostgreSQL 5432)

  • Redis 服务(6379)

  • SSH 服务(22)

  • 游戏服务器端口

配置示例

参数

名称

MySQL 数据库

URL

192.168.1.100:3306

检测类型

TCP


📱 Telegram 群组监控

这是一个非常有趣的功能!可以监听 Telegram 群组消息,根据关键词判断服务状态。

使用场景

  • 监控第三方探针的通知群

  • 监控告警群组

  • 任何通过 TG 群发送状态通知的服务

配置步骤

Step 1: 创建 Bot

  1. 在 Telegram 中搜索 @BotFather

  2. 发送 /newbot 创建新机器人

  3. 按提示设置名称和用户名

  4. 获取 Bot Token(格式:123456789:ABCdefGHIjklMNOpqrsTUVwxyz

Step 2: 配置 Bot 权限

  1. 向 @BotFather 发送 /mybots

  2. 选择你的 Bot → Bot Settings → Group Privacy

  3. 点击 Turn off(关闭隐私模式,这样 Bot 才能读取群消息)

Step 3: 将 Bot 加入群组

  1. 把 Bot 添加到你要监控的 Telegram 群组

  2. 获取群组 ID(负数格式,如 -1001234567890

💡 获取群组 ID 方法:将 @userinfobot 添加到群组,它会自动发送群组 ID

Step 4: 在面板中配置

  1. 点击顶栏 🤖 按钮,填入 Bot Token

  2. 添加监控,选择 Telegram 类型

  3. 填写配置:

参数

说明

群组 ID

-1001234567890

负数格式

服务器名称

server1,server2

多个用逗号分隔

离线关键词

离线,Offline,down

包含这些词判定为离线

上线关键词

上线,Online,up

包含这些词判定为上线

现在,当群组中出现包含"server1"和"离线"的消息时,监控状态会自动变为异常!


🖥️ Komari 探针监控

如果你使用 Komari 作为服务器探针,可以直接接入监控。

两种模式

  1. 主动查询模式:直接查询 Komari 面板 API

  2. Webhook 接收模式:接收 Komari 的离线/上线通知


Webhook 通知配置

当服务状态变更时,可以通过 Webhook 发送通知。

Discord 通知

  1. 在 Discord 服务器设置中创建 Webhook

  2. 复制 Webhook URL

  3. 填入监控项的 Webhook URL 字段

自定义 Webhook Body

支持变量替换,可用变量:

变量

说明

{{monitor_name}}

监控项名称

{{monitor_url}}

监控 URL

{{status}}

状态(up/down)

{{error}}

错误信息

{{timestamp}}

时间戳

{{response_time}}

响应时间

{{status_code}}

HTTP 状态码

示例 Body(企业微信机器人)

{

"msgtype": "markdown",

"markdown": {

"content": "## 🚨 服务异常告警\n- 服务: {{monitor_name}}\n- 状态: {{status}}\n- 时间: {{timestamp}}"

}

}


高级配置

环境变量

变量

默认值

说明

PORT

3000

服务端口

DATA_DIR

/app/data

数据目录

NODE_ENV

production

运行环境

RESET_PASSWORD

-

设置后重启会将密码重置为该值

重置密码

如果忘记密码,可以通过环境变量重置:

environment:

NODE_ENV: production

PORT: "3000"

RESET_PASSWORD: admin # 添加这行

重启容器后密码会被重置为 admin

⚠️ 密码重置后,请删除 RESET_PASSWORD 环境变量并重新启动容器!


反向代理配置

Nginx 配置示例

server 
{
    listen 80;

    server_name monitor.example.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection 'upgrade';

        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;

        proxy_cache_bypass $http_upgrade;

    }

}

Caddy 配置示例

monitor.example.com 
{
    reverse_proxy localhost:3000

}


数据备份

数据存储在

./data/monitor.db文件中(SQLite 数据库)。

备份方法

# 停止容器
docker compose stop

# 备份数据

cp ./data/monitor.db ./data/monitor.db.bak

# 重启容器

docker compose start

恢复数据

docker compose stop
cp ./data/monitor.db.bak ./data/monitor.db

docker compose start


常见问题

Q: Telegram Bot 无法收到群消息?

A: 请检查:

  1. Bot 是否已加入群组

  2. Bot 的 Group Privacy 是否已关闭

  3. Bot Token 是否正确

Q: 如何升级到最新版本?

A: 执行以下命令:

docker compose pull
docker compose up -d

Q: 支持哪些架构?

A: 支持 linux/amd64(x86_64)和 linux/arm64(树莓派 4、Apple M1/M2 等)。


项目地址

欢迎 Star ⭐ 和提交 Issue!


总结

CloudEye 是一款简洁但功能强大的监控面板,特别适合:

  • 个人开发者监控自己的项目

  • 小团队的服务状态监控

  • 需要 Telegram 群组监控的场景

如果你有任何问题或建议,欢迎在评论区留言或到 GitHub 提交 Issue!

评论