如何捕获远程Linux服务器的性能?
我想定期获取远程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文件看起来可能有点乱,但关键是要把最后一行改得更聪明一些。