[DNS管理系統] 流量圖&流量圖完成碎碎唸

URL Link //n.sfs.tw/13095

2019-02-04 03:46:53 By Axer

終於在過年前把DNS的流量圖做好。 有興趣的請參考[1]

有人說:「畫個流量圖嘛,不就是MRTG嘛, SNMP GET一下就有了~~」

才怪咧,MRTG根本就不是重點

重點是你得要資料,同時SNMP不會有什麼可以讓你拿來話DNS的資料。

不然你拿什麼畫圖??

當然,BIND提供分析數據的文字檔,但是那個檔你看過後,你就知道,要轉成有效的數據,需要下功夫。

於是我花了整整兩週來分析這個檔案。

由於該資料相當的龐大,不整理很快就塞爆你的伺服器,5分鐘記一次,一天288次的話,一天就能高達100MB,這樣算一算,一年53週的話資料量就能高達53G,這表示我的伺服器很快就會爆了。

有人說:「不可能這麼多,我的一天才1MB不到。」只能說這是夏蟬不語冰的層級,因為我把所有的網域都記錄,更別說我有超過1000個網域,而且超過3台以上的伺服器。

於是我開始著手寫出能分析資料的程式,我的程式雖然很精簡,但是我把所有的欄位全部記下來,在思考程式寫法時,我不斷的和自己打架:

 Q 我要收集所有的資料,還是選我要的收集?

 Q 我要收到資料庫中,還是留文字檔就好?

 Q 我要每台伺服器各自處理,還是集中處理?

 Q 處理的資料量太大,我要多久處理一次?

....

經過了不斷的TRY and ERROR,我終於把資料全部歸檔,這中間克服了不少技術上的難題,

但是,我目前擁有的還只是RAW DATA,整理過的RAW DATA。

不要小看RAW DATA,短短的一個月不到,我就擁有超過2000萬筆的資料,有夠驚人。

一個系統如果不能有效率的控制資料成長的速度,沒多久這個系統就不能運作。

我野心很大,預想是我不在崗位上十年,這個系統還是可以動。

░░░░░░░░░░░░░░░░░░░░░資料收集的部分完成的分隔線░░░░░░░░░░░░░░░░░░░░░░░

完成收集資料以後,我隔了一週才繼續分析我的數據。

分析數據也很吃腦力,除了要解決問題,還得要有效率。畢竟,一次要開的檔案是超過10000個,沒效率的開讀檔會讓伺服器太忙甚至跑不完。

接下來就是繪圖的部分,做到這裡其實有點懶了,

就覺得差不多要完成,但是還沒看到終點線。

為了畫圖,我本來想的是用JS來取數據直接畫,

但是這樣的做法就得到底層和上層整合,換句話說,就是要讓網頁的PHP也要存取原始的RAW DATA,

這可不成,為了這個目的再開權限是不好的做法。

最後我決定還是在底層畫圖就好,RRDTool是我最後的選擇。

使用RRDTool的話,你得再把資料餵給RRD資料庫,這又是一個漫長的過程,2000萬筆的資料,我餵了整整一天多。

之中還因為資料錯誤,重做了二三次。

還是完成了。

這次寫程式我為了容錯下了不少工夫,舉個簡單的例子,如果不像中市只有4台機器,而是有20台或更多,

我的程式要做到自動偵測自動歸檔自動繪圖。還有容錯顯示等等功能。

換句話說,不要太多的人為設定。

話說為什麼要畫圖?

其實很多服務在底層跑,你都不知道他到底在忙什麼,畫圖是一個了解最好的方法,

因為我看了RAW DATA好像看到了什麼,但什麼都不知道,

圖一畫就明瞭了。

於是又花了幾天研究怎麼畫圖,RRDtool還真的滿複雜的,我喜歡。

經由畫圖才知道很多原本不知道的地方,像是下面其中一台DNS伺服器進入的query:

 

由圖中就發現奇怪的地方:

1. 一天中有二段資料的遺失?長達10分鐘

2. 竟然有大量的PTR查詢,這個不是應該很少人用嗎?

3. 每天有三次大量的PTR查詢,似乎透露什麼程式在幹嘛的訊息?

4. CNAME記錄查詢幾乎沒有,還是以A和AAAA記錄為準

5. 每個小時似乎規律的有峰值?

我原本都以為我分析有問題,於是我調出原始資料一筆筆記算,後來發現程式沒有錯

但是為什麼會有資料的遺失呢?我發現真的是遺失了!
我找不到會遺失的原因,經過了三天,我想到了。

原因就是一次要畫的圖太多,要開的檔案太多,我的單線程程式前面跑不完,然後後面程式又再執行,資料就被刪掉了。

想到這個非常可能的原因後我又得改寫程式解決這個困難,當然現在不再會有這種資料遺失的情況。

---

現在流行的大數據可視化

你如果不做可視化,就無法發現問題,更別說要解決問題。

另外這張經由可視化後,發現IPv6的協定使用率比想像中的還要高

這都是可視化後迷人之處。

 

結論

要畫的圖還很多,目前只畫了一小部分,還得待之後慢慢完成。

 

 

參考資料

[1] http://ddnss.tc.edu.tw/doc/stat