Grok正则简介
- 日志源提供的日志格式可能并不是我们想要插入存储介质里的格式,Logstash里提供了一系列的filter来让我们转换日志。Grok就是这些filters里最重要的一个插件,(==简单来说就是过滤日志数据==)。而且后期你还会使用Grok正则里定义的field来进行相关指标的分析。
语法解释:
- %{TIMESTAMP_ISO8601:time},代表时间戳
- %{LOGLEVEL},代表日志级别
- %{DATA},代表任意数据
- (?([\S+]*)),自定义正则
- \s*或者\s+,代表多个空格
- \S+或者\S*,代表多个字符
- 大括号里面:xxx,相当于起别名
Grok正则调试地址:https://grokdebug.herokuapp.com/
demo
日志数据:
2018-03-12 10:18:09,797 DEBUG [http-bio-8083-exec-10] DEBUG c.b.e.c.repository.PmtcrMapper.selectByPrimaryKey
Grok正则:
\s*%{TIMESTAMP_ISO8601:time}\s*%{LOGLEVEL:level}\s*\[%{DATA:current_thread}\]\s*%{LOGLEVEL:level1}\s*(?<class_info>([\S+]*))
结果:
{
"time": [
[
"2018-03-12 10:18:09,797"
]
],
"YEAR": [
[
"2018"
]
],
"MONTHNUM": [
[
"03"
]
],
"MONTHDAY": [
[
"12"
]
],
"HOUR": [
[
"10",
null
]
],
"MINUTE": [
[
"18",
null
]
],
"SECOND": [
[
"09,797"
]
],
"ISO8601_TIMEZONE": [
[
null
]
],
"level": [
[
"DEBUG"
]
],
"current_thread": [
[
"http-bio-8083-exec-10"
]
],
"level1": [
[
"DEBUG"
]
],
"class_info": [
[
"c.b.e.c.repository.PmtcrMapper.selectByPrimaryKey"
]
]
}