天天看點

Graylog 日志系統架構

Graylog工作流程

Graylog 日志系統架構

Graylog 架構

Deep Workflow

Graylog 日志系統架構

工作流草圖

  • Log messages source & LB

    基本上,可以接受任何機器的資料(結構化或非結構化),并使用喜歡的任何負載均衡器。 消息的數量,其峰值率,平均大小和提取将影響性能。

  • Transport Layer

    這是Graylog伺服器上的輸入和日志。内部處理使用的Kafka的代碼。

  • Processing Chain

    将這些消息取出并寫入程序緩沖區,這是一個環形的緩沖區。然後,程序緩沖處理器處理消息,其中發生流路由和提取字段。 這部分處理時,過濾後的消息然後進入輸出緩沖區(另一個環形緩沖區),然後進入輸出緩沖區處理器,然後進入Elasticsearch(ES)或使用者定義的輸出。(提示:調整每個緩沖區運作的處理器數量很重要,不應超過可用于graylog-server的CPU核心數量。增加處理器數量,如果您看到過低的吞吐量,并嘗試專注于處理緩沖區處理器,因為輸出緩沖區通常不需要很多。)

  • REST API

    Web前端使用的API

  • MONGODB

    它隻存儲中繼資料:所有項目的使用者,設定和配置資料:流,儀表闆,提取器等。您配置的一切内容。如果Mongo當機挂掉了,Graylog将繼續運作。是以,如過我們使用過程選擇将其納入高可用性設計。可以選擇 Mongo的HA場景 三個執行個體。關鍵詞Mongo Replication set。

  • Elasticsearch Cluster

    這裡看起來像一個ES節點,并且了解每個ES伺服器的配置資料(索引,分片等)。對于HA,建議至少配置一個副本。

  • Anatomy of an Index(索引解析)

    單個索引(在上圖中,Graylog Index#25)被分解成碎片。這意味着索引被分解,部件在不同的ES節點上運作。這樣可以更快地進行搜尋,因為可以在多個ES節點上并行計算查詢結果。索引也可以配置副本。這意味着每個分片都被鏡像到其他節點,對于HA是非常好的。

  • Index Model

    每個索引首次從0開始編号。在時間序列資料庫中,所有資料都以時間戳存儲,一旦存儲就不會被重寫(是以标記為READ_ONLY對于WRITE_ACTIVE表現)。是以,消息不會被重新插入。這使的它很快。由于基于時間的存儲,這也意味着當查詢時,必須給出時間限制搜尋(即在最後一小時内)。 (提示:是以這些索引的大小在性能調優時很重要。你不想使索引太大,因為搜尋将需要更長的時間,并且你不希望它們太短,因為同樣的原因。索引的大小應根據您擁有的資料量以及通常搜尋的程度而定。有時候,人們将它用于較長的曆史戰略類型搜尋。了解并确定尺寸是非常重要的。備注:ES叢集都會存在搜尋,索引太大導緻時間拉長。)

  • Deflector(變流裝置,我的了解就像nginx日志切割一樣,不會影響下一個檔案的寫入)

    原作者寫入一個可以被原子性的切換到新索引的被稱為“Deflector / 偏轉器”的索引别名。這樣我們就不必擔心在建立新的索引時停止消息處理,因為這樣很容易被管理(如:索引#25現在已經關閉了啊等等,接下來的一個是#26,繼續寫)。

二、支援的消息輸入源

  • Syslog

    支援RFC 5424和RFC 3164相容的syslog消息,TCP和UDP傳輸日志。另外,許多裝置,特别是路由器和防火牆,不發送符合RFC的syslog消息,這個時候不得不使用原始/純文字消息輸入的組合。

  • GELF / Sending from applications

    Graylog擴充日志格式(GELF)是一種日志格式,可以避免經典的純系統日志的缺點,非常适合從應用層記錄。它具有可選的壓縮,分塊和最重要的是一個明确定義的結構。 也可以通過HTTP發送所有GELF類型,包括隻是純JSON字元串的未壓縮GELF。

  • Using Apache Kafka as transport queue

    使用apache 的 Kafka 作為傳輸隊列。

  • Using RabbitMQ (AMQP) as transport queue

    使用RabbitMQ 作為傳輸隊列

  • Ruby on Rails 在Gemfile 檔案中添加以下内容
gem "gelf"
gem "lograge"      
  • Raw/Plaintext inputs

    内置的原始/純文字輸入允許您解析可以通過TCP或UDP發送任何文本。 如果需要極高的靈活性,還可以編寫插件。

  • Reading from files

    Collector Sidecar,它作為其他程式(如nxlog和Filebeats)的主管程序,這些程式專門用于從本地檔案收集日志消息并将其發送到像Graylog這樣的遠端系統。 也可以使用支援GELF或syslog協定(包括其他)的任何程式将您的日志發送到Graylog。

三、最小安裝架構

Graylog 日志系統架構

最小安裝(不推薦生産環境)

各元件功能:

  • MongoDB 用于存儲配置元資訊和配置資料(無需太多硬體資源配置)
  • Elasticsearch 用于存儲日志資料(記憶體大以及更高的磁盤IO)
  • Graylog 用于讀取日志、展示日志。(CPU密集)

缺點:

  • 系統無備援、容易出現單點故障,适合測試階段

四、大型生産環境架構

Graylog 日志系統架構

生産安裝

生産安裝部署參考連結

相比最小架構來說,以下是變化部分:

  • 客戶通路和日志源面對的是前端的LB,LB通過Graylog REST API 負載管理Graylog叢集
  • Elasticsearch 使用叢集方案,多節點存儲資料,達到備份備援、負載的效應
  • MongoDB 叢集,具備自動的容錯功能(auto-failover),自動恢複的(auto-recovery)的高可用
  • 各元件友善伸縮擴充

參考

Graylog 官網文檔 Docker gelf 日志驅動 Graylog 官網示例(需修改容器啟動指令) Docker gelf參數 java heap 大小