jojo's blog--快樂(lè)憂傷都與你同在
          為夢(mèng)想而來(lái),為自由而生。 性情若水,風(fēng)起水興,風(fēng)息水止,故時(shí)而激蕩,時(shí)又清平……
          posts - 11,  comments - 30,  trackbacks - 0
          關(guān)於RRDtool
          安裝前準(zhǔn)備工作
          安裝RRDtool
          開(kāi)始使用RRDtool
          建立RRD檔
          抓取資料
          更新RRD檔資料
          繪製圖表
          其他RRDtool的指令
          簡(jiǎn)單實(shí)作範(fàn)例
          RRDtool備份
          • 關(guān)於RRDtool

           什麼是RRDtool?相信大部份的人都沒(méi)有聽(tīng)過(guò)這個(gè)東東....不過(guò),如果問(wèn)起知不知道有MRTG這套程式,相信就有許多人聽(tīng)過(guò)了。 打個(gè)比方來(lái)說(shuō)明︰如果MRTG是一輛車子,那麼RRDtool就是製造車子的工廠了!     簡(jiǎn)單講,RRDtool是一套可以把數(shù)據(jù)畫(huà)成圖表的程式,以時(shí)間為x軸、流量為y軸,而且可以動(dòng)態(tài)更新圖表的程式,聽(tīng)起來(lái)似乎非常的強(qiáng)大?沒(méi)錯(cuò),正是因?yàn)镽RDtool的功能強(qiáng)大以致於它有不太容易學(xué)習(xí)的缺點(diǎn),況且坊間有提到RRDtool的書(shū)籍可以說(shuō)是少之又少(目前還沒(méi)看過(guò));網(wǎng)路上找?總共的中文教學(xué)文章只有酷學(xué)園Abelyang的那一篇。     反觀MRTG簡(jiǎn)單又功能強(qiáng)大,學(xué)習(xí)文件頗多,能滿足大部份人的需求,但是如果您對(duì)於MRTG的統(tǒng)計(jì)方式不能認(rèn)同,亦或是您有強(qiáng)烈customize統(tǒng)計(jì)圖表的需求,RRDtool將會(huì)是您最好的選擇!


          (本圖取自RRDtool官方網(wǎng)站)


          • 安裝前準(zhǔn)備工作

           本文以下的敘述皆實(shí)作於FreeBSD 6.0系統(tǒng)下,不過(guò)如果您的系統(tǒng)不是FreeBSD,不用擔(dān)心,大同小異啦 !   除了一些指令有小小的不同以外......  此外,因?yàn)镽RDtool能做出來(lái)的只是圖表而已,一般來(lái)說(shuō),都是以放在WEB的方式讓管理者或是使用者能夠?yàn)g覽,所以,請(qǐng)先安裝好WWW server  (如:Apache)  。


          • 安裝rrdtool

          在FreeBSD下︰

          LEE# cd /usr/ports/net/rrdtool/ //切換到ports中RRDtool的目錄
          LEE# make install clean     //安裝並清除安裝暫存的檔案

          在Debian下:

          LEE# apt-get update            //更新檔案清單
          LEE# apt-get install rrdtool 
          //使用apt安裝RRDtool套件

          其他linux則可以到www.rrdtool.org下載Source Code或是Binary檔安裝!

          如果安裝過(guò)程沒(méi)有差錯(cuò),RRDtool就安裝完成了!    如何確定RRDtool能正常運(yùn)作呢?  在console下輸入「rrdtool」,如果有看到以下畫(huà)面代表您的RRDtool已經(jīng)可以正常運(yùn)作囉!

          LEE# rrdtool
          RRDtool 1.0.49 Copyright 1997-2004 by Tobias Oetiker <tobi@oetiker.ch>

          Usage: rrdtool [options] command command_options

          Valid commands: create, update, graph, dump, restore,
          last, info, fetch, tune, resize, xport

          RRDtool is distributed under the Terms of the GNU General
          Public License Version 2. (www.gnu.org/copyleft/gpl.html)

          For more information read the RRD manpages

          LEE#

          如果沒(méi)有看到,請(qǐng)?jiān)诖_定您的安裝步驟有沒(méi)有錯(cuò)誤!


          • 開(kāi)始使用RRDtool

          先說(shuō)明一下RRDtool運(yùn)作的大概流程︰

            

          步驟一︰建立RRD檔,這個(gè)檔說(shuō)來(lái)說(shuō)去就是RRDtool的「專屬」資料庫(kù)啦!RRDtool以自有的格式存放流量資料,下面會(huì)有比較詳細(xì)的說(shuō)明。

          步驟二︰「抓取資料」個(gè)人覺(jué)得是整個(gè)RRDtool最困難的一部分,因?yàn)镽RDtool的資料是要靠自己弄出來(lái),不若MRTG內(nèi)建抓資料功能,但是卻因?yàn)槿绱耍梢浴葛j」給RRDtool畫(huà)圖的資料彈性也比較大,例如︰snmp查詢結(jié)果、系統(tǒng)狀態(tài)、網(wǎng)頁(yè)中特定數(shù)字統(tǒng)計(jì)..等等。

          步驟三︰抓下來(lái)的資料就用「rrdtool update」的指令更新步驟更新的RRD檔的內(nèi)容,讓圖表能畫(huà)出最新的流量。

          步驟四︰這就是重點(diǎn)啦!透過(guò)「rrdtool graph」的指令來(lái)依據(jù)RRD檔的資料繪圖,這也是使用者唯一看的到的東西,若規(guī)劃的不好會(huì)影響使用者閱讀上的困難!

          迴圈︰由於要達(dá)成動(dòng)態(tài)繪圖的圖表,第二步驟到第四步驟必須不斷的重複執(zhí)行以維持資料的更新,目前知道要達(dá)成迴圈的方法有兩種︰1、在Script中使用迴圈;2、使用cron這個(gè)排班程式做排班。

          以下將詳細(xì)的說(shuō)明這四個(gè)步驟︰


          • 建立RRD檔 

          RRDtool 建檔語(yǔ)法
          rrdtool create filename
          [--start|-b start time]            
          // "-s" 代表此RRD檔可以開(kāi)始紀(jì)錄的時(shí)間,注意︰要把時(shí)間單位轉(zhuǎn)換成秒,1970/01/01算第一秒,用`date`指令可由系統(tǒng)幫您計(jì)算。 
          [--step|-s step]                     
          //意指每筆資料的間隔時(shí)間,一般使用者設(shè)定'300',即每五分鐘為一間隔。
          [DS:ds-name:DST:heartbeat:min:max]
          [RRA:CF:xff:steps:rows] 

          重要參數(shù)說(shuō)明︰

          DS 全名"Data Source",就是資料來(lái)源。這有點(diǎn)像是在RRD檔這個(gè)資料庫(kù)建一個(gè)可以儲(chǔ)存資料的欄位。

          例︰DS:telnet:COUNTER:600:0:100000000

          DS表示式總共有六個(gè)欄位︰第一個(gè)欄位宣告這列式為DS表示式;第二個(gè)欄位宣告這個(gè)DS在RRD檔裡面的"欄位名稱"(Data Source Name),此例宣告此欄叫做"telnet"(名稱可以自訂);第三個(gè)欄位叫做DST(Data Source Type),習(xí)慣上常用 GAUGE(個(gè)別值,像CPU loading) 及COUNTER (累計(jì)值,像流量資料) 在產(chǎn)生圖檔時(shí), GAUGE 是 100 就畫(huà)100在 Y 軸上;但如果是 COUNTER ,此次值為100,而前一值是 98,則會(huì)在Y軸上畫(huà) 2;第四個(gè)欄位稱做有效期(heartbeat),範(fàn)例裡的值為'600',假設(shè)要取12:00的資料,而前後300秒裡的值(11:55-12:05)經(jīng)過(guò)平均或是取最大或最小都算是12:00的有效值;第五個(gè)欄位第六個(gè)欄位為這個(gè)欄位允許可以存放的最大最小值,此例允許最小為0,最大為100000000,如果不想設(shè)限制可以再第五個(gè)欄位和第六個(gè)欄位以 "U:U"表示。

          RRA全名為Round Robin Archive,簡(jiǎn)單來(lái)說(shuō)就是其實(shí)就是什麼類資料要存幾筆,資料的儲(chǔ)存分成四類,分別為AVERAGE, MIN, MAX, LAST 意即平均值,最大值,最小值,最後一筆 。

          例︰0.5:1:603 

          因?yàn)槲覀儗?step 定為 300 秒是指若原計(jì)算時(shí)間點(diǎn)為 12:00 的話,記錄時(shí)要以 11:57:30~12:02:30 的平均值為主,這個(gè)值若在此時(shí)間點(diǎn)內(nèi)只有一筆資料的話,其意即是平均值,所以此一值即表原 telnet…等共要記錄幾筆,603 是指要存 603 筆,若超過(guò)603筆,則最早之一筆將被移出。
          0.5:6:603 第三個(gè)欄位表示取 6 筆資料(每筆為 step 值,在此意即5分鐘)為平均值( 30 分鐘), 存 603 筆
          0.5:24:603 24 即二小時(shí)
          0.5:288:800 288 即一天 

          以下為建檔的完整範(fàn)例︰

          $LEE# rrdtool create lee.rrd -s 300 \       //此列為建立'lee.rrd'這個(gè)資料檔,step值為300s
          ?DS:input:COUNTER:600:0:100000000 \      
          //Data Source第一欄
          ?DS:output:COUNTER:600:0:100000000 \     /
          /Data Source第-二欄
          ?RRA:AVERAGE:0.5:1:603 \                        
          //每隔五分鐘(1*5)存一次資料的平均值
          ?RRA:AVERAGE:0.5:6:603 \                        
          //每隔三十分鐘(6*5)存一次資料的平均值
          ?RRA:AVERAGE:0.5:24:603 \                      
          //每隔兩小時(shí)(24*5)存一次資料的平均值
          ?RRA:AVERAGE:0.5:288:603 \                    
          //每隔一天(288*5)存一次資料的平均值
          ?RRA:MAX:0.5:1:603 \                                 
          //每隔五分鐘存一次資料的最大值
          ?RRA:MAX:0.5:6:603 \                                 
          //每隔三十分鐘存一次資料的最大值
          ?RRA:MAX:0.5:24:603 \                               
          //每隔兩小時(shí)存一次資料的最大值
          ?RRA:MAX:0.5:288:603                               
          //每隔一天存一次資料的最大值
          $LEE#

          • 抓取資料

          同上面所說(shuō),對(duì)於不會(huì)Shell Script或者是Perl..等可以處理字串的方法的人,這部份算是比較難的。 最好先花點(diǎn)時(shí)間先稍微閱讀一下此類資訊會(huì)比較好上手,以下提供一份不錯(cuò)的Shell Script的教學(xué)文件http://www.study-area.org/cyril/scripts/scripts/

          以下為部分簡(jiǎn)單的範(fàn)例︰

          $LEE# snmpget -c public  192.168.0.1 ifInOctets.4 
          interfaces.ifTable.ifEntry.ifInOctets.4 = Counter32: 13526287
          如果某臺(tái)機(jī)器有安裝snmp的服務(wù),則可用snmpget查詢此主機(jī)上面的資料,至於可以查詢到什麼資料端看那臺(tái)機(jī)器所提供的MIB功能強(qiáng)不強(qiáng)大。上面的例子使用snmpget的指令嘗試抓取 192.168.0.1 這臺(tái)主機(jī)的位址,"-c"參數(shù)代表此臺(tái)主機(jī)的通訊名稱,一般的主機(jī)預(yù)設(shè)為"public",但是也可以自訂,要了解某臺(tái)主機(jī)的通訊名稱請(qǐng)向管理者詢問(wèn)。"ifInOctets.4"中的ifInOctets為查詢此臺(tái)主機(jī)的輸入流量,後面的".4"則代表第四個(gè)網(wǎng)路介面。

          下面的:interfaces.ifTable.ifEntry.ifInOctets.4 = Counter32: 13526287 為主機(jī)端回應(yīng)的結(jié)果,因?yàn)槲覀円馁Y料為「13526287」(此值就是輸入流量)這個(gè)值,這時(shí)候就是字串處理函式發(fā)揮強(qiáng)大功能的時(shí)候啦!

          $LEE# snmpget -c public 192.168.0.1  ifInOctets.4 | sed -e 's/.*ter32: \(.*\)/\1/'
          13526287

          回傳值為「13526287」,是的,這就是我們要的結(jié)果。 到底是什麼讓前面的那串文字不見(jiàn)而取的我們要的數(shù)值呢?  奧妙就在於後面的那串古怪的語(yǔ)法,「sed -e 's/.*ter32: \(.*\)/\1/'」,不瞭解的話請(qǐng)自行翻閱Shell Script的教學(xué)文件,不然用法千百種講也講不完。      重要的是這只是我們往後的Script檔裡面的一個(gè)小小的範(fàn)例,下面的範(fàn)例將會(huì)附上一個(gè)完整的Script檔,您就能瞭解怎麼把這先抓回來(lái)的資料使用在RRDtool上了。

          當(dāng)然,您不一定要使用snmpget,也可以使用snmpwalk、tcpdump..等等抓資料回來(lái)分析,說(shuō)誇張點(diǎn),凡是有數(shù)字會(huì)「動(dòng)」的東西都可以經(jīng)過(guò)處理變成我們要的資料,然後畫(huà)成圖表。


          • 更新RRD檔資料

          RRD的Update指令大概算是RRDtool裡面最簡(jiǎn)單的指令了吧!

          語(yǔ)法︰rrdtool update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...]
          這個(gè)很好理解,基本上就是根據(jù) DS來(lái)更新資料,如上述之lee.rrd,若有需要更新時(shí)

          $LEE# rrdtool update lee.rrd 1061811856:1199:0:821073  // 後三個(gè)欄位分別代表(時(shí)間:欄位一值:欄位二值)


          上面的 1061811856 即時(shí)間值,如果就是要現(xiàn)在的時(shí)間值,則可以 N 代表,但要轉(zhuǎn)換成秒值,通常我們都會(huì)以`date +%s`來(lái)轉(zhuǎn)換。可以試試看,在FreeBSD輸入`date +%s`:

          LEE# date +%s
          1105334125    //從1970/1/1 到現(xiàn)在的秒數(shù)
           

          請(qǐng)注意在Linux下和FreeBSD下指令"date"的用法並不相同。如在Linux下"date -d"為轉(zhuǎn)換某日期成為秒數(shù),而B(niǎo)SD下"date -d"則為系統(tǒng)設(shè)定時(shí)間,使用不當(dāng)容易造成系統(tǒng)時(shí)間錯(cuò)誤。


          • 繪製圖表 

          RRDtool繪圖語(yǔ)法︰(以下僅列出常用的)
          rrdtool graph image-filename
          -s 繪圖資料的起始時(shí)間,預(yù)設(shè)是一天前,單位是"秒數(shù)"
          -e 繪圖資料的結(jié)束時(shí)間,預(yù)設(shè)是現(xiàn)在,亦可使用 date 方式來(lái)達(dá)到前三天至昨天圖檔
          --no-minor 不要副格線
          -t 圖檔標(biāo)題
          -v Y 軸說(shuō)明
          -w 資料區(qū)的寬度,資料區(qū)指的是數(shù)據(jù)顯示的部份,而非說(shuō)明或圖例
          -h 資料區(qū)的高度
          -u Y 軸正值高度
          -l Y 軸負(fù)值高度
          -M 自動(dòng)調(diào)整畫(huà)圖的Y軸最大值

          DEF 其語(yǔ)法為 DEF:vname:rrd_filename:DS_name:[AVERAGE|MAX..]
          這個(gè)有點(diǎn)像是上面的DS(Data Source),亦即在圖表中宣告一個(gè)資料來(lái)源,必須先宣告,讓以下的圖從這邊取資料。
          CDEF 一個(gè)虛擬的變數(shù),就是把DEF的資料拿來(lái)做加工,其值為 DEF 的某些運(yùn)算,其運(yùn)算式需寫(xiě)成後序,中間以逗號(hào)隔開(kāi)。
          EX: a=1+3 寫(xiě)成 a=1,3 +
          http=(input+output)/1024 寫(xiě)成 http=input,output,+,1024,/


          LINE函數(shù)其語(yǔ)法︰LINE{1|2|3}:vname[#rrggbb[:legend]],用這條函式就是您想把資料用線條的方式表示,其中依照線條的粗細(xì)又可分為L(zhǎng)INE1、LINE2、LINE3三種SIZE;vname這欄填的就是您為DEF這個(gè)地方宣告的名稱,這個(gè)名稱可自己隨意取;#rrggbb這裡填的就是你想要線條顯示出來(lái)的顏色,使用RGB代碼;legend裡面填的是AVERAGE、MAX等表示取值的方式。下面為例子︰


          (此圖取自RRDtool完全攻略文章中)

          AREA函數(shù)其語(yǔ)法︰AREA:vname[#rrggbb[:legend]],用這條函式就是您想把資料用填充塊狀方塊的方式表示,其他後面的參數(shù)請(qǐng)參照LINE的用法,做出來(lái)的範(fàn)例如下︰


          (此圖取自RRDtool完全攻略文章中)

          STACK函數(shù)其語(yǔ)法︰STACK:vname[#rrggbb[:legend]]則是畫(huà)出資料數(shù)值至其上的數(shù)值,也就是要有資料數(shù)值在 STACK 數(shù)值之上,用法同上兩個(gè)。
          如果使用 AREA/STACK 時(shí)需特別注意圖蓋圖的問(wèn)題,一定要先畫(huà)的值,再畫(huà)的值,才會(huì)有層次的效果,不然,最大的數(shù)據(jù)若最後畫(huà),會(huì)直接把小的資料蓋過(guò)去,導(dǎo)致小值無(wú)法顯示出來(lái)。

          COMMENT 說(shuō)明欄字,如上圖的的"Last Updated'字樣為使用COMMENT:"Last Updated"指令產(chǎn)生,可以用 \n 等換行符號(hào)。
          GPRINT:GPRINT GPRINT:vname:CF:format vname 即DEF 中的 vname,而 CF 看你要輸出的文字是AVERAGE/MAX/MIN/LAST 等數(shù)值,format 如同 printf 中的格式,
          做出來(lái)如下圖例︰


          rrdtool info rrdfile.rrd - 顯示出rrd檔目前的資料儲(chǔ)存方式(如每幾分鐘球平均或算最大值....等等)。

          rrdtool dump rrdfile.rrd > filename.xml  - 把rrd二進(jìn)位檔的資料以XML的資料格式匯出。

          rrdtool restore filename.xml filename.rrd [--range-check|-r] - 把rrd匯出的XML檔匯入rrd的二進(jìn)位檔內(nèi)。

          rrdtool fetch rrdfile.rrd CF [--resolution|-r resolution] [--start|-s start] [--end|-e end] - 抓取rrd資料檔內(nèi)的特定資料。

          rrdtool tune rrdfile.rrd [--heartbeat|-h ds-name:heartbeat] [--minimum|-i ds-name:min] [--maximum|-a ds-name:max] [--data-source-type|-d ds-name:DST] [--data-source-rename|-r old-name:new-name] - 調(diào)整rrd資料檔內(nèi)的資料記錄方式。

          以上指令詳細(xì)使用方式請(qǐng)參照官方網(wǎng)站︰www.rrdtool.org


          • 簡(jiǎn)單實(shí)作範(fàn)例

          寫(xiě)了那麼多,還是來(lái)個(gè)簡(jiǎn)單的從頭到尾的範(fàn)例吧!

          步驟一︰ 先在console下建立RRD檔,

          $LEE# rrdtool create test.rrd -s 300 DS:input:COUNTER:600:0:100000000 \  //檔名請(qǐng)自訂,可以把test.rrd改掉
          ?DS:output:COUNTER:600:0:100000000 \
          ?RRA:AVERAGE:0.5:1:603 \
          ?RRA:AVERAGE:0.5:6:603 \
          ?RRA:AVERAGE:0.5:24:603 \
          ?RRA:AVERAGE:0.5:288:603 \
          ?RRA:MAX:0.5:1:603 \
          ?RRA:MAX:0.5:6:603 \
          ?RRA:MAX:0.5:24:603 \
          ?RRA:MAX:0.5:288:603
          $LEE# ls
          test.rrd      
          //這樣就是建立成功了

          步驟二︰把下面的Script碼複製,用文書(shū)編輯器新建一個(gè)檔,把以下內(nèi)容放到那個(gè)檔(假設(shè)叫做 test.sh),並且依照黃色字的指示在相關(guān)變數(shù)裡面填入您自己主機(jī)的相關(guān)資料,填完後把黃色的註解刪除(不然執(zhí)行時(shí)會(huì)出現(xiàn)錯(cuò)誤),最後打 "sh test.sh"(看您的檔取什麼名稱)執(zhí)行即可。

          #!/bin/sh                        //宣告使用的shell為 Bourne Shell 

          #抓資料並更新
          rrd_path="/root/rrd/test.rrd"
          //這個(gè)位址請(qǐng)指定為您存放rrd檔的目錄
          rrd_data="192.168.0.1"     
          //這個(gè)IP位址請(qǐng)自行換成您要偵測(cè)的主機(jī)(目標(biāo)主機(jī)須有執(zhí)行:snmpd)
          image_path="/root/rrd/html"  //裡請(qǐng)把""裡面替換成您要存放圖檔的目錄
          sec=300
          while [ 1 ]             
          //這裡使用無(wú)窮迴圈跑此Script
          do
          input=`snmpget -c public $rrd_data ifInOctets.4 | sed -e 's/.*ter32: \(.*\)/\1/'`
          output=`snmpget -c public $rrd_data ifOutOctets.4 | sed -e 's/.*ter32: \(.*\)/\1/'`
          now=`date +%s`
          echo "rrdtool update $rrd_path $now:$input:$output" >> test.cmd  
          //紀(jì)錄update的資料
          rrdtool update $rrd_path $now:$input:$output


          #畫(huà)圖
          rrdtool graph $image_path/test.png \
          --title "Local Network" \                  
          \\換成您想要的圖檔標(biāo)題
          DEF:v1=$rrd_path:input:AVERAGE \
          DEF:v2=$rrd_path:output:AVERAGE \
          AREA:v1#FF0000:"Input" \
          AREA:v2#00FF00:"Output" \
          -v "Value"
          sleep $sec
          done 

          可以跑出一個(gè)圖,大概如下圖︰

          上面只是個(gè)極為簡(jiǎn)單的範(fàn)例,事實(shí)上還有很多的參數(shù)可以設(shè)定,可以讓圖表更為精緻,您可以參考官方網(wǎng)站或者是下面的RRDtool完全攻略教學(xué)文件獲得進(jìn)一步的資訊!


          • RRDtool備份

          聰明的您在看完上面的文章一定會(huì)想到,如果哪一天您的愛(ài)機(jī)遭遇不測(cè)(被雷打中?!),那裡頭的寶貴資料不就全毀了? 其實(shí)在RRDtool中最重要的資料檔也不過(guò)是所謂的RRD資料檔,只要有這個(gè)檔圖就可以再畫(huà),所以我們只要利用簡(jiǎn)單的Shell Script就能達(dá)到備份的效果︰

          以下假設(shè)您的電腦有兩顆硬碟,以下的範(fàn)例示範(fàn)如何定期的把資料備份到另外一個(gè)槽的資料夾︰

          #!/bin/sh
          rrd_path="/root/rrd"       
          //RRD檔所在資料夾
          rrd_file="a.rrd b.rrd c.rrd"   
          //RRD的檔名,可能不只一個(gè),此例為三個(gè)
          dest="/home/backup"    
          //備份檔預(yù)定存放的資料夾

          for data  in $rrd_file
          do
          cp $rrd_path/$data  $dest
          done

          假設(shè)此Script 名稱為 backup.sh 放在/root/rrd資料夾底下,則我們可以在/etc/crontab這個(gè)檔或是打"crontab -e"裡面加入以下這行︰

          *    12     *     *     *     root    /root/rrd/backup.sh         //在每天中午十二點(diǎn)備份這些RRD檔到另外一個(gè)資料夾

           


          參考資料:
                rrdtool完全攻略 出處:酷學(xué)園 作者:Abelyang

                RRDtool 官方網(wǎng)站﹕http://www.rrdtool.org

          posted on 2009-02-28 13:12 Blog of JoJo 閱讀(2979) 評(píng)論(0)  編輯  收藏 所屬分類: Linux 技術(shù)相關(guān)

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          相冊(cè)

          收藏夾

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 长垣县| 宁化县| 闽侯县| 桂林市| 内乡县| 浪卡子县| 宿松县| 兴义市| 宁夏| 柳江县| 平湖市| 巩义市| 鱼台县| 民乐县| 甘德县| 科技| 大名县| 台北市| 东乌| 彰化县| 稻城县| 富阳市| 汶上县| 左云县| 平武县| 广饶县| 仁布县| 靖安县| 博湖县| 高密市| 康马县| 定兴县| 蒙山县| 永昌县| 浦东新区| 乐山市| 石泉县| 博乐市| 阿尔山市| 桐庐县| 集安市|