前言
1. 什么是探针
探针(probe),在剑桥词典里的解释为:a device that is put inside something to test or record information。翻译过来就是:置于某物内部以测试或记录信息的装置。那么对于VPS而言,探针就是通过在系统中不断探测以及记录设备信息的一种内置程序,并且可以通过网页实时展示出来。
如图所示:
探针会探测以及记录VPS的各种信息,比如图中所示的:
- 服务器位置(左上角旗帜)
- Linux系统
- CPU使用率
- 内存使用率
- 硬盘空间使用率
- 流量使用情况
- 网络速度
- 系统运行时间
2. 为什么要用探针
那么我们为什么要使用探针呢?我觉得有如下几个原因:
- 获取系统信息与可视化
根据认知心理学和神经科学的原理(具体原理就不详述了),人脑处理图像信息的速度比处理纯文本要快得多。因此,将VPS各种需要阅读的文字类信息,尽可能转为直观的图像类信息,这无疑减少了获取信息的时间,并且无需记忆和输入任何命令。
- 资源规划和提升
通过观察探针的数据,了解VPS的系统资源,如CPU、内存、硬盘等的实际消耗情况,可以为是否需要升级VPS配置提供数据支撑。
- 多VPS管理
对于拥有多个VPS的用户,使用探针可以建立一个可视化的监控面板,只需要访问一个页面,就能同时看到所有VPS的状态,极大地提升管理效率。
以上内容与komari安装无关,仅是作为补充知识。具体教程请看下文。
一、komari介绍
官方介绍:Komari是一款轻量级的自托管服务器监控工具,旨在提供简单、高效的服务器性能监控解决方案。它支持通过Web界面查看服务器状态,并通过轻量级Agent收集数据。
特性:
- 轻量高效:低资源占用,适合各种规模的服务器。
- 自托管:完全掌控数据隐私,部署简单。
- Web 界面:直观的监控仪表盘,易于使用。
开源地址:GitHub – komari-monitor/komari: A simple server monitor tool.
作为一款自托管服务器监控工具(探针),我觉得komari做到了轻量美观的完美平衡,甚至还是开源!这还要啥自行车呢?!我们马上开始安装!
二、安装部署
安装部署分为两个部分,也就是主控端(面板机)和被控端(探针机)。主控端只需要安装一个就可以了,被控端需要在每个你需要监控的机器上部署。
1.面板机安装部署【多种方法,选用自己喜欢的即可】
1.1 容器云部署
对于主控机而言,稳定是很重要的。因此选用一些容器云来部署面板机是个很不错的方案。这里选用komari文档里提供的雨云作为演示,当然你如果想选用其他的容器云(比如Claw Run)也是可以的。

在总览页进入云应用
搜索komari并点击安装

或者注册登录后直接通过URL访问

Tip默认配置基本可以不用动,但是建议选中国香港,因为国际互联延迟低且免备案。
由于我没有充值水滴,后面的步骤就不演示啦。
1.2 使用一键安装脚本
1.2.1 安装
首先通过SSH工具连接VPS,并下载komari一键安装脚本
curl -fsSL https://raw.githubusercontent.com/komari-monitor/komari/main/install-komari.sh -o install-komari.sh
赋予komari一键安装脚本权限
chmod +x install-komari.sh
执行komari一键安装脚本
./install-komari.sh
会出现以下图示。

选择1)安装komari 后,脚本会自动进行安装
Success通过访问
http://<your_server_ip>:25774,即可访问探针。
1.2.2 升级
执行komari一键安装脚本
./install-komari.sh
选择2)升级komari 后,脚本会自动进行升级

1.2.3 卸载
执行komari一键安装脚本
./install-komari.sh
选择3)卸载komari 后,脚本会自动进行卸载

1.3 Docker 部署
1.3.1 安装
创建komari的数据目录并进入
mkdir -p ./komari/data && cd ./komari
运行 Docker 容器
docker run -d \
-p 25774:25774 \
-v ./data:/app/data \
--name komari \
ghcr.io/komari-monitor/komari:latest
查看默认账号和密码
docker logs komari

