如何捕获远程Linux服务器的性能?

-1 投票
2 回答
2263 浏览
提问于 2025-04-17 16:56

我想定期获取远程Linux服务器的性能数据,比如CPU和内存使用情况,类似于在终端中运行TOP命令的输出,然后把这些数据导入到我本地Windows机器上的Excel文件里。

我在考虑用Python来连接到服务器,执行这个命令,并记录它的输出。

我对Python完全不熟悉,请给我一些建议,比如我应该从哪里开始,怎么做等等。

2 个回答

1

看看这个 os.times

>>> import os
>>> os.times()
(0.01, 0.0, 0.0, 0.0, 1361716040.0)
>>> help(os.times)
times() -> (utime, stime, cutime, cstime, elapsed_time)

Return a tuple of floating point numbers indicating process times.

然后在一段时间内,按照一定的频率重复调用 os.times,这样就可以模拟 top 命令的效果。

把这些数据导入到Excel里稍微复杂一点,但Excel可以理解 csv 格式,也就是用逗号分隔的文件,所以可以尝试像这样做:

import time
from datetime import datetime
import os

with open('output.csv', 'w') as co:    
    for i in range(100):
        co.write('%s, %f,\n' % (datetime.now(), os.times()[0]))

    time.sleep(5)

这段代码会打开一个名为 "output.csv" 的文件,写入当前的时间和CPU使用情况,等待5秒后再重复这个过程100次。然后你就可以在Excel中打开这个 csv 文件了。

示例输出:

2013-02-24 14:40:12.254806, 0.01,
2013-02-24 14:40:12.304922, 0.05,
2013-02-24 14:40:12.357945, 0.06,
2013-02-24 14:40:12.404362, 0.04,

要连接到远程服务器,可以看看Python的 ssh2 模块 paramiko

补充:正如 @Christian Groleau 提到的,如果你打算频繁处理 csv 文件,可以看看 csv 这个Python模块。还有人 专门写了一些模块 用于直接读取和写入Excel文件(Python真是太棒了!)

2

使用Python的“fabric”模块,然后用fabric的run函数来获取远程主机上命令的输出。

大概是这样的:

import csv
from fabric.api import *

env.hosts = ['user@remotehost:22']
FILENAME = '/tmp/info.csv'


def get_info():
    output = run('top -bn 1')
    lines = output.splitlines()

    with open(FILENAME, 'wb') as csvfile:
        info = csv.writer(csvfile)
        for l in lines:
             info.writerow(l.split())

然后在脚本所在的目录下运行:fab get_info

这会把远程机器上“top”命令的输出写入一个本地的csv文件。这个csv文件可以用Excel打开。现在这个csv文件看起来可能有点乱,但关键是要把最后一行改得更聪明一些。

撰写回答