Logstash負責日志的收集,處理和儲存:
性能:Logstash 致命的問題是它的性能以及資源消耗(默認的堆大小是 1GB),它在大數據量的情況下會是個問題。
另一個問題是它目前不支持緩存,目前的典型替代方案是將 Redis 或 Kafka 作為中心緩沖池:
因為 Logstash 自身的靈活性以及網絡上豐富的資料,Logstash 適用于原型驗證階段使用,或者解析非常的復雜的時候。在不考慮服務器資源的情況下,如果服務器的性能足夠好,我們也可以為每臺服務器安裝 Logstash 。我們也不需要使用緩沖,因為文件自身就有緩沖的行為,而 Logstash 也會記住上次處理的位置。
如果服務器性能較差,并不推薦為每個服務器安裝 Logstash ,這樣就需要一個輕量的日志傳輸工具,將數據從服務器端經由一個或多個 Logstash 中心服務器傳輸到 Elasticsearch:
Collect:數據輸入input
常用的input有:
file:從文件系統中讀取文件,類似于[Linux]下的tail -0F。
syslog:監聽在514端口的系統日志信息,并解析成RFC3164格式。
[redis]:從redis服務器讀取,同時使用redis channel和redis list。
如果在程序方法中埋點,可以重寫父類Exception,統一加上寫入redis的操作
beats: 通過Filebeat發送事件。
Enrich:數據加工,如過濾,改寫等
filter
filter是logstash管道中間處理的設備。可以結合條件語句對符合標準的事件進行處理。
一些有用的過濾器如下:
grok: 解析和結構化任何文本。Grok 目前是logstash最好的方式對非結構化日志數據解析成結構化和可查詢化。logstash內置了120個匹配模式,滿足大部分需求。
mutate: 在事件字段執行一般的轉換。可以重命名、刪除、替換和修改事件字段。
drop: 完全丟棄事件,如debug事件。
clone: 復制事件,可能添加或者刪除字段。
geoip: 添加有關IP地址地理位置信息。
output:數據輸出
output是logstash管道的最后一個階段。一個事件可以經過多個output。但是一旦所有輸出處理完,該事件已經執行完。
常用的output有:
elasticsearch: 發送事件數據到 Elasticsearch。如果要將數據保存在一個高效、便捷、易于查詢的格式,elasticsearch將是不二人選。
file: 將事件數據寫入到磁盤文件上。
graphite: 發送事件數據到graphite。http://graphite.wikidot.com/
statsd: 發送事件數據到 statsd。
Shipper:日志收集者。負責監控本地日志文件的變化,及時把日志文件的最新內容收集起來,輸出到Redis暫存。
Indexer:日志存儲者。負責從Redis接收日志,寫入到本地文件。
Broker:日志Hub,用來連接多個Shipper和多個Indexer。
無論是Shipper還是Indexer,Logstash始終只做前面提到的3件事:
Shipper從日志文件讀取最新的行文本,經過處理(這里我們會改寫部分元數據),輸出到Redis,
Indexer從Redis讀取文本,經過處理(這里我們會format文本),輸出到文件。
文/怡文圣美(簡書作者)
原文鏈接:http://www.lxweimin.com/p/6575041b597d
著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。