日誌採集處理

2021-09-07 09:39:58 字數 2108 閱讀 7320

最近由於專案需要上線乙個日誌採集、展示的功能,藉此機會梳理了一下日誌採集的大體框架。一般日誌採集的總體框架如下:

大體流程為:統一日誌系統負責收集所有系統日誌和業務日誌,轉化為流式資料,通過flume或logstash上傳到日誌中心(kafka集群),然後供track、storm、spark及其它系統實時分析處理日誌,並將日誌持久化儲存到hdfs供離線資料分析處理,或寫入elasticsearch提供資料查詢,或寫入hawk發起異常報警或提供指標監控查詢。

從上面總體架構圖中,我們可以看到整個日誌平台架構分為四層,從左到右依次是日誌接入層、日誌中心、日誌處理層、日誌儲存層。

1、日誌接入層

日誌接入層主要有兩種方式,方式1基於rsyslog和logstash,方式2基於flume-ng

對於一些穩定的日誌,比如系統日誌或框架日誌(如nginx訪問日誌、phpfpm異常日誌等),我們新增nginx配置,通過rsyslog寫到本地目錄local0,然後logstash根據其配置,會將local0中的增量日誌上傳到日誌中心對應的topic中。

基於本身專案架構,我們採用flume + mongodbsinkflume + elasticsearch + kibana的二種方式進行處理,後面會做詳細介紹。

mongodbsink配置如下:

agent.sources = r1

agent.channels = c1

agent.sinks = s1

agent.sources.r1.type = exec

agent.sources.r1.command = tail -f /data01/monitorrequst.log

agent.sources.r1.interceptors = i1

agent.sources.r1.interceptors.i1.type = regex_extractor

agent.sources.r1.interceptors.i1.regex = (\\)

agent.sources.r1.interceptors.i1.serializers = s1

agent.sources.r1.interceptors.i1.serializers.s1.type = org.apache.flume.interceptor.regexextractorinterceptorpassthroughserializer

agent.sources.r1.interceptors.i1.serializers.s1.name = value

agent.channels.c1.type = memory

agent.channels.c1.capacity = 1000

agent.channels.c1.transactioncapacity = 100

agent.sinks.s1.type = org.riderzen.flume.sink.mongosink

agent.sinks.s1.host = xx.xx.xx.xx

agent.sinks.s1.port = 27017

agent.sinks.s1.model = single

agent.sinks.s1.db = 資料庫表

agent.sinks.s1.username = xx

agent.sinks.s1.password = yy

agent.sinks.s1.collection = 表名

agent.sinks.s1.batch = 100

agent.sources.r1.channels = c1

agent.sinks.s1.channel = c1

參見:

日誌採集 基於Flink的日誌採集

目前基於elk架構的日誌系統,通過filebeat收集上來的日誌都會傳送到同乙個kafka topic中,然後再由logstash消費處理寫入elasticsearch中,這種方式導致該topic包含所有業務日誌,那麼各個業務去做實時統計分析就會造成重複消費,使得流量成本的浪費 對於離線分析的日誌 ...

日誌採集系統

編寫日誌採集系統 邏輯分析 1.找到伺服器上日誌存在的目錄,因為日誌可能正在編寫,防止讀取檔案的時候,日誌檔名的改變,所以將編寫完成的日誌移動到某乙個臨時的資料夾下 2.在臨時資料夾下將檔案上傳至hdfs系統中 3.將讀取的檔案移動到某種備份檔案中,設定為24小時後自動刪除 採集日誌 public ...

Taildirsource採集日誌

taildirsource採用的是正規表示式,不可隨意修改名字否則回出現重複採集問題 1是agent的名稱,a1中定義了乙個叫r1的source,如果有多個,使用空格間隔 a1.sources r1 a1.sinks k1 a1.channels c1 組名名.屬性名 屬性值 a1.sources....