Success通过访问
http://<your_server_ip>:25774,即可访问探针。
1.3.2 升级
拉取最新镜像
docker pull ghcr.io/komari-monitor/komari:latest
再次创建容器
docker run -d \
-p 25774:25774 \
-v ./data:/app/data \
--name komari \
ghcr.io/komari-monitor/komari:latest
1.3.3 卸载
停止容器
docker stop komari
删除容器
docker rm komari
1.4 二进制文件部署
1.4.1 安装
访问komari的GitHub Release 页面 下载适用于你操作系统的最新二进制文件。
以AMD架构为例子:
下载komari的二进制文件
curl -L -o komari https://github.com/komari-monitor/komari/releases/download/1.0.9/komari-linux-amd64
或者
wget -O komari https://github.com/komari-monitor/komari/releases/download/1.0.9/komari-linux-amd64
赋予权限
chmod +x komari
测试是否能成功运行 Komari
./komari server -l 0.0.0.0:25774
成功则会出现如下提示:

但我们需要持久化后台运行,因此需要创建服务文件(也可以使用诸如nohup、screen或者tmux的方式实现)。
先ctrl+c退出komari的执行
创建服务文件
nano /etc/systemd/system/komari.service
添加以下内容并保存
[Unit]
Description=Komari Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/komari
ExecStart=/root/komari/komari server -l 0.0.0.0:25774
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启用并启动服务
systemctl daemon-reload
systemctl enable komari
systemctl start komari
查看是否成功运行
systemctl status komari
查看账号密码
journalctl -u komari
Success通过访问访问
http://<your_server_ip>:25774,即可访问探针。
1.4.2 升级
先停止服务
systemctl stop komari
重新下载最新的二进制文件
curl -L -o komari https://github.com/komari-monitor/komari/releases/download/<新版本号>/komari-linux-amd64
或者
wget -O komari https://github.com/komari-monitor/komari/releases/download/<新版本号>/komari-linux-amd64
重新赋予权限
chmod +x komari
重新启动komari
systemctl restart komari
1.4.3 卸载
停用并禁止komari
systemctl stop komari
systemctl disable komari
删除systemd服务配置文件
rm /etc/systemd/system/komari.service
systemctl daemon-reload
删除komari二进制文件及其所在目录
rm -rf /root/komari
2.域名解析以及SSL证书申请
在探针机安装部署之前,我们需要将域名指向到VPS的公网IP地址,并通过Nginx将探针服务配置到相关网址上。同时,为了安全起见,我们需要申请SSL证书,用于在浏览器和VPS之间建立加密连接,也就是将HTTP升级为HTTPS。
下面我以大善人Cloudflare平台为例,进行演示:
2.1 域名解析
添加A解析
2.2 SSL证书申请
安装Nginx
apt install nginx
设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
配置Nginx
创建komari的Nginx
nano /etc/nginx/sites-available/komari
添加以下内容
server {
listen 80;
server_name tz.linux.do; # 你设置的A解析的域名
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name tz.linux.do; # 你设置的A解析的域名
# SSL证书配置
ssl_certificate /opt/komari/server.cer; # 替换为你的证书路径
ssl_certificate_key /opt/komari/server.key; # 替换为你的私钥路径
location / {
proxy_pass http://127.0.0.1:25774;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
# 禁用代理缓冲
proxy_buffering off;
# 允许大文件上传(50M)
client_max_body_size 50M;
}
}
软链接Nginx配置以应用
ln -s /etc/nginx/sites-available/komari /etc/nginx/sites-enabled/
测试配置
nginx -t
重启Nginx
systemctl reload nginx
申请证书
这里使用acme.sh申请SSL证书,这里以tz.gk.do为例。
面板机上安装acme.sh
curl https://get.acme.sh | sh -s email=你的邮箱

创建一个shell的alias,以便使用
alias acme.sh=~/.acme.sh/acme.sh
切换CA机构
acme.sh --set-default-ca --server letsencrypt
申请证书,按实际情况修改面板域名
acme.sh --issue -d tz.gk.do -k ec-256 --webroot /var/www/html

