リモート Linux サーバーのパフォーマンス (CPU とメモリ使用量) を端末での TOP コマンドの出力のようなものとしてキャプチャし、それをローカル Windows マシンの Excel ファイルにインポートしたいと考えています。Pythonを使用してサーバーに接続し、コマンドを実行してその出力を記録することを考えています。私はPythonにまったく慣れていません。どこから始めるべきかなど、この問題へのアプローチを提案してください。
2 に答える
Python モジュール「fabric」を使用してから、fabricrun
関数を使用して、リモート ホストでコマンドの出力をキャプチャします。
次のようになります。
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 ファイルは、知っていると少し見苦しくなります。しかし、最後の行をよりインテリジェントなものに変更することがすべてです。
見て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
..そして、指定された頻度で指定された期間、mimi への呼び出しを繰り返します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 回繰り返します。その後csv
、ファイルを Excel で開くことができます。
出力例:
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,
リモート サーバーに接続するには、Pythonssh2
モジュールを参照してくださいparamiko
。
@ Christian Groleauが述べたように編集csv
します。ファイルで重い作業を行う場合は、csv
python モジュールを見てください。誰かが、Excel ファイルを直接読み書きするためのモジュールをいくつか書いています (Python は素晴らしいと思いませんか?!)。