多台电脑进程统一监控:小团队也能轻松搞定

公司里七八台办公电脑,开发、测试、运维各用各的,时不时有人喊一声‘我这边程序卡死了’,查起来费劲得很。要是能在一个地方看到所有机器上跑了哪些进程,谁占着CPU不放,那就省事多了。

为什么需要统一看进程?

以前一台电脑出问题,直接打开任务管理器就行。现在不一样了,尤其是小团队搞项目,前端在A机跑服务,后端在B机启容器,数据库在C机躺着,日志分散各处。一个人改配置,其他人不知道,等发现问题时,往往已经影响了一圈人。

比如上周,测试同事说接口响应慢得像蜗牛。一查才发现,有台老服务器上被人偷偷起了个数据导出脚本,占了80% CPU,其他服务全被拖垮。如果早能在一张页面上看到所有机器的活跃进程,这种问题根本不用排查半小时。

简单可行的方案:用PsTools批量查看

不是非得上昂贵的监控平台。Windows环境下,微软自家的PsTools就能解决基础需求。下载解压后,用 psexecpslist 命令远程拉取进程信息。

psexec \\192.168.1.10 -u admin -p 12345 cmd /c tasklist > proc_10.txt
psexec \\192.168.1.11 -u admin -p 12345 cmd /c tasklist > proc_11.txt

把常用主机IP写成批处理脚本,定时跑一遍,结果汇总到本地文本。虽然原始了些,但胜在轻量,适合不想折腾服务器的场景。

进阶一点:用Python + paramiko集中抓取

Linux机器多的话,SSH是更通用的方式。写个小脚本,通过SSH登录每台机器执行 ps aux,把结果收上来存进CSV或者网页表格。

import paramiko

hosts = [
    {"ip": "192.168.1.20", "user": "dev", "pwd": "pass123"},
    {"ip": "192.168.1.21", "user": "ops", "pwd": "pass456"}
]

for host in hosts:
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(host["ip"], username=host["user"], password=host["pwd"])
    stdin, stdout, stderr = client.exec_command("ps aux --sort=-%cpu | head -10")
    print(f"=== {host['ip']} 最高资源进程 ===")
    print(stdout.read().decode())
    client.close()

每天早晚跑一次,邮件发个报告,谁家机器跑了异常进程一目了然。

真要省心,还是得上专业工具

上面这些办法对付几台机器还行,机器一多就吃力。这时候可以考虑Zabbix、Prometheus这类开源监控系统。装个Agent,自动上报进程列表和资源占用,还能设阈值告警。

比如Prometheus配合Node Exporter,再加个Grafana面板,打开浏览器就能看到所有节点的实时进程快照。某个服务突然消失或者CPU飙升,立刻弹提示,不用等人反馈。

别以为只有大公司才用得起。这些工具免费,树莓派都能跑服务端。关键是提前布好,别等到炸了才想起来该监控了。

别忽视权限和安全

批量访问多台电脑,账号密码怎么管是个问题。明文写脚本里肯定不行,万一文件泄露全完了。建议用密钥认证,或者把凭证放进环境变量,至少别裸奔。

还有就是权限最小化。监控账户只给读取进程的权限,别顺手给了管理员全套权限。不然哪天被人利用,整个内网都可能被串着打穿。