文档目录
监控
为每个 VM 启用轮询,了解采集的指标,并查看确切的探测命令。
这里的监控是无代理的:不会在服务器上安装任何东西,也不会开放额外端口。 应用为每个被监控的 VM 维持一条 SSH 连接,每个轮询周期只运行一条只读命令。
为某个 VM 启用监控
打开该 VM 的监控标签页,然后:
- 打开启用开关。
- 选择用于轮询的凭据 —— 应使用低权限账户,参见 凭据。
- 设置轮询间隔(秒)。大多数情况下 60 秒是比较合理的折中值。
轮询会在大约 15 秒内开始 —— 后台监控任务会周期性检查哪些 VM 已启用, 并将其与正在运行的任务匹配。关闭开关后,任务也会在同样的时间范围内停止。
立即轮询按钮会立刻执行一次轮询,而不必等待下一个计划周期。
加密库锁定意味着监控停止
轮询需要凭据,而凭据保存在加密库中。因此:
- 锁定加密库 → 所有轮询任务停止。
- 解锁加密库 → 任务自动重新启动。
- 锁屏 → 无影响,监控照常继续运行。
采集的指标
| 分组 | 内容 |
|---|---|
| 系统负载 | 运行时间、1 分钟负载均值、CPU 百分比 |
| 内存 | 已用/总内存,已用/总交换空间 |
| 磁盘 | 每个挂载点的已用量、总量、百分比 |
| 网络 | 每秒接收/发送字节数 |
| 进程 | CPU 占用最高的六个进程 |
| 安全 | 监听端口、账户、已授权的 SSH 密钥、sudoers、登录日志 |
CPU 百分比和网络速率是在相邻两次轮询之间推算得出的 —— 因此启用监控后 的第一次轮询不会有这两项数值。
历史数据与保留期
- 原始采样数据保留 14 天,之后会被清理。
- 与此同时,数据会被聚合为每日汇总并长期保存。月度报告读取的是这张 汇总表,而不是原始采样 —— 如果读取原始采样,“月度报告” 实际上会 悄悄地只包含两周的数据。
监控标签页中的图表取自这 14 天的原始采样窗口。
服务器无响应时
单次轮询失败属于正常情况。连续两次失败会将该 VM 标记为不可达, 并创建一个事件。
每次失败后,轮询间隔会逐步退避(最多 5 分钟),以避免持续冲击一台已经 失联的机器。当机器恢复后,轮询间隔会恢复正常,并记录一个恢复事件。
探测命令
当客户问 “你们的软件在我们服务器上到底运行了什么” 时,您需要的就是这个。 该命令是源代码中的一个常量,绝不会由用户数据拼接而成,应用会原样展示 (在监控标签页中点击查看探测命令按钮)。
LC_ALL=C; export LC_ALL
echo '@@VMOPS:uptime@@'; cat /proc/uptime
echo '@@VMOPS:load@@'; cat /proc/loadavg
echo '@@VMOPS:cpu@@'; grep '^cpu ' /proc/stat
echo '@@VMOPS:mem@@'; grep -E '^(MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree):' /proc/meminfo
echo '@@VMOPS:net@@'; cat /proc/net/dev
echo '@@VMOPS:disk@@'; df -P -k
echo '@@VMOPS:procs@@'; ps -eo pcpu,pmem,comm --sort=-pcpu | head -6
echo '@@VMOPS:ports@@'; ss -H -tuln || netstat -tuln
echo '@@VMOPS:users@@'; cut -d: -f1,3,7 /etc/passwd
echo '@@VMOPS:keys@@'; # readable authorized_keys file contents
echo '@@VMOPS:sudoers@@'; cat /etc/sudoers /etc/sudoers.d/*
echo '@@VMOPS:auth@@'; journalctl -u sshd # or /var/log/auth.log
echo '@@VMOPS:fail2ban@@'; fail2ban-client status sshd
echo '@@VMOPS:end@@'
这个设计背后有四条原则:
一次往返。 每次轮询都只是一次 sh -c 调用,返回一个用分隔符隔开的
单一数据块。同时监控 30 台机器不应该意味着 300 个 exec 通道。
读取 /proc,而不是 top。 top、vmstat、free 的输出格式会因
发行版和语言环境而不同;/proc 则不会。
固定且可审计。 该命令绝不会根据输入数据拼接组装 —— 不存在命令注入的 攻击面,其内容也随时可供检查。
只降级,绝不崩溃。 任何需要 root 权限但不可用的部分会返回为空, 其余轮询内容照常返回。