Logstash負責日志的收集,處理和儲存:
性能:Logstash 致命的問題是它的性能以及資源消耗(默認的堆大小是 1GB)呐馆,它在大數據量的情況下會是個問題。
另一個問題是它目前不支持緩存莲兢,目前的典型替代方案是將 Redis 或 Kafka 作為中心緩沖池:
因為 Logstash 自身的靈活性以及網絡上豐富的資料汹来,Logstash 適用于原型驗證階段使用续膳,或者解析非常的復雜的時候。在不考慮服務器資源的情況下收班,如果服務器的性能足夠好坟岔,我們也可以為每臺服務器安裝 Logstash 。我們也不需要使用緩沖摔桦,因為文件自身就有緩沖的行為社付,而 Logstash 也會記住上次處理的位置。
如果服務器性能較差邻耕,并不推薦為每個服務器安裝 Logstash 鸥咖,這樣就需要一個輕量的日志傳輸工具,將數據從服務器端經由一個或多個 Logstash 中心服務器傳輸到 Elasticsearch:
Collect:數據輸入input
常用的input有:
file:從文件系統(tǒng)中讀取文件兄世,類似于[Linux]下的tail -0F啼辣。
syslog:監(jiān)聽在514端口的系統(tǒng)日志信息,并解析成RFC3164格式碘饼。
[redis]:從redis服務器讀取熙兔,同時使用redis channel和redis list。
如果在程序方法中埋點艾恼,可以重寫父類Exception住涉,統(tǒng)一加上寫入redis的操作
beats: 通過Filebeat發(fā)送事件。
Enrich:數據加工钠绍,如過濾舆声,改寫等
filter
filter是logstash管道中間處理的設備×可以結合條件語句對符合標準的事件進行處理媳握。
一些有用的過濾器如下:
grok: 解析和結構化任何文本。Grok 目前是logstash最好的方式對非結構化日志數據解析成結構化和可查詢化磷脯。logstash內置了120個匹配模式蛾找,滿足大部分需求。
mutate: 在事件字段執(zhí)行一般的轉換赵誓〈蛎可以重命名、刪除俩功、替換和修改事件字段幻枉。
drop: 完全丟棄事件,如debug事件诡蜓。
clone: 復制事件熬甫,可能添加或者刪除字段。
geoip: 添加有關IP地址地理位置信息蔓罚。
output:數據輸出
output是logstash管道的最后一個階段椿肩。一個事件可以經過多個output瞻颂。但是一旦所有輸出處理完,該事件已經執(zhí)行完郑象。
常用的output有:
elasticsearch: 發(fā)送事件數據到 Elasticsearch蘸朋。如果要將數據保存在一個高效、便捷扣唱、易于查詢的格式,elasticsearch將是不二人選团南。
file: 將事件數據寫入到磁盤文件上噪沙。
graphite: 發(fā)送事件數據到graphite。http://graphite.wikidot.com/
statsd: 發(fā)送事件數據到 statsd吐根。
Shipper:日志收集者正歼。負責監(jiān)控本地日志文件的變化,及時把日志文件的最新內容收集起來拷橘,輸出到Redis暫存局义。
Indexer:日志存儲者。負責從Redis接收日志冗疮,寫入到本地文件萄唇。
Broker:日志Hub,用來連接多個Shipper和多個Indexer术幔。
無論是Shipper還是Indexer另萤,Logstash始終只做前面提到的3件事:
Shipper從日志文件讀取最新的行文本,經過處理(這里我們會改寫部分元數據)诅挑,輸出到Redis四敞,
Indexer從Redis讀取文本,經過處理(這里我們會format文本)拔妥,輸出到文件忿危。
文/怡文圣美(簡書作者)
原文鏈接:http://www.reibang.com/p/6575041b597d
著作權歸作者所有,轉載請聯系作者獲得授權没龙,并標注“簡書作者”铺厨。