青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

西城

指尖代碼,手上年華

聯系 聚合 管理
  20 Posts :: 0 Stories :: 62 Comments :: 0 Trackbacks
一、RRD數據庫及RRDTOOL簡介
意為Round Robin Database。設計理念為按照round-robin的方式進行存儲,在一個周期之后(可自己定義),新的
數據會覆蓋掉原來的數據。所以RRD數據庫適合用來存儲動態數據,并且不需長期存儲。因為是周期性的覆蓋舊的數據
所以數據庫的大小基本上就會固定下來,并不會隨著時間而增大。

RRDTOOL是由Tobias Oetiker開發的自由軟件,使用RRD作為存儲格式。RRDTOOL提供了很多工具用來對RRD數據庫
進行操作,包括創建,更新,查詢,以及生成顯示圖等。RRDTOOL同時也提供了很多語言的API以方便操作。

Ganglia是一個分布式的監控系統,采用RRD數據庫進行數據存儲和可視化。Hadoop源碼包里即有一個與ganglia相關
的配置文件,修改一些參數和對ganglia進行一些設置即可對hadoop集群進行監控。每個不同的屬性的數據都存在一個
RRD數據庫里。


二、將數據導入MYSQL中
也會存在這樣的情況,可能想對rrdtool采集到的數據進行長期存儲,從而進行一些分析。而RRD數據庫的數據是不斷
更新的,雖然也可以保留長期的數據,但精度不夠。比如說一個RRD數據庫的步長為15秒,也就是說,每隔15秒,
就會有一個新的值存入(比如內存使用率),同時覆蓋一個舊的值。一個RRD數據庫存儲5761個這樣的數據(一天+15
秒).而且隨著時間的推移總是存儲最近一天的數據。然后在通過這些值不斷地計算步長更高的值,比如我們可以通過
這些15秒的數據算出360s的數據(平均值),然后以360s為步長將這些值再存進去,不過這時候可以存儲的時間區間就
更長了,同樣的行數可以存儲24天的數據。以此類推,也可以以一天為單位存儲一年的數據,不過這時候的精度就只有
一天了,那些舊的15s的數據都已經被覆蓋掉了。如果想要把這些數據都存儲起來,就需要通過腳本定時進行數據導入。
LINUX上做這些是很方便的,perl,python,lua,ruby都是不錯的選擇,shell也可以。然后用crond設置在一定時間
定時執行即可。以下是python的示例代碼:
(注:python學的一般,基本上是邊看書,邊寫的代碼,問題不少,請各位指正。)

首先是初始化,創建數據庫及相應的表:

import os
import MySQLdb
import string

root="/var/lib/ganglia/rrds/hap-clu"
dirs=os.listdir(root)

map1=string.maketrans('.','_')
map2=string.maketrans('-','_')

conn=MySQLdb.connect(host='localhost', user='root',passwd='123456')
cursor=conn.cursor()

for onedir in dirs:
    dbname=onedir.translate(map1).translate(map2)
    cursor.execute("create database if not exists "+dbname)
    conn.commit()
    conn.select_db(dbname)
    # print onedirname
    print "DB:"+dbname+" ."
    files=os.listdir(root+"/"+onedir)
    for onefile in files:
        tablename=onefile[:-4].translate(map1)
        if(dbname=="__SummaryInfo__"):
            cursor.execute("create table if not exists "+tablename+"(time_id int not null primary key,value varchar(30),num varchar(30))")
        else:
            cursor.execute("create table if not exists "+tablename+"(time_id int not null primary key,value varchar(30))")
        conn.commit()
       # print "CREATE TABLE "+tablename
    print "CREATE DATABASE "+dbname+" "

cursor.close();

這里面有不少說明的地方:

1.存儲的目錄:ganglia里面默認是這個目錄,不過可以修改。其他不同應用也應該不同。最后的那個hap-clu是集群
的名字。在這個目錄下,每個節點占一個目錄,目錄名一般為IP地址,最后還有一個summary的目錄。對應著,為每個
目錄(節點)創建一個數據庫,每個屬性一個表。

2.MYSQL數據庫和表的命名規則中不允許有"."和"-",所以對應的數據庫名和表名要做相應的轉換。這里使用的是

translate函數。

3.原本以為這個腳本只需執行一次,不過在實際應用過程中,發現表的數量和數據庫的數量可能會增加。比如有新添加的

節點,就需要及時為它創建數據庫。對于一些已存在的節點,有可能有些屬性的數據是后來才檢測到的。比如我碰到的情況
就是運行了一段時間之后關于swap的統計信息才出來,RRD數據庫也才創建。我不知道這是配置的問題還是常態。但為了
順利運行,這個腳本也要每天和插入數據的腳本一樣定時運行,并且在后者之前。


插入數據的腳本:

import os
import commands
import MySQLdb
import string
import rrdtool
#from xml.etree.ElementTree import ElementTree


