2核2G云服务器如何搭建轻量级监控平台:Uptime Kuma + Spring Boot Actuator 实战

前言

最近给自己的服务器增加监控能力。

服务器配置比较普通:

Ubuntu 22.04 云服务器
CPU:2核
内存:2GB
系统盘:50GB

当前运行服务:

Nginx
MySQL
Redis
RabbitMQ
XXL-JOB Admin
多个 Spring Boot 服务

目标很简单:

  • 实时查看服务是否正常
  • Spring Boot 项目异常及时告警
  • 部署失败及时发现
  • 支持邮件通知
  • 中文友好
  • 尽量节省服务器资源

最开始考虑的是 Spring Boot Admin,但最终选择了 Uptime Kuma。

本文记录整个过程。


一、现有监控方案分析

服务器原本安装了 Netdata。

查看进程:

ps -eo pid,cmd,%mem,%cpu --sort=-%mem | head -20

发现:

/opt/netdata/bin/srv/netdata
MEM 7.9%

占用大约:

150MB~200MB

对于 2G 内存服务器来说已经不算小。


Netdata 的问题

虽然 Netdata 功能强大:

  • CPU
  • 内存
  • 网络
  • 磁盘
  • 进程

全部支持。

但实际使用过程中有几个问题。

1. 中文支持一般

界面主要是英文。

对于偶尔查看的开发人员来说阅读成本较高。


2. 部分功能依赖 Cloud

新版 Netdata 更推荐配合 Cloud 使用。

对于个人服务器来说:

不想注册
不想依赖外网
只想本地使用

体验并不好。


3. 无法解决业务监控

Netdata知道:

CPU是否高
内存是否满
磁盘是否爆

但不知道:

SpringBoot挂没挂
XXL-JOB挂没挂
接口是否正常

而这些才是我真正关心的。


二、评估服务器资源

查看内存:

free -h

结果:

Mem: 1.9Gi
Used: 1.4Gi
Free: 103Mi
Available: 342Mi

Swap: 2.0Gi
Used: 988Mi

已经明显存在内存压力。


停止 Netdata

执行:

sudo systemctl stop netdata

再次查看:

free -h

结果:

Mem: 1.9Gi
Used: 1.0Gi
Free: 223Mi
Available: 724Mi

变化如下:

项目 停止前 停止后
Available 521MB 724MB
Free 93MB 223MB

直接释放约:

200MB

内存。

对于 2G 服务器来说收益非常明显。


三、为什么没有选择 Spring Boot Admin

Spring Boot Admin 非常优秀。

支持:

JVM
线程
日志
Bean
Mappings
Health
Metrics

对于 Spring Boot 项目来说几乎是官方级方案。

但是:

Spring Boot Admin 本身也是一个 Spring Boot 项目

即使限制:

-Xms128m
-Xmx256m

实际运行内存通常:

200MB~400MB

对于当前服务器来说:

有点奢侈

因此放弃。


四、最终选择:Uptime Kuma

Uptime Kuma 定位非常明确:

服务存活监控
告警通知
状态页展示

资源占用极低:

50MB~100MB

完全符合当前需求。


五、安装 Docker

Ubuntu 安装 Docker:

sudo apt update

sudo apt install -y docker.io

sudo systemctl enable docker

sudo systemctl start docker

验证:

docker -v

输出:

Docker version 29.x.x

安装成功。


六、解决 Docker Hub 拉取超时

国内服务器经常遇到:

failed to resolve reference
i/o timeout

原因是 Docker Hub 访问慢。

配置镜像加速:

sudo mkdir -p /etc/docker

创建:

sudo vim /etc/docker/daemon.json

内容:

{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://hub.rat.dev"
  ]
}

重启:

sudo systemctl daemon-reload

sudo systemctl restart docker

七、部署 Uptime Kuma

创建数据目录:

sudo mkdir -p /data/uptime-kuma

启动:

sudo docker run -d \
  --name uptime-kuma \
  --restart unless-stopped \
  -p 3001:3001 \
  -v /data/uptime-kuma:/app/data \
  louislam/uptime-kuma:latest

查看:

sudo docker ps

结果:

uptime-kuma
Up (healthy)

启动成功。


测试访问

curl localhost:3001

返回:

Found. Redirecting to /dashboard

说明服务正常。


八、配置域名访问

申请子域名:

monitor.example.com

解析到服务器公网 IP。


Nginx 配置

创建:

/etc/nginx/conf.d/uptime-kuma.conf

配置:

upstream uptime_kuma {
    server 127.0.0.1:3001;
}

server {
    listen 80;
    server_name monitor.example.com;

    location / {
        proxy_pass http://uptime_kuma;

        proxy_http_version 1.1;

        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 Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

验证

sudo nginx -t
sudo systemctl reload nginx

访问:

http://monitor.example.com

即可打开。


九、申请 HTTPS

使用 Certbot:

sudo certbot --nginx -d monitor.example.com

自动完成:

证书申请
Nginx配置
HTTPS跳转
自动续期

最终访问:

https://monitor.example.com

十、监控哪些服务

推荐监控以下核心组件。

Spring Boot

开启:

/actuator/health

例如:

https://api.example.com/actuator/health

Redis

监控类型:

TCP Port

配置:

127.0.0.1
6379

MySQL

监控类型:

TCP Port

配置:

127.0.0.1
3306

RabbitMQ

监控类型:

TCP Port

配置:

127.0.0.1
5672

XXL-JOB

监控:

https://job.example.com/xxl-job-admin

即可。


十一、邮件告警

进入:

Settings
→ Notifications

配置 SMTP。

例如 QQ 邮箱:

smtp.qq.com
465
SSL/TLS

填写授权码即可。

实现:

服务DOWN
↓
自动检测
↓
邮件通知

十二、资源占用对比

实际测试结果:

服务 内存占用
Netdata 约200MB
Docker 约20MB
Uptime Kuma 约80MB
总计 约100MB

优化效果:

项目 优化前 优化后
Available Memory 521MB 724MB
可用内存提升 - +203MB

对于 2G 内存服务器来说提升非常明显。


十三、最终监控架构

                     +----------------+
                     | Uptime Kuma    |
                     +--------+-------+
                              |
        +---------------------+--------------------+
        |                     |                    |
        ▼                     ▼                    ▼
 SpringBoot            XXL-JOB Admin         Redis/MySQL/RabbitMQ
 /actuator/health           HTTP                    TCP Port
        |
        ▼
 邮件告警

总结

对于个人项目或小团队:

2核2G

服务器环境下:

不推荐直接上:

Prometheus
Grafana
SkyWalking
ELK

资源成本偏高。

推荐:

Uptime Kuma
+
Spring Boot Actuator
+
邮件告警

优点:

  • 部署简单
  • 中文友好
  • 资源占用低
  • 支持 HTTPS
  • 支持邮件/企业微信/飞书/钉钉
  • 非常适合中小型 Spring Boot 项目

对于低配置云服务器来说,这是一个性价比非常高的监控方案。

后续如果服务器升级到:

4核8G
甚至更高

再考虑引入:

Prometheus + Grafana
Spring Boot Admin
SkyWalking

会更加合适。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