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;
        }
    }
}

运行结果:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值