日誌收集系統-探究

經常使用的日誌收集系統有Syslog-ng,Scribe,Flume,固然還有ELK的LogStash.而目前互聯網公司最長用的時Scribe和Flume,Scibe是Facebook開源的,可是如今已經不維護,因此不推薦使用。redis

Scribe

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

三個角色:json

  • 日誌服務器
    • 爲了收集日誌,每一臺日誌服務器上都會部署一個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等中間件,保證可靠以及緩衝等做用。

相關文章
相關標籤/搜索