私の仕事は Server Density のようなサーバー監視ツールを作ることです。サーバーのリストがあり、15秒ごとに各サーバーのCPU情報、RAM情報、ディスク使用量などが必要で、そのプロットを印刷します。バックエンド DB として mongo を使用して、django でプロジェクトをセットアップしました。ローカル システムでこれらのパラメータを取得できる Python スクリプトを作成しました。今、私の仕事は、この情報を Mongo-DB に保存することです。パラメータの種類ごとに対応するモデルを作成しました。これは私が作成したモデルです。
class CpuUsage(Document):
server = ReferenceField(ServerInfo, db_field='se', required=False)
sys_time = DateTimeField(db_field='st', required=False)
#CPU=
usr = StringField(db_field='u', required=False)
nice = StringField(db_field='n', required=False)
sys = StringField(db_field='sy', required=False)
iowait = StringField(db_field='io', required=False)
irq = StringField(db_field='ir', required=False)
soft = StringField(db_field='so', required=False)
steal = StringField(db_field='st', required=False)
guest = StringField(db_field='g', required=False)
idle = StringField(db_field='id', required=False)
meta = {
'indexes': ['server']
}
私のスクリプトには次の 2 つの関数があります。1) cpu_info cpu パラメータをディクショナリに抽出します。
def cpu_info(): cpu_parameters = {} ram_parmeters = {} p_info = '/home/bhavuk/Desktop/p_info' #p_file = open(p_info, 'w') cmd1 = 'mpstat -P ALL >'+ p_info p = subprocess.Popen(cmd1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) cpu_cores=open(p_info, 'r').read().split('\n') #for i in range(0, len(cpu_cores)): # print i, cpu_cores[i] print "current cpu state:\n" for i in range(2,len(cpu_cores)-1): cpu_parameters[i-2] = cpu_cores[i].split('\t') print cpu_parameters[i-2] save_cpu_info(cpu_parameters)
2) これにより、辞書内に含まれる情報が mongodb に保存されます。
def save_cpu_info(parameters): s = ServerInfo() #need to correct s.save() for i in xrange(0, len(parameters)): c = CpuUsage(server=s) x = parameters[i] c.sys_time = x[0] c.CPU_core = x[2] c.usr = x[3] c.nice = x[4] c.sys = x[5] c.iowait = x[6] c.irq = x[7] c.soft = x[8] c.steal = x[9] c.guest = x[10] c.idle = x[11] c.save()
サーバーフィールドと混同しています。どのように使用すればよいですか。私の目的は、各サーバーでこのスクリプトを実行し、各サーバーに関する情報を表示するオプションを持つ UI を設計することです。
正しい方向に進んでいるか、各サーバーでこのスクリプトを 15 秒間隔で実行し、グラフをプロットする方法を知りたいです。
さらなる改善をよろしくお願いいたします。私もそうします