小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

小米運維發表於2018-11-19

本文介紹了汽車之家為小米開源的Open-Falcon監控系統貢獻的Windows監控元件。

前言

小米Open-Falcon監控系統自2015年開源以來,以其豐富的外掛,靈活的架構,良好的效能表現,高效的告警策略等特性,贏得的眾多網際網路公司的青睞。

汽車之家也一直關注著Open-Falcon的發展,系統平臺團隊透過對Open-Falcon的二次開發,打造了汽車之家的監控系統。這套系統負責了汽車之家所有伺服器基礎監控,URL監控,日誌監控等重要功能。作為公司基礎系統,穩定高效的支撐了近萬臺伺服器的監控,告警工作。

設計

初衷

汽車之家除Linux伺服器外,還有很多業務執行在Windows機器上,所以對Windows伺服器基礎監控,IIS,SQL Server等Windows服務的監控也非常重要。但是Open-Falcon未全面覆蓋Windows系統,沒有官方的Windows Agent去做資料的採集。社群中開源的指令碼都是透過計劃任務的方式採集。而我們希望的是Open-Falcon在Windows下的Agent採集的邏輯和架構與Linux下保持一致,方便監控平臺管理,控制Agent。

目標

我們的設計目標有以下幾點:

1.   可以服務的形式執行在Windows伺服器上,不用配置計劃任務

2.   支援採集Windows伺服器基礎監控項

3.   支援採集IIS,SQL Server的監控項採集

4.   提供和Linux Agent一樣的push資料介面,支援第三方push資料

5.   與Linux Agent其他功能保持一致

基於以上幾點我們自研了之家的Open-Falcon Windows Agent。

實現

1    程式碼架構

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

Windows-Agent的程式碼架構如上圖所示。程式啟動後,會啟動5個執行緒。每個執行緒都會按照配置好的時間間隔定時採集所需資訊。

  • basic thread基礎監控項採集執行緒,透過psutil這個跨平臺的庫,可以輕鬆獲取作業系統程式和系統利用率等資訊。

  • IIS thread IIS資料採集執行緒,透過winstats這個庫,定時的採集IIS站點的連線數,IIS站點的cpu使用率等資料。

  • SQL Server thread SQL server資料採集執行緒,同樣透過winstats, 獲取到SQLServer記憶體和I/O相關資料。

  • status thread Agent自身狀態執行緒。這一點和Linux Agent的功能一樣, 定時向HearbeatServer彙報自己Agent的狀態。這樣在我們的監控平臺上就可以向管理Linux伺服器一樣的管理這些Windows伺服器。

  • HTTP HTTP執行緒會開啟一個HTTP服務提供push介面,和LinuxAgent一樣,使用者可以選擇透過該push介面,把自定義的資料push給Agent。方便第三方資料的接入。

2   資料的傳輸

Open-Falcon Linux下的Agent啟動之後,會和transfer元件建立長連線,透過Transfer.Update這個RPC呼叫,把Agent採集到的監控資料傳輸給transfer,後面的事情就全部交由Open-Falcon處理。Agent自身狀態的彙報也同樣方式,透過Agent.ReportStatus這個RPC呼叫和Hearbeat Server互動,上報自身狀態。在Windows下,我們要採用同樣的方式和transfer元件,Hearbeat Server元件進行資料的傳輸,不同的是,Linux下的Agent是golang實現,可以方便的使用golang原生的JSONRpc處理RPC呼叫,而我們Windows下的Agent使用python開發,所以我們自己實現了jsonrpc的client,來模擬Linux下的處理。保證我們的Agent行為和Linux下的Agent一致。

3    如何變身Windows服務

Windows Agent透過pypiwin32這個庫,把python程式碼變成了服務安裝到了Windows伺服器上。這個庫怎麼用呢?Demo如下:

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

首先要繼承win32serviceutil.ServiceFramework這個類,然後分別實現構造方法,停止執行方法SvcStop, 以及啟動方法SvcStop。最後在主方法中呼叫win32serviceutil.HandleCommandLine(AppServerSvc)。就可以透過python agent.py install安裝服務,python agent.py start啟動服務,有興趣的同學不妨可以自己試試。

4    配置檔案

Windows Agent的配置檔案也和Linux Agent一下保持一致,如果你熟悉了Linux下的配置,甚至可以直接copy到Windows伺服器下。具體的配置解釋如下:

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent


安裝

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

實戰

目前Windows Agent執行在汽車之家上千臺Windows伺服器下2年多時間,始終保持了穩定,可靠的資料採集,同時對資源的消耗也非常小。

下圖為Agent作為服務執行

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

下圖為Agent程式的消耗,由於我們內部的Agent監控項要比開源的版本多,所以記憶體佔用大概有30M左右,開源版本的記憶體佔用會小於這個數值

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

下圖為採集到的IIS站點的cpu使用率監控資料

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

下圖為SQL Server採集監控資料

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

開源

在公司的支援下,我們將程式碼以Apache許可證開源。目前WindowsAgent元件已經被Open-Falcon社群收錄,為更多Windows使用者提供支援。

小米開源監控Open-Falcon收錄汽車之家貢獻的Win版Agent

相關文件以及程式碼參見:

後續計劃

我們計劃下一步為Windows Agent加入更多的特性。例如對外掛的支援,新增更豐富的監控項等。同時,汽車之家對Open-Falcon還做了很多的二次開發,比如告警的升級機制,多種維度的告警收斂,URL監控,網路監控等,並且已經應用到生產環境當中。以後我們也會把通用的元件開源,回饋社群。

感謝汽車之家技術團隊對小米開源的Open-Falcon監控系統的支援和貢獻,也歡迎更多的Open-Falcon使用者加入我們。

本文聯合汽車之家系統平臺部發布,首發於公眾號“之家技術”

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559359/viewspace-2220536/,如需轉載,請註明出處,否則將追究法律責任。

相關文章