天天看點

Plog —— 新浪的處理日志流架構

plog 是 "parse log" 的縮寫,是一套處理日志流的架構,日志流格式可以是apache,nginx等正常意義的日志格式,也可以是自定義格式

受flumeng的啟發,我把整個工程分成了三個部分:source,channel ,sink,已經完成了主體的共有的可以抽象出來的功能,比如線程的同步互斥,消息的生産消費,處理時間間隔的控制,還有一些簡單的source,channel and sink函數

下面是一個簡單的配置檔案:

source部分的設計思路

在這一部分,我們需要處理的是資料流的來源,他可能是file,可能是socket,可能是管道,但是我不關注你的資料來源格式是什麼樣的,因為我無法滿足這些需要各式各樣的資料來源需求,而你的需要是什麼樣的,你最清楚,那麼你隻要寫一個source的插件就可以了,名字随意你定,你需要的是把你寫的那個插件的名字,寫到plog.conf裡面,預設有讀取檔案的file_source子產品,讀取管道的read_from_pipeline子產品,可以直接使用。

具體執行個體如下:

自定義source的具體實作,參看source module下的plog/source/youself_define_source.py

channel部分

在這個部分,主要是對資料流的處理,你同樣需要寫一個 python的腳本,名字随意你定,但是你需要寫到 plog.conf 中,預設有解析python正則的子產品可以直接使用,類似下方:

同樣的你需要實作的channel可以參見 plog/channel/youself_define_channel.py

sink 部分

在這個部分,你同樣需要寫一個python腳本,他的名字同樣取決于你的個人喜好,你需要的是把你寫的那個插件的名字寫到plog.conf,例如下方:

同樣的你需要完成的腳本可以參見plog/sink/youself_define_sink.py

如何跑一個測試

下面的測試是讀取一個本地本件,解析,計算自己要想的結果發送到zabbix監控系統。