DT時代,數以億萬計的服務器、移動終端、網絡設備天天產生海量的日誌。html
中心化的日誌處理方案有效地解決了在完整生命週期內對日誌的消費需求,而日誌從設備採集上雲是始於足下的第一步。nginx
開源界鼎鼎大名ELK stack中的"L",社區活躍,生態圈提供大量插件支持。正則表達式
logstash基於JRuby實現,能夠跨平臺運行在JVM上。json
模塊化設計,有很強的擴展性和互操做性。服務器
開源社區中流行的日誌收集工具,td-agent是其商業化版本,由Treasure Data公司維護,是本文選用的評測版本。cookie
fluentd基於CRuby實現,並對性能表現關鍵的一些組件用C語言從新實現,總體性能不錯。網絡
fluentd設計簡潔,pipeline內數據傳遞可靠性高。相較於logstash,其插件支持相對少一些。多線程
阿里雲日誌服務的生產者,目前在阿里集團內部機器上運行,通過3年多時間的考驗,目前爲阿里公有云用戶提供日誌收集服務。模塊化
採用C++語言實現,對穩定性、資源控制、管理等下過很大的功夫,性能良好。相比於logstash、fluentd的社區支持,logtail功能較爲單一,專一日誌收集功能。工具
功能項 | logstash | fluentd | logtail |
---|---|---|---|
日誌讀取 | 輪詢 | 輪詢 | 事件觸發 |
文件輪轉 | 支持 | 支持 | 支持 |
Failover處理 (本地checkpoint) | 支持 | 支持 | 支持 |
通用日誌解析 | 支持grok(基於正則表達式)解析 | 支持正則表達式解析 | 支持正則表達式解析 |
特定日誌類型 | 支持delimiter、key-value、json等主流格式 | 支持delimiter、key-value、json等主流格式 | 支持key-value格式 |
數據發送壓縮 | 插件支持 | 插件支持 | LZ4 |
數據過濾 | 支持 | 支持 | 支持 |
數據buffer發送 | 插件支持 | 插件支持 | 支持 |
發送異常處理 | 插件支持 | 插件支持 | 支持 |
運行環境 | JRuby實現,依賴JVM環境 | CRuby、C實現,依賴Ruby環境 | C++實現,無特殊要求 |
線程支持 | 支持多線程 | 多線程受GIL限制 | 支持多線程 |
熱升級 | 不支持 | 不支持 | 支持 |
中心化配置管理 | 不支持 | 不支持 | 支持 |
運行狀態自檢 | 不支持 | 不支持 | 支持cpu/內存閾值保護 |
以Nginx的access log爲樣例,以下一條日誌365字節,結構化成14個字段:
在接下來的測試中,將模擬不一樣的壓力將該日誌重複寫入文件,每條日誌的time字段取當前系統時間,其它13個字段相同。
相比於實際場景,模擬場景在日誌解析上並沒有差別,有一點區別是:較高的數據壓縮率會減小網絡寫出流量。
logstash-2.0.0版本,經過grok解析日誌並寫出到kafka(內置插件,開啓gzip壓縮)。
日誌解析配置:
測試結果:
寫入TPS | 寫入流量 (KB/s) | CPU使用率 (%) | 內存使用 (MB) |
---|---|---|---|
500 | 178.22 | 22.4 | 427 |
1000 | 356.45 | 46.6 | 431 |
5000 | 1782.23 | 221.1 | 440 |
10000 | 3564.45 | 483.7 | 450 |
td-agent-2.2.1版本,經過正則表達式解析日誌並寫入kafka(第三方插件fluent-plugin-kafka,開啓gzip壓縮)。
日誌解析配置:
測試結果:
寫入TPS | 寫入流量 (KB/s) | CPU使用率 (%) | 內存使用 (MB) |
---|---|---|---|
500 | 178.22 | 13.5 | 61 |
1000 | 356.45 | 23.4 | 61 |
5000 | 1782.23 | 94.3 | 103 |
注:受GIL限制,fluentd單進程最多使用1個cpu核心,可使用插件multiprocess以多進程的形式支持更大的日誌吞吐。
logtail 0.9.4版本,設置正則表達式進行日誌結構化,數據LZ4壓縮後以HTTP協議寫到阿里雲日誌服務,設置batch_size爲4000條。
日誌解析配置:
測試結果:
寫入TPS | 寫入流量 (KB/s) | CPU使用率 (%) | 內存使用 (MB) |
---|---|---|---|
500 | 178.22 | 1.7 | 13 |
1000 | 356.45 | 3 | 15 |
5000 | 1782.23 | 15.3 | 23 |
10000 | 3564.45 | 31.6 | 25 |
能夠看到三款日誌工具各有特色:
logstash支持全部主流日誌類型,插件支持最豐富,能夠靈活DIY,但性能較差,JVM容易致使內存使用量高。
fluentd支持全部主流日誌類型,插件支持較多,性能表現較好。
logtail佔用機器cpu、內存資源最少,結合阿里雲日誌服務的E2E體驗良好,但目前對特定日誌類型解析的支持較弱,後續須要把這一塊補起來。