日誌收集分析-heka

G8bao7發表於2017-06-28







可擴充套件的資料收集和處理工具。它的可擴充套件性不僅僅是體現在程式本身可以進行外掛開發、更可以方便的透過新增機器進行水平擴充套件。Heka是一個使用Go語言開發的工具,大量使用了Go的goroutine併發和channel通訊,透過我們做日誌平臺的經驗來看,一般情況下效能問題不需要太多的顧慮。

Heka程式的可擴充套件性體現在它的外掛開發上。Heka核心是Go語言開發,其外掛理所當然的可以採用Go語言開發,當然你還可以透過lua來開發外掛,如果你更喜歡寫lua的話;lua開發的外掛具備熱更新的能力,也就是修改了lua外掛的程式碼,並不需要重啟Heka程式,在某些應用場景下,熱更新具備很強的競爭力。根據實際的應用需求,可以為Heka開發4種型別的外掛,這4種外掛就構成了Heka的整體結構和功能,所以Heka的核心程式碼量(非外掛)只有5,6K行。可開發的4種外掛分別是:Input、Decoder、Filter、Output。

Input外掛就是Heka的資料輸入源。假設需要從一個日誌檔案讀入資料,那就只需要開發一個從日誌檔案讀取日誌資料的Input外掛即可。值得開心的事情是,Heka已經預設自帶了多個Input外掛,可以滿足大部分資料來源的需求。自帶的LogstreamerInput外掛就是用來從日誌檔案實時讀入資料用的,它支援讀取各種rotate規則的日誌檔案路徑;HttpInput外掛可以間斷式的透過訪問一個URL地址來獲取資料,比如:Web的7層健康檢查場景就可以使用HttpInput外掛來探測。HttpListenInput外掛會啟動一個Http接收外部訪問來獲取資料,比如:透過curl等命令直接將資料post到Heka;還有兩個比較重要的Input外掛:分別是TcpInput和UdpInput,有這兩個外掛外部程式就可以透過TCP/UDP將資料傳送給Heka。, 這裡可以看到Heka提供的全部Input外掛和詳細使用方法,大部分情況都不需要自己開發Input外掛了。

Decoder外掛,各種Input外掛負責將原始資料送入到Heka內部,這些資料一般來說都是具備一定的格式,比如:Nginx access日誌、Syslog資料、自定義的資料格式等等,Decoder外掛乾的事情就是將Input外掛輸入的一個個的原始資料訊息給解析一遍,最終得到一個結構化好的訊息,不再是一個非結構化的原始資料訊息。結構化的訊息更利於程式設計進行處理。,這裡例舉了Heka自帶的所有Decoder外掛,我最關注的外掛是:Nginx Access Log Decoder和 Syslog Decoder,這兩個外掛都是Lua開發的。注意,每個Input外掛得有一個Decoder外掛負責對輸入的資料進行解析到結構化的程度。

Filter外掛乾的事情就是負責具體的資料分析、計算任務。Heka預設也帶了好幾個Filter外掛,但都不是我的菜,絕大多數時候,可能都需要我們自己根據應用需求開發自己的Filter外掛來完成資料分析、計算工作。

OutPut外掛負責將Heka內部的一個個訊息輸出到外部環境,比如:檔案、、訊息佇列等;注意,也可以透過TcpOutput將訊息輸出到下一個Heka繼續處理,這樣就可以部署成多機分散式結構,只要有必要。

透過4種型別的外掛,基本可以瞭解到Heka是基於Pipeline方式對資料進行實時處理。除了可以開發4種外掛以外,Heka還提供了一個很高階的機制——message matcher,message matcher是應用在Filter和Output兩種外掛身上,它主要是用來指定哪些訊息由哪些外掛(Filter/Output)處理。有了message matcher機制就可以透過配置檔案實現不同的資料由不同的Filter進行計算、不同的Output輸出到不同的外部環境。沒有message_matcher,Heka的價值就會大打折扣了。


Agent/Aggregator架構  Heka可以透過配置檔案部署成為不同的角色,實際上它們都是同一個二進位制程式。上圖中的圓形元件Heka擔任的是Agent角色,而矩形元件Heka擔任的是Aggregator角色。假設每個Agent部署在不同的主機上,使用LogstreamerInput外掛負責監控、採集Nginx Access日誌,然後將日誌資料透過Nginx Access Decoder外掛進行解析,最後透過特定的Filter外掛做一些分析、計算工作,最終的計算結果再透過TcpOutput外掛傳送到扮演Aggregator角色的Heka進行聚合、彙總計算從而得到所有主機的日誌計算結果。Heka具備這樣的一個擴充套件架構,可以非常方便的將計算任務分攤到多機,從而實現類MapReduce,當然Heka僅僅只是一個輕量級的小工具,不是一個分散式計算平臺。



Router架構 

每個Agent負責採集不同的資料傳送給矩形元件Heka,也就是Router。Heka Router可以透過message matcher機制將不同的資料輸出到不同的外部儲存等,從而實現一個Router的功能。當然,上面的兩種架構也是可以混合到一起使用的,Heka的系統級擴充套件性還是足夠靈活的。Agent/Router架構其實非常像淘寶開源的DataX工具(DataX是由淘寶 @澤遠 同學領導開發的一款各種儲存間資料交換的瑞士軍刀。DataX也是支援各種外掛開發,可以透過外掛實現MySql資料同步到Oracle、Oracle同步到MySql、Mysql同步HDFS等等),在沒有DataX以前,就是各種儲存間同步的獨立工具,由不同的人開發,使用方式也完全不一致,零散的小工具極其不友好。在一個靈活、可擴充套件的工具上面,進行擴充套件開發實現各種業務需求,可以讓系統的運維更加的友好,部署、使用方式也更加的一致。

 

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

相關文章