-1

私の仕事は 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 秒間隔で実行し、グラフをプロットする方法を知りたいです。

さらなる改善をよろしくお願いいたします。私もそうします

4

1 に答える 1