Logstash~filter.grok插件使用教程(附带实例)

傅雪松
2023-12-01

->->grok在线测试网站-<-<

->->grok官方匹配模式-<-<

->->正则表达式官方语法-<-<

一、grok介绍

  1. 描述任意文本并对其进行结构化
  2. 将非结构化日志数据解析为结构化和可查询的数据
  3. 语法:%{SYNTAX:SEMANTIC}
    1. SYNTAX:要匹配的模式名称
    2. SEMANTIC:为匹配的文本提供的标识符

二、match:匹配

1.常规匹配

按照%{SYNTAX:SEMANTIC}语法进行匹配,将SYNTAX匹配到的内容保存到SEMANTIC字段中

filter{
    grok{
        match => { "message" => "%{IP:ip} %{NUMBER:number} %{WORD:word} %{URIPATHPARAM:uripathparam}"}
	}
}
{
    "message": "192.168.10.100 185 grok /index.html",
    "word": "grok",
    "number": "185",
    "ip": "192.168.10.100",
    "uripathparam": "/index.html"
}

2.转换数据类型

  1. 正常情况下匹配到的数据都是字符类型

  2. 目前支持转换int类型和float类型

  3. 格式:%{NUMBER:num:int}

filter{
    grok{
    	# 将转换的结果转换为整形
        match => {"message" , "%{NUMBER:number:int}"}
	}
}
{
    "message": "185.76",
    "number": 185
}

3.多项匹配

filter{
    grok{
    	# 如果第一个匹配不成功则匹配下一个
        match => [
            "message" , "%{IP:ip} %{NUMBER:number} %{WORD:word} %{URIPATHPARAM:uripathparam}",
            "message" , "%{IP:ip} %{WORD:word}"
		]
	}
}
{
    "message": "192.168.10.100 185 Jack /index.html",
    "word": "Jack",
    "number": "185",
    "ip": "192.168.10.100",
    "uripathparam": "/index.html"
}
{
    "word": "Jack",
    "message": "192.168.10.100 Jack",
    "ip": "192.168.10.100"
}

三 、配置项

1. patterns_dir

  • 功能:自定义正则匹配模式
  • 介绍:可以使用正则表达式自定义匹配的模式,通过路径引用
# ./patterns/extra
TEST_RE [0-9 A-F]{10,11}
filter{
    grok{
    	# 自定义正则表达式路径
        patterns_dir => ["./patterns"]
        match => { "message" => "%{TEST_RE:test_re}"}
	}
}

2. break_on_match

  • 功能:匹配到一次之后直接退出
  • 介绍:默认为true,match成功后不会继续下面的match,如果需要多次match,则需要关闭这个选项
filter{
    grok{
        break_on_match => "false"
        match => {
            "message" => "%{NUMBER:number1} %{WORD:name1}"
        }
        match => {
            "message" => "%{INT:int2} %{WORD:name2}"
        }
	}
}
{   
    "message": "173 Jack",
    "int2": "173",
    "number1": "173",
    "name1": "Jack",
    "name2": "Jack"
}

3. overwrite

  • 功能:覆盖其他字段
  • 介绍:overwrite指定的字段可以被其他同名字段覆盖
filter{
    grok{
        match => {
            "message" => "%{NUMBER:message} %{WORD:name}"
        }
        overwrite => ["message"]
	}
}
{
    "message": "173",
    "name": "Jack",
    "event": {
        "original": "173 Jack"
    }
}

4.target

  • 功能:将匹配到的内容保存到指定字段中
  • 介绍:正常匹配到的内容是在最外层的,使用这个配置项之后就可以将匹配到的内容封装到指定的字段中
filter{
    grok{
        match => {
            "message" => "%{NUMBER:number} %{WORD:name}"
        }
        target => "result"
	}
}
{
    "result": {
        "number": "173",
        "name": "Jack"
    },
    "message": "173 Jack"
}
 类似资料: