logstash grok解析

WooSnowden 8年前發布 | 51K 次閱讀 分布式/云計算/大數據

來自: http://blog.csdn.net/mishifangxiangdefeng/article/details/50573205


《本地搭建ELK系統》中,在本地搭建了一個非常簡單的ELK系統。其中logstash從本地日志文件中讀取信息并交給elasticsearch。

然而直接把原始未加工的日志交給elasticsearch沒有什么意義。

logstash還有一個重要的工作就是解析日志。把解析出來的關鍵字與日志本身共同交給elasticsearch,elasticsearch才能很好地建立日志索引。

logstash支持多種解析器,grok是其中一種。

使用grok filter需要在logstash的配置文件中加上這樣的內容:

filter {
    grok {
        match => { "message" => "grok_pattern" }
    }
}

這段代碼中除了grok_pattern以外都是logstash的關鍵字。grok_pattern部分需要使用者填充自己的解析方式。

grok_pattern由零個或多個%{SYNTAX:SEMANTIC}組成,其中SYNTAX是表達式的名字,是由grok提供的,例如數字表達式的名字是NUMBER,IP地址表達式的名字是IP。SEMANTIC表示解析出來的這個字符的名字,由自己定義,例如IP字段的名字可以是client。

對于下面這條日志:

55.3.244.1 GET /index.html 15824 0.043

可以這樣解析:

filter {
    grok {
        match=>{ "message"=>"%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
    }
}

將會得到這樣的結果

* client: 55.3.244.1

  • method: GET
  • request: /index.html
  • bytes: 15824
  • duration: 0.043</pre>

    grok提供了哪些SYNTAX?可以查看文件grok-patterns,它默認放在路徑/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns下。

    假設現在要匹配一個正則表達式為regexp的字符串,而grok預定義的SYNTAX都不滿足,也可以自己定義一個SYNTAX

    自定義SYNTAX 方式有兩種:

    (1)匿名SYNTAX

    %{SYNTAX:SEMANTIC} 寫為(?<SEMANTIC>regexp)

    (2)命名SYNTAX

    • 在dir下創建一個文件,文件名隨意

    • 將dir加入grok路徑: patterns_dir => "./dir"

    • 將想要增加的SYNTAX寫入: SYNTAX_NAME regexp

    • 使用方法和使用默認SYNTAX相同:%{SYNTAX_NAME:SEMANTIC}

    • </ul> </div>

 本文由用戶 WooSnowden 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!