#working directory
root="/var/lib/ganglia/rrds/hap-clu"
dirs=os.listdir(root)

#mysql table name limit
map1=string.maketrans('.','_')
map2=string.maketrans('-','_')

conn=MySQLdb.connect(host='localhost', user='root',passwd='123456')
cursor=conn.cursor()

for onedir in dirs:
    dbname=onedir.translate(map1).translate(map2)
    conn.select_db(dbname)

    print "DB:"+dbname+" ."
    files=os.listdir(root+"/"+onedir)
    os.chdir(root+"/"+onedir)
    for onefile in files:
        # it seems that all is AVERAGE
        tablename=onefile[:-4].translate(map1) 
        data=rrdtool.fetch(onefile,"AVERAGE")
        firsttime=data[0][0]
        count=0
        while count < 5761:
            time=firsttime+15*count
            value=data[2][count][0]
            if value==None:
                count+=1
                continue
            if dbname=="__SummaryInfo__":
                num=data[2][count][1]
                fvalue=[time,str(value),str(num)]
                try:
                    cursor.execute("insert into "+tablename+" values(%s,%s,%s)",fvalue)
                except MySQLdb.IntegrityError:
                    pass
            else:
                fvalue=[time,str(value)]
                try:
                    cursor.execute("insert into "+tablename+" values(%s,%s)",fvalue)
                   # print "OK"+str(count)
                except MySQLdb.IntegrityError:
                    pass

            count+=1
        conn.commit()
        print "UPDATING TABLE "+tablename
cursor.close();

說明:

1.python有RRDTOOL的模塊,相應的命令都已經可以通過模塊內的函數直接調用,并且結果是Python的列表或者元組

,很容易遍歷。另外有一種方法就是通過調用外部命令將rrd數據庫導出到XML中(RRDTOOL內置有此功能),好處是XML
里面的數據極其相近,缺點是太繁瑣,效率也不高,還要解析XML。

2.count是RRD里存儲的數據的行數,這里為了省事直接設置成了默認的值。嚴謹的話應該是先通過RRDTOOL INFO取得

想關的結構信息,得到這個值,然后再調用。rrdtool.fetch即可取得所存儲的所有值。

3.關于commit。剛開時對API不熟悉,沒有加這一句,結果數據都沒導進去。第一次加在每次insert 之后,結果插入

速度奇慢,更新一次要差不多一天,根本沒有用。放到后面之后就很快了。

4.因為插入的頻率和RRD更新的頻率不一樣,為了保證數據的連續性(不丟失),插入的頻率要比更新的頻率高。這樣會有