复制生成的证书到文件夹
cp /root/.acme.sh/tz.linux.do_ecc/tz.gk.do.cer /opt/komari/server.cer
cp /root/.acme.sh/tz.linux.do_ecc/tz.gk.do.key /opt/komari/server.key
安装证书,按实际情况修改面板域名和证书路径
acme.sh --install-cert -d tz.gk.do --ecc --key-file /opt/komari/server.key --fullchain-file /opt/komari/server.cer --reloadcmd "systemctl force-reload nginx"

Success现在就可以通过HTTPS访问komari啦~
3.探针机安装部署
探针机安装就非常简单啦,几乎可以说是一键安装
点击添加节点,输入节点名称

点击下载按钮获取安装命令
复制安装命令
在探针机中执行上一步复制的命令

Success这样在首页就可以看到探针机的信息啦
三、页面美化
1. 主题美化
对于新手而言,要写一个探针主题显然是不容易的,因此,我们直接选用大佬的主题。
主题开源地址:GitHub – svnmoe/komari-web-mochi: Another Komari Web UI Mochi
下载压缩包

在首页点击后台设置

点击设置-主题管理-上传主题

上传后点击⚙️进行应用

这样就可以在首页看到效果啦,并且有多种样式可选

2. CSS美化
在设置-站点-自定义头部里面添加以下代码
Note需要自己选择需要的特效以及修改相应的信息
<script src="https://cdn.jsdelivr.net/gh/mocchen/cssmeihua/js/aixin.js"></script> <!-- 点击爱心特效 -->
<script src="https://cdn.jsdelivr.net/gh/mocchen/cssmeihua/js/yinghua.js"></script> <!-- 页面樱花效果 -->
<span class="js-cursor-container"></span>
<script src="https://cdn.jsdelivr.net/gh/mocchen/cssmeihua/js/xiaoxingxing.js"></script><!-- 小星星效果 -->
<script>
// *** 重要:请在这里修改为你网站的实际上线日期和时间! ***
// 格式为 'YYYY-MM-DDTHH:mm:ssZ'。
// 例如:'2023-01-01T08:00:00Z' 表示 2023年1月1日早上8点(UTC时间)。
// 如果你知道的是本地时间,也可以省略 'Z',例如:'2023-01-01T08:00:00'
const launchDate = new Date('2025-05-20T08:00:00');
// 网站运行时间显示部分的 HTML 结构
const uptimeHtmlContent = `
<div id="dynamic-uptime-display">
<span class="uptime-text">本站已运行:</span>
<span class="uptime-duration" id="days">0</span><span class="uptime-unit">天</span>
<span class="uptime-duration" id="hours">0</span><span class="uptime-unit">小时</span>
<span class="uptime-duration" id="minutes">0</span><span class="uptime-unit">分钟</span>
<span class="uptime-duration" id="seconds">0</span><span class="uptime-unit">秒</span>
</div>
`;
// 网站运行时间显示部分的 CSS 样式 (请根据你的网站风格进行微调!)
const uptimeCssContent = `
/* 网站运行时间显示容器的样式 - 模仿磨砂玻璃效果 */
#dynamic-uptime-display {
font-family: 'Segoe UI', sans-serif; /* 字体 */
font-size: 0.95em; /* 基础字号,可调 */
color: #333; /* 文字颜色,可调 */
/* === 磨砂效果关键样式,请根据你的网站卡片或底部元素进行微调 === */
background-color: rgba(255, 255, 255, 0.7); /* 半透明背景色,调整最后一个值 (0.0-1.0) 控制透明度 */
border: 1px solid rgba(255, 255, 255, 0.3); /* 半透明边框,调整颜色和透明度 */
border-radius: 8px; /* 圆角大小,与网站卡片保持一致 */
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 阴影效果,调整参数 */
/* 模糊效果 (部分旧浏览器可能不支持) */
-webkit-backdrop-filter: blur(8px); /* Safari 和 Chrome */
backdrop-filter: blur(8px); /* 标准写法,调整模糊程度 */
/* === 磨砂效果关键样式结束 === */
/* 居中显示 */
display: block; /* 确保是块级元素 */
margin: 20px auto 20px auto; /* 上下外边距20px,左右自动居中 */
width: fit-content; /* 宽度适应内容 */
max-width: 95%; /* 防止在小屏幕上溢出 */
text-align: center; /* 内部文字居中 */
padding: 10px 15px; /* 内边距 */
}
/* "本站已运行" 文本样式 */
#dynamic-uptime-display .uptime-text {
margin-right: 5px;
color: #555; /* 可调 */
}
/* 显示时间数字(天、小时、分钟、秒)的样式 */
#dynamic-uptime-display .uptime-duration {
font-size: 1.1em; /* 可调 */
font-weight: bold;
color: #007bff; /* 醒目颜色,可调 */
margin: 0 3px;
}
/* 时间单位(天、小时、分钟、秒)的样式 */
#dynamic-uptime-display .uptime-unit {
font-size: 0.85em; /* 可调 */
color: #777; /* 可调 */
margin-right: 8px;
}
/* 针对手机等小屏幕设备的响应式调整 */
@media (max-width: 768px) {
#dynamic-uptime-display {
font-size: 0.85em;
padding: 8px 12px;
margin: 15px auto; /* 手机端调整外边距 */
border-radius: 6px; /* 手机端圆角可略小 */
}
#dynamic-uptime-display .uptime-duration {
font-size: 1em;
}
#dynamic-uptime-display .uptime-unit {
font-size: 0.75em;
}
}
`;
// 这个函数用来计算并更新显示的时间
function updateUptime() {
const now = new Date();
const diff = now - launchDate;
if (diff < 0) {
document.getElementById('days').textContent = 0;
document.getElementById('hours').textContent = 0;
document.getElementById('minutes').textContent = 0;
document.getElementById('seconds').textContent = 0;
return;
}
const seconds = Math.floor(diff / 1000);
const minutes = Math.floor(seconds / 60);
const hours = Math.floor(minutes / 60);
const days = Math.floor(hours / 24);
document.getElementById('days').textContent = days;
document.getElementById('hours').textContent = hours % 24;
document.getElementById('minutes').textContent = minutes % 60;
document.getElementById('seconds').textContent = seconds % 60;
}
// 动态注入 HTML 和 CSS,并启动计时器
function injectUptimeDisplay() {
// 注入 CSS
const styleTag = document.createElement('style');
styleTag.textContent = uptimeCssContent;
document.head.appendChild(styleTag);
// 尝试找到主要内容容器 (例如包含监控卡片的区域)
let mainContentContainer = document.querySelector('.container.dashboard') || // Uptime Kuma 仪表板容器
document.querySelector('.container.main') || // Uptime Kuma 主容器
document.querySelector('.container') || // 通用容器
document.querySelector('.dashboard-body') || // Nezha Probe 可能的仪表板体
document.querySelector('main'); // HTML5 main 标签
// 如果以上容器都找不到,则尝试找到页脚元素
if (!mainContentContainer) {
mainContentContainer = document.querySelector('footer'); // 标准 footer 标签
}
// 如果还是找不到,作为最后手段,插入到 body 的末尾
if (!mainContentContainer) {
mainContentContainer = document.body;
console.warn('未找到合适的仪表板/主内容/页脚容器,网站运行时间将插入到 body 底部。');
}
// 创建一个临时的 div 来解析 HTML 字符串
const tempDiv = document.createElement('div');
tempDiv.innerHTML = uptimeHtmlContent;
const uptimeElement = tempDiv.firstElementChild; // 获取实际的 uptime div
// 将运行时间显示插入到目标容器的末尾
mainContentContainer.appendChild(uptimeElement);
console.log('网站运行时间已插入并尝试应用磨砂效果。');
// 启动运行时间计时器
updateUptime();
setInterval(updateUptime, 1000);
}
// 确保在 DOM 完全加载后再执行注入操作
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', injectUptimeDisplay);
} else {
injectUptimeDisplay();
}
</script>
效果如下:















