java 使用 grok 解析日誌

由於在一些複雜無結構的日誌,json、xml等解析規則無法解決,就可以用到Grok,Grok本身使用正則表達式解析日誌,由於正則表達式的強大功能,使得Grok可解析 syslog logs、apache and other webserver logs、mysql logs等任意格式。

 

1、正則表達式庫

Grok內置了許多的正則表達式庫,便於我們直接使用開發(github搜索grok,項目一般都有這個pattern文件)。

也可以直接用下面任一地址,下載保存

https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns 或

https://github.com/thekrakken/java-grok/blob/master/src/main/resources/patterns/patterns

 

2、pom配置maven依賴

 <dependency>
    <groupId>io.thekraken</groupId>
    <artifactId>grok</artifactId>
    <version>0.1.5</version>
 </dependency>

3、java編碼

package com.grok;

import io.thekraken.grok.api.Grok;
import io.thekraken.grok.api.Match;
import io.thekraken.grok.api.exception.GrokException;

import java.util.Map;

public class GrokTest {
    private static final String GROK_PATTERN_PATH = "D:\\work\\workspace\\basp_monitor\\springboot_jpa\\src\\main\\resources\\patterns";

    public static void main(String[] args) {
        String pattern="%{MONTH}\\s+%{MONTHDAY}\\s+%{TIME}\\s+%{YEAR}.*%{fromIP}";
        String message = "Mon Nov  9 06:47:33 2015; UDP; eth1; 461 bytes; from 88.150.240.169:tag-pm";
        Match match = null;
        try {
            Grok grok = new Grok();
            //添加patter配置文件,默認的grok的pattern是null
            grok.addPatternFromFile(GROK_PATTERN_PATH);
            //添加自定義pattern,當然%{IPV4}可以不用已有pattern,也可以自定義正則表達式
            grok.addPattern("fromIP", "%{IPV4}");
            grok.compile(pattern);
            match = grok.match(message);
            match.captures();
            if(!match.isNull()){
                System.out.println(match.toMap().toString());
                System.out.println(match.toJson().toString());
            }else{
                System.out.println("not match");
            }
        } catch (GrokException e) {
            e.printStackTrace();
            match = null;
        }
    }
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章