張繼棟+許鵬
摘要:數據的采集是起點而非終點,如何對采集到的數據進一步加工處理,并且能夠幫助我們改善工作和生活才是最終目標,數據改變人們的決策方式,數據改善人類自身和環境?,F在的任何平臺不是無謂的宣傳和夸大而是讓數據說話。
關鍵詞:架構;設計;采集系統;安全;可擴展
一、引言
隨著大數據商業化運營的發展,迫切需要實現數據的自動化的采集、管理等,所以設計一套可以實現對用戶等大數據的實時采集、監控系統,可以有效提高管理的效率。所以本文以大數據時代的用電數據采集系統為例來介紹,它集先進性、精確性和實時性于一體,完全可以滿足用戶的不同需求。
二、系統的功能與特點
(一)開放性
設計時采用基于國際標準的系統平臺和商用數據庫,能支持與相關的數據通信和數據庫訪問,向這些系統提供計量(計費)數據。分層開放式跨平臺跨數據庫設計,可以按照電力系統關口表和大用戶分別管理,采集的電量數據和負控數據直接傳輸到歷史數據庫,通過對于所有計量點和監控點的相關數據定義、管理,與采集數據建立相應的對應關系,實現數據轉存、計算、處理,并提供數據訪問服務。
數據庫管理模塊可采用面向電網的定義方式,使其具備對電網結構以及電網相關設備的表述能力,保證重要關口表數據的準確性。數據庫可采用雙服務器集群機制,保證數據高可用性。
(二)靈活性
該系統可支持多種規約和通信手段,以支持多種電能表的接入,適應網絡技術的發展;可支持多種數據采集方式,接收不同來源的數據,以支持電力市場運營結算所需的大量的、復雜的數據采集和處理要求。
(三)方便性
支持客戶服務器,具有友好的用戶界面,方便的可編程,可維護性能。用戶可分級對時段、處理方式、運算輸出等數據參數進行定義,并能方便的查詢、處理、分析和結算。所提供的操作系統,窗口環境、高級語言、作圖軟件和計算機數據通信軟件應符合國際標準或工業標準。用戶界面是國際流行的WINDOWS風格,具有漢字顯示和打印功能,使用戶操作簡便快捷。
(四)可擴展性
系統采用模塊化設計方式,充分考慮了不同用戶的不同需求,或者同一用戶今后規模及功能擴展的需要。隨變用戶規模和系統的擴大、采集點的增多,通過增加系統廠站數目和采集點數目就可完成,不影響系統的可靠性和穩定性。
系統具備硬、軟件的擴充功能,支持系統結構的擴展和功能的升級,系統所提供的支持軟件能支持用戶進一步開發應用軟件,以期實現原系統的增值。
(五)安全性
系統具備完善的安全保密措施和用戶權限管理功能,擁有自己的用戶體系,只有系統管理員才可增加和刪除用戶、分配用戶權限,使用客戶端或瀏覽器登陸的用戶必須正確輸入用戶名和相應的密碼才能正確進入系統。系統確保作到嚴格防止非法入侵和嚴禁對原始數據的修改,計算數據的修改必須在規定的權限范圍內進行,并作上永久標志。
(六)同步性
系統以標準GPS時鐘為基準,并實現網絡對時功能,以保證各個采集點/計量點基于相同時間基準完成對電能量的計量及電能量數據帶時標的存儲。
三、采集系統的設計
根據需求靈活組成系統,有較大的選擇余地。以最簡單的模式來介紹系統的搭建。在這里僅選用一臺計算機來實現所有的功能。監控數據是標準的時間序列數據,傳統的監控系統中,一條監控數據一般是由監控指標、時間戳和值組成,比如有10臺服務器的內存使用率需要監控,一個時間周期內映射到系統中可能就是10條mem.userd.percent 時間值這種格式的數據,然后分別和對應的主機關聯。
這樣做的缺點是,如果某一時刻想統計某個產品線、業務系統、集群、數據中心的某些監控指標的使用情況,可能就不太好實現。所以需要在傳統的數據結構基礎上增加一個字段,用來存儲自定義的數據標簽。為此,調研當前主流的時序數據庫,如RRDtool、Graphite、InfluxDB、openTSDB等,其中RRDtool和Graphite 只能支能持時間維度和值維度,Cacti和Zabbix就是基于RRDtool來繪圖展示的。而InfluxDB和openTSDB都能滿足需求:其中InfluxDB版本比較低,而且每次更新變動都比較大;而openTSDB則在企業中有大量的成功案例。所以在數據結構的定義上,可以借鑒openTSDB的數據結構,每條數據由metric、timestamp、value、tags組成,用tags鍵值對來標識不同的屬性。
四、三種數據類型
既然有了上面的數據結構的定義,當然就會有數據類型,不同的數據可能代表的意義都不一樣,OWL中采用了RRDtool中比較常用的三種數據類型,分別為GAUGE、COUNTER、DRIVER。
GAUGE類型是一個計量器,可以理解最終存儲的數據就是采集到的數據,比如服務器上的磁盤使用率,內存使用率,cpu使用率,硬件的溫度,風扇的轉速,業務系統中的訪問時間等等,這種數據會隨時間的變化而變化,并且沒有什么規律可言。
COUNTER類型是一個計數器,該類型一般用于記錄連續增長的記錄,例如操作系統中的網卡流量,磁盤的io,交換機接口的流量,業務的吞吐量等等,COUNTER類型會假設計數器的值永遠不會減小,除非達到數據類型的最大值產生溢出,OWL客戶端會存儲最近一次的值和上一次的值,每次上報的過程中會取每秒的速率發送到repeater,當計數器溢出,agent會自動對數據進行補值,否則可能會因為溢出產生一個巨大的錯誤值導致錯誤告警。
DRIVER類型用于表示單位時間內的數據變化,簡單來說就是用來表示當前值和上一次值之間的差值,在監控領域中的實際應用場景可能不是很多。agent每次采集都會判斷數據類型,并應用對應的運算規則?;谠撓到y,可以在上層構建報警系統,統計分析系統,報表系統等等。其中,報警服務在上個版本中是基于Python 的Celery去實現的,由于依賴眾多模塊,安裝部署復雜,在開源過程中大部分反饋的問題都是在該模塊的部署上。因此,在該版本中使用go語言對重構了報警服務,分為控制器和報警邏輯處理模塊:其中控制器負責報警策略生成和報警結果處理;邏輯處理模塊負責從控制器獲取策略并去OpenTSDB讀取數據進行對比,產生的結果返回給控制器處理。
五、結語
監控系統是整個IT架構中的重中之重,小到故障排查、問題定位,大到業務預測、運營管理,都離不開監控系統,可以說一個穩定、健康的IT架構中必然會有一個可信賴的監控系統,而一個監控系統的基石則是一個穩定而健壯的數據采集系統。endprint