1. 程式人生 > 其它 >ELK學習之Logstash篇

ELK學習之Logstash篇

Logstash在ELK這一整套解決方案中作為資料採集終端,支援對接Kafka、資料庫(MySQL、Oracle)、檔案等等。

而在Logstash內部的資料流轉,主要經過三個環節:input -> filter -> output,顧名思義就是輸入、過濾(處理)以及輸出。接下來通過一個實際的操作案例來感受一下Logstash內部的資料流轉過程。

首先在官網下載Logstash的執行包,https://www.elastic.co/fr/downloads/logstash,由於我本地是Windows環境,因此選擇下載Windows對應的包:

將下載完畢的壓縮包logstash-7.14.1-windows-x86_64.zip進行解壓之後進入bin目錄並建立logstash.conf檔案用於對input、filter以及output進行相應的配置:

接下來在配置檔案中進行響應的配置,直接給出完整的例子並在後文進行詳解:

input {
    file {
        path => "D:/logstash-7.14.1/test-log/test.log"
        start_position => beginning
    }
}

filter {    
    grok {                        
        match => { "message" => "(?<Time>[0-9]{6}\.[0-9]{3})\[(?<LogLevel>\d)\]\[(?<ThreadNo>[0-9]*)\].*(?<Tag>FindResponseByPage)\[fund\_account\=(?<FundAccount>[0-9]*)" }
    }
    
    if 
[Tag] != "FindResponseByPage" { drop {} } } output { file { path => "D:/logstash-7.14.1/test-log/logstash.log" codec => line { format => "Time: %{Time}, LogLevel: %{LogLevel}, ThreadNo: %{ThreadNo}, Tag: %{Tag}, FundAccount: %{FundAccount}" } } }

input 中新增 file 項表示通過檔案進行輸入,path 為檔案的絕對路徑(如果配置非絕對路徑,Logstash會給出報錯提示),start_position => beginning 表示每次從檔案頭開始讀取。

filter中則進行對輸入資料的相關處理進行配置(filter可以不配置,效果是原樣輸出)。

grok是Logstash的核心外掛之一,可以根據配置的表示式進行資料篩選並存入指定的變數名中。grok提供了一系列標準的匹配模板,不過由於grok底層也是基於正則表示式,因此也可以直接輸入正則表示式進行匹配。

這裡搬運一個官網上的例子:

55.3.244.1 GET /index.html 15824 0.043

針對上述格式的資料,可以通過grok提供的標準表示式模板進行匹配:

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

示例中,IP為預定義的模板,client為準備存入的變數名。很容易看出,grok的標準語法如下:

%{SYNTAX:SEMANTIC}

SYNTAX:匹配值的型別,例如15824可以用NUMBER型別所匹配,55.3.244.1可以使用IP型別匹配。
SEMANTIC:儲存該值的一個變數名,例如GET可能代表的是REST請求中指定的方法,那麼用method來進行儲存。


當然,像上方的配置檔案示例中一樣,通過原生的正則表示式來進行匹配也可以,不使用預定義模板的格式如下:

(?<field_name>the pattern here)

其中field_name表示儲存匹配到內容的變數名,後面部分則是表示式,例如:

093124.597[0][30100]

對應的匹配表示式為:

?<Time>[0-9]{6}\.[0-9]{3})\[(?<LogLevel>\d)\]\[(?<ThreadNo>[0-9]*)\]

根據匹配到的值可以通過drop進行一個篩選,例如只需要LogLevel值為error的資料,可以在filter中新增如下配置:

if [LogLevel] != "error" {
    drop {}
}

output這裡同樣配置了file,也就是將輸入的資料經過處理後輸出到另一個指定檔案中,path為輸出檔案的絕對路徑,format則指定了輸出的格式。

接下來啟動Logstash來觀察一下效果,在bin目錄開啟命令列並輸入啟動命令:

再看一下輸入檔案和輸出檔案中的效果,首先是輸入檔案test.log:

接下來是輸出檔案logstash.log,成功達到了了欄位匹配以及篩選的效果:

最後補充一點,Logstash的外掛非常多,配置項也非常多。建議直接在官網進行學習,再介紹下如何閱讀官網的配置詳解:

導航欄右側有input、filter、output等外掛的欄目,通過點選導航欄或者左側正文部分的具體配置項,可以點選進一步檢視配置詳情: