1. 程式人生 > >filebeat採集資料的幾個痛點的解決方案

filebeat採集資料的幾個痛點的解決方案

1.行轉列

filebeat採集多行日誌的時候會把日誌分開來採集,這樣傳遞到logstash的時候就無法正確解析了,所以用把多行日誌統一採集。
這時候可以使用:multiline配置選項。

  • multiline:適用於日誌中每一條日誌佔據多行的情況,比如各種語言的報錯資訊呼叫棧。這個配置的下面包含如下配置:

    pattern:多行日誌開始的那一行匹配的pattern
    negate:是否需要對pattern條件轉置使用,不翻轉設為true,反轉設定為false
    match:匹配pattern後,與前面(before)還是後面(after)的內容合併為一條日誌
    max_lines:合併的最多行數(包含匹配pattern的那一行)
    timeout:到了timeout之後,即使沒有匹配一個新的pattern(發生一個新的事件),也把已經匹配的日誌事件傳送出去

譬如採集tomcat日誌的時候可以這麼配

    multiline:
    pattern: ‘^\[‘
    negate:  true
    match:   after

這樣就能採集每一次輸入的多行日誌了,不過對已經存在的日誌會一窩蜂的採集。

2.帶上自定義引數

基本上filebeat資料通過logstash解析後傳到es的資料都會進行分類。採集的時候就必須帶上採集資料所屬的類別,以便於之後的分析。filebeat可以在採集的資料上增加fields自定義引數,便於解析。

  • fields:向輸出的每一條日誌新增額外的資訊,比如“level:debug”,方便後續對日誌進行分組統計。預設情況下,會在輸出資訊的fields子目錄下以指定的新增fields建立子目錄,例如fields.level。
    fields: level: debug

不過這樣採集的資料還是無法進行分析,因為資料到達es後,es預設會將資料進行分詞,錄入的資料會被分詞器分析稱各個term,無法進行分類。必須使用動態模板對映logstash傳輸到es的資料。

3.多目錄採集

很多時候會採集多目錄下的日誌資料,並且每個日誌資料都會有自己的自定義引數,這時候可以定義多個input_type來解決這個問題,寫法如下

filebeat.prospectors:
- input_type: log
  paths:
    - /data1/server/tomcat/tomcat12004/logs/*
  fields:
    logIndex: tomcat
    docType: tomcat-log
    system:  m.openapi
  multiline:
    pattern: ‘^\[‘
    negate:  true
    match:   after
- input_type:
log
paths: - /data1/server/tomcat/tomcat12001/logs/catalina.out fields: logIndex: tomcat docType: tomcat-log system: csb multiline: pattern: ‘^\[‘ negate: true match: after