当你的服务器或者网站越来越多,就需要一个实时的监控工具来了解连通性,如果发送宕机等情况也能第一时间知道。网上有很多不错的相关项目,这里就介绍一款适合自建的开源项目:Uptime Kuma

uptime-kuma-demo

Uptime Kuma 是一个开源的监控工具,功能类似于 Uptime Robot。支持 HTTP(s) / TCP / HTTP(s) 关键字 / Ping / DNS 记录 / Push / Steam 游戏服务的实时监控,并且搭建比较简单,界面也很简洁大方(查看官方的在线演示)。服务下线通知也支持很多种方式,常见的 Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP) 都能很好的支持,以及其它多达 70+ 种消息推送方式。经过一段时间的使用,感觉很不错,完全能满足一般个人用户或者是小型项目的监控需求。

环境准备

Uptime Kuma 支持脚本或者 Docker 安装运行,比较简单,官方文档有详细的介绍,就不再赘述,这里介绍下使用 Node.js 手动搭建的过程。Uptime Kuma 需要 Node.js 14 或者更高的版本。

以下演示系统为 Debian 11,为了方便默认采用 root 用户执行命令。

安装 Node.js 和 NPM

目前 Debian 11 官方库的 Node.js 版本为 v12.22.5 版本,npm 为 7.5.2 版本,不满足要求,因此需要安装更高的版本,可以安装由 NodeSource 提供的 Node.js 官方二进制发行版。

使用最新版本

截至目前 (2022-01-07),Node.js 的最新版本为 v17.x

# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_current.x | sudo -E bash -
sudo apt-get install -y nodejs

# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_current.x | bash -
apt-get install -y nodejs

使用 LTS 版本(推荐)

我这里安装的是 LTS(长期支持)版本 v16.x

# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt-get install -y nodejs

检查 Node.js 和 NPM 版本:

node -v
npm -v

安装 Uptime Kuma

获取最新的仓库并安装:

git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup

安装完成后可以直接运行:

node server/server.js

默认会运行在 3001 端口上,可以通过浏览 http://localhost:3001 检查是否运行成功。打开页面应该会出现添加用户界面:

uptime-kuma-login

登录后就进入了后台控制面板页面,此时你就可以点击左上方的按钮添加第一个监控节点了,设置里面可以设置语言,支持中文。

uptime-kuma-panel

后台运行

这里推荐使用 pm2 后台运行 Uptime Kuma。

安装 PM2:

npm install pm2 -g

在 uptime-kuma 目录下运行:

pm2 start server/server.js --name uptime-kuma

也可以加上 port 参数指定运行的端口:

pm2 start server/server.js --name uptime-kuma -- --port=80

设置重启服务器后自启动:

pm2 startup
pm2 save

补充一些 PM2 的常用命令:

pm2 list        # 查看所有运行中的应用
pm2 stop 0      # 停止 id 为 0 的应用
pm2 restart     # 重启
pm2 delete 0    # 删除 id 为 0 的应用
pm2 monit       # 显示每个应用程序的CPU和内存占用情况
pm2 show [name] # 显示应用程序的所有信息
pm2 save        # 保存当前应用列表
pm2 startup     # 创建开机自启动命令

Nginx 反代

官方提供了 Nginx / Apache / Caddy 等常见 web 服务器的反代配置示例,这里就简单的写一下 Nginx 的示例:

server {
  listen 443 ssl http2;
  server_name sub.domain.com;
  ssl_certificate     /path/to/ssl/cert/crt;
  ssl_certificate_key /path/to/ssl/key/key;

  location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass         http://localhost:3001/;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection "upgrade";
  }
}

和一般反代的区别是加了 Upgrade 参数,因为 Uptime Kuma 使用了 webhook,因此必须加上这两行设置。

更新 Uptime Kuma

更新的话也很简单,先检查最新的文件:

git fetch --all
git checkout 1.11.1 --force

安装相关依赖并预构建:

npm ci --production
npm run download-dist

最后重启即可:

pm2 restart uptime-kuma