最近由於專案需要上線乙個日誌採集、展示的功能,藉此機會梳理了一下日誌採集的大體框架。一般日誌採集的總體框架如下:
大體流程為:統一日誌系統負責收集所有系統日誌和業務日誌,轉化為流式資料,通過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 + mongodbsink和flume + 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....