2013-07-08 29 views
-1

我的任務是製作像服務器密度這樣的服務器監視工具。我有服務器的列表,我想每個服務器的CPU信息,RAM信息,磁盤使用情況等每15秒,並打印它的情節。 我在django中設置了mongo作爲後端數據庫。 我已經寫了python腳本,可以給我這些參數在本地系統上。 現在我的任務是將這些信息存儲在Mongo-DB中。我寫了對應於每種參數的模型。 這是我創建的模型。如何在python中保存mongodb中的數據

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'] 
    } 

和我的腳本如下兩個功能 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() 

我很困惑與serverfield,我應該如何使用它,我的目的是在每個searver和德興擁有選項來顯示informatin有關每個服務器UI運行此腳本。

我想知道我是否正在朝着正確的方向前進,以及如何在每臺服務器上以15秒的間隔運行此腳本並繪製圖形。

進一步改進將不勝感激。 也我會l

+1

」我對serverfield感到困惑。「什麼是serverfield?它不出現在你的類定義中。你在問如何反覆運行這些代碼? (Linux:http://unix.stackexchange.com/questions/11102/cron-running-job-every-15-seconds,Windows:計劃任務) – WiredPrairie

+0

服務器字段是對特定服務器的引用,我將在該服務器上運行我的腳本。 – jugadengg

回答

0

1.要按預定腳本運行,您可以使用crontab,Celery或 自己的守護進程。看來crontab會更合適。你必須 記住使用crontab選擇,你會應該讓控制檯 srcript爲:

#!/usr/bin/env python2.7 
    # import required packages 
    # setup paths to django project 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings") 
    sys.path.append(('/path/to/django/project')) 
    ... # your code 


if __name__ == "__main__": 

    ... # your code 

2.如果你想保留的數據到一個地方,你應該只使用一個共同的主機 MongoDB。這意味着你應該使用相同的IP /域你的服務器與 MongoDB,而不是localhost在settings.py到每個Django 項目。 「