很多重復的數據,這里用主鍵(時間戳,為UNIX秒數)和IntegrityError來跳過那些已經插入的數據。當初這樣做的時候
已經考慮到一個問題,就是當表里原有行數很多時,到后面插入的速度有多慢?(單個表每天更新的數據為5700行左右,一個
月為17萬行左右,一年就會超過200萬行)。現在我運行的結果是表中已有5萬行數據,插入速度并沒有明顯的減慢,想接著再
運行一段時間觀察一下。如果太慢就得換一個方法。
posted on 2012-08-14 20:59 西城 閱讀(2094) 評論(0)  編輯 收藏 引用 所屬分類: Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品一区三区| 久色婷婷小香蕉久久| 国产精品高潮久久| 亚洲一区二区三区免费观看| 在线亚洲精品福利网址导航| 欧美三区不卡| 久久爱www久久做| 久久亚洲精品一区二区| 亚洲丰满少妇videoshd| 亚洲欧洲另类国产综合| 欧美精品日韩一区| 亚洲欧美不卡| 久久精品国产清高在天天线| 亚洲国产另类久久久精品极度| 亚洲人成高清| 国产精品欧美日韩| 欧美丰满少妇xxxbbb| 欧美美女喷水视频| 欧美制服丝袜| 欧美激情亚洲自拍| 欧美一区二区精品久久911| 久久人人97超碰国产公开结果| 日韩写真在线| 欧美一区在线看| av成人福利| 久久9热精品视频| 亚洲乱码国产乱码精品精可以看| 亚洲香蕉网站| 亚洲欧洲精品一区二区| 亚洲欧美激情精品一区二区| 亚洲精品1区2区| 亚洲欧美日韩精品久久| 日韩视频永久免费观看| 欧美中文字幕视频| 一区二区三区欧美成人| 美女网站在线免费欧美精品| 亚洲欧美日韩在线播放| 蜜桃av综合| 久久久亚洲影院你懂的| 国产精品每日更新在线播放网址| 欧美激情女人20p| 国产专区一区| 午夜在线视频观看日韩17c| 一区二区欧美在线观看| 另类尿喷潮videofree| 久久精品毛片| 国产女主播一区二区| 99精品久久| 一区二区不卡在线视频 午夜欧美不卡在 | 狼人天天伊人久久| 国产精品久久一级| 99国产精品国产精品毛片| 亚洲国产精品毛片| 亚洲国产精品ⅴa在线观看 | 亚洲图片欧洲图片av| 欧美大秀在线观看| 欧美aⅴ一区二区三区视频| 国产一区二区三区不卡在线观看| 在线视频亚洲一区| 亚洲天堂成人| 欧美日韩久久久久久| 亚洲欧洲一级| 亚洲美女诱惑| 欧美日本一道本在线视频| 亚洲欧洲免费视频| 一本久道综合久久精品| 欧美欧美在线| 99这里有精品| 午夜精品一区二区三区在线视| 欧美视频日韩| 亚洲线精品一区二区三区八戒| 午夜精品在线观看| 国产欧美一区二区视频| 欧美亚洲自偷自偷| 欧美v国产在线一区二区三区| 在线观看成人网| 美女视频网站黄色亚洲| 91久久线看在观草草青青| 一本色道**综合亚洲精品蜜桃冫 | 久久gogo国模裸体人体| 免费观看国产成人| 亚洲精品三级| 国产精品电影在线观看| 欧美亚洲一区在线| 欧美成人在线网站| 亚洲视频第一页| 国产欧美一区二区三区国产幕精品| 欧美在线观看天堂一区二区三区| 欧美91视频| 亚洲欧美精品在线观看| 好吊妞这里只有精品| 欧美99久久| 亚洲自拍另类| 欧美黄色影院| 香蕉成人久久| 亚洲国产裸拍裸体视频在线观看乱了| 欧美黄色日本| 久久er精品视频| 99视频有精品| 欧美不卡福利| 欧美一区二区在线免费观看 | 国产一区二区精品久久91| 欧美va天堂在线| 亚洲视频一区二区免费在线观看| 久久精品欧美| 亚洲性图久久| 亚洲黄色小视频| 国产欧美日韩麻豆91| 欧美高清在线| 久久久精品五月天| 一区二区三区www| 欧美肥婆在线| 久热re这里精品视频在线6| 亚洲夜晚福利在线观看| 亚洲国产精品久久久久| 国产精品一区二区三区成人| 欧美成人dvd在线视频| 欧美在线看片| 亚洲欧美视频一区二区三区| 亚洲黄色一区二区三区| 麻豆久久婷婷| 午夜精品视频在线观看一区二区| 亚洲女人av| 亚洲日本成人女熟在线观看| 国产亚洲人成a一在线v站| 欧美日韩亚洲综合在线| 欧美va亚洲va香蕉在线| 久久亚洲一区| 久久久久久欧美| 欧美一区在线看| 欧美一区二区三区在线看 | 欧美国产日韩精品| 欧美777四色影视在线| 猫咪成人在线观看| 久久精品三级| 久久久精品一区| 久久国产视频网| 久久精品国产综合精品| 久久精品首页| 久久综合福利| 蜜乳av另类精品一区二区| 美女被久久久| 免费在线观看成人av| 久热精品在线视频| 麻豆精品精华液| 欧美激情亚洲精品| 亚洲第一色中文字幕| 亚洲国产女人aaa毛片在线| 欧美激情国产高清| 亚洲破处大片| aa国产精品| 亚洲欧美日韩精品久久奇米色影视 | 一区二区三区**美女毛片| 一区二区av在线| 亚洲一区二区三区高清| 新狼窝色av性久久久久久| 久久成人综合视频| 蜜臀99久久精品久久久久久软件| 鲁大师影院一区二区三区| 欧美国产先锋| 国产精品国产精品| 国产欧美在线| 亚洲国产美女| 亚洲主播在线播放| 久久一区精品| 亚洲国产一区二区三区a毛片| 亚洲精品自在久久| 亚洲永久免费精品| 久久综合一区二区| 欧美四级在线观看| 国产婷婷色综合av蜜臀av| 在线免费观看欧美| 在线一区二区三区四区五区| 久久精品成人| 亚洲精品五月天| 欧美在线日韩| 欧美肉体xxxx裸体137大胆| 国产亚洲视频在线| 亚洲最新色图| 久久综合久久综合久久综合| 亚洲人精品午夜在线观看| 性欧美xxxx视频在线观看| 欧美精品 国产精品| 国产亚洲精品资源在线26u| 亚洲毛片av在线| 久久久亚洲欧洲日产国码αv | 亚洲精品一品区二品区三品区| 亚洲午夜影视影院在线观看| 麻豆免费精品视频| 国产欧美一区二区视频| 宅男精品导航| 亚洲国产一区二区a毛片| 欧美一区二区三区日韩视频| 欧美连裤袜在线视频| 在线成人免费视频| 欧美亚洲免费电影| 午夜久久资源| 久久久www成人免费毛片麻豆| 亚洲欧洲一区| 久久尤物视频|