Metadata-Version: 2.4
Name: fourier-resm
Version: 1.1.0
Summary: 远程主机资源监控工具：SSH 采集 CPU / 内存 / 网络 / 磁盘 / 温度 + 持续 ping，支持 Web 实时面板与日志回放
Author: Fourier
License: MIT
Project-URL: Homepage, https://gitlab.fftaicorp.com/pfs/resource_monitor
Project-URL: Source, https://gitlab.fftaicorp.com/pfs/resource_monitor
Keywords: monitoring,ssh,ping,resource,system,flask,dashboard
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: System Administrators
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: System :: Monitoring
Classifier: Topic :: System :: Networking :: Monitoring
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: paramiko>=3.0.0
Requires-Dist: flask>=3.0.0
Dynamic: license-file

# 远程主机监控工具

持续 ping 目标 IP 并通过 SSH 采集目标机器的系统资源（CPU / 内存 / Swap / 网络带宽 / 磁盘 IO / loadavg），实时写入 CSV 日志。

## 功能

- **Ping**：默认每 0.5s 一次，延迟精度 0.001 ms（小数点后 3 位 ms），记录每次结果与超时。
- **SSH 资源采集**：默认每 2s 一次，通过 `/proc` 计算 1 秒区间内的 CPU 占用率、网络/磁盘速率，输出：
  - `cpu_percent`（整机 CPU 使用率）
  - `mem_total_kb` / `mem_used_kb` / `mem_avail_kb` / `mem_percent`
  - `swap_total_kb` / `swap_used_kb` / `swap_percent`
  - `net_rx_Bps` / `net_tx_Bps`（所有非 lo 网卡求和，单位 B/s）
  - `disk_read_Bps` / `disk_write_Bps`
  - `loadavg`（1/5/15 分钟负载）
  - `per_interface`（每块网卡的 rx/tx 速率）
- **实时写盘**：每条记录立即 flush 到 CSV。
- **断线自动重连**：SSH 断开后指数退避重连。
- **Ctrl+C** 优雅退出，打印统计。

## 安装

```bash
pip install -r requirements.txt
```

目标机器要求：Linux，可用 `python3`（若无则自动降级到 shell 版本，但数据项会较少）。

## 使用

```bash
# 用 SSH 密钥
python3 monitor.py 192.168.1.100 -u root -k ~/.ssh/id_rsa

# 用密码（交互输入）
python3 monitor.py 192.168.1.100 -u root --ask-pass

# 自定义频率与输出目录
python3 monitor.py 10.0.0.5 -u ubuntu --ping-interval 1.0 --res-interval 1 -o ./logs
```

## 输出

在 `-o` 指定目录（默认 `./logs`）下生成：

- `ping_<host>_<时间戳>.csv`：`timestamp, host, latency_ms, status`
- `resource_<host>_<时间戳>.csv`：见上方字段列表

运行期间每 5 秒在控制台打印一次 ping 丢包 / min/avg/max 汇总。

## 参数

| 参数 | 说明 | 默认 |
| --- | --- | --- |
| `host` | 目标 IP / 主机名 | 必填 |
| `-u/--user` | SSH 用户名 | 当前用户 |
| `-P/--port` | SSH 端口 | 22 |
| `-k/--key` | SSH 私钥路径 | 无（优先尝试 ssh-agent / 默认密钥） |
| `-p/--password` | SSH 密码 | 无 |
| `--ask-pass` | 交互输入密码 | 关 |
| `--ping-interval` | Ping 间隔（秒） | 1.0 |
| `--res-interval` | 资源采样间隔（秒） | 2.0 |
| `-o/--output` | 日志目录 | ./logs |

## 注意

- 本机需具备 `ping` 命令；Linux 下 `-W` 超时为整数秒。
- 若目标机器 ping 禁用 ICMP，ping 会全部超时，但 SSH 资源采集仍正常工作。
- CPU/网络/磁盘速率由脚本内睡眠 1 秒两次采样差分计算，因此实际采集周期 ≈ `res-interval` 但不小于 1 秒。
