日志收集系統-探究


常用的日志收集系統有Syslog-ng,Scribe,Flume,當然還有ELK的LogStash.而目前互聯網公司最長用的時Scribe和Flume,Scibe是Facebook開源的,但是現在已經不維護,所以不推薦使用。

Scribe

Scribe是Facebook開源的日志收集系統,在facebook內部已經得到大量的應用。Scribe是基於一個非阻斷C++服務的實現。它能夠從各種日志源上收集日志,存儲到一個中陽存儲系統。

三個角色:

  • 日志服務器
    • 為了收集日志,每一台日志服務器上都會部署一個scribe客戶端,它包含兩個模塊agent 和 local_server
    • Agent是以tail的方式讀取本地目錄下的日志文件,並將數據寫到本地的Local_server
    • local_server通過zookeeper定位到Center_server
  • 中心服務器
    • 中心服務器作用就是把散落在各個機器的日志統一收集起來
    • Center_server和Local_server一樣,只是配置不同,通過thrift進行通信
    • center_server收到數據后,根據配置將各個category的數據發向不同的方向,比如寫到HDFS或者發到Kafka等
  • 存儲服務器
    • 最終存儲日志的地方
    • 供計算框架以及搜索引擎框架計算使用

LogStash

Logstash是ELK中的一個工具,在ELK中起到的作用是對日志進行收集、分析、過濾。

上圖所示,由三個組件組成:

  • 數據來源,支持較多輸入源的插件
    • beats
    • file
    • http
    • jdbc
    • kafka
    • log4j
    • ...
  • 過濾器
    • json
    • csv
    • ...
  • 輸出目的地
    • file
    • mongodb
    • rabbitmq
    • kafka

Flume

Flume是分布式的、可靠的、高性能、可擴展的的日志收集框架。

Flume的Agent

Agent由三部分組成:

  • Source: 數據源
  • Channel:包括兩種fileChannel和Memorychannel
  • Sink:輸出目的地

三個角色:

  • 客戶端日志收集層
    • 在每個客戶端部署一個Agent進程,負責對單機的日志手機工作
  • 中心服務器
    • Collector層部署在中心服務器上,負責接收Agent層發送的日志,並且將日志根據路由規則寫到響應的Store層
  • 存儲層

對比

  • Scribe:C++編寫,現在已經不再維護,不推薦使用

  • Logstash: 針對日志收集,搜索,計算,可視化有一系列的產品,並且可使用的插件以及社區較為活躍推薦使用

  • Flume: Java編寫,較為靈活,並且吞吐量高。業界已經驗證過,建議使用。

總結

從上面可以看出日志收集框架基本都是三個組件:

  • Agent : 部署在各個應用服務器,來收集應用的日志

  • Collector: 日志收集中心,把分散在Agent的統一統一收集到日志中心

  • Storage: 存儲層,日志收集之后的存儲

注:
這里的日志收集框架只是最簡單的,如果數據量過大,以及考慮數據收集的可靠。可以在中間添加kafka或者redis等中間件,保證可靠以及緩沖等作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM