ELK logstash的grok 自带的正则匹配、自定义正则 使用

一、使用

1、查看 grok 自带的正则

2、语法

需要提取出字段名

  • %{官方定义的正则名或者自定义的正则名:从日志中提取出来的字段名}

不需要提取出字段名

  • %{官方定义的正则名或者自定义的正则名}

3、使用

1)、Sample Data

Sample Data (原数据)

[2020-09-26 13:07:54] GET http://www.test.com/index/index/test 0.118220

2)、Grok Pattern

Grok Pattern(grok 正则)

\[%{
    
    TIMESTAMP_ISO8601:timestamp}\] %{
    
    USERNAME:method}[T ]%{
    
    URL:url} %{
    
    NUMBER:exec_time}

3)、Custom Patterns

Custom Patterns(自定义正则)

  • 由于grok自带的网址匹配每页匹配http://https://。所以我们自定义一个名为URL的正则,如下所示
URL (http(s)?:\/\/)?%{
    
    URIHOST:domain_name}%{
    
    URIPATH}

4)、结果

Kibana -> Console -> Grok Debugger 中执行的结果

{
    
    
  "domain_name": "www.test.com",
  "method": "GET",
  "exec_time": "0.118220",
  "url": "http://www.test.com/index/index/test",
  "timestamp": "2020-09-26 13:07:54"
}

5)、正则讲解

  • \[ :匹配字符 [
  • %{TIMESTAMP_ISO8601:timestamp} :把符合TIMESTAMP_ISO8601正则的内容匹配出来,作为timestamp字段存入es
  • :匹配空格
  • %{USERNAME:method}:把符合USERNAME(USERNAME其实就是个字符串匹配)正则的内容匹配出来,作为method字段存入es
  • [T ]:匹配空格
  • %{URL:url}:把符合自定义的 URL正则的内容匹配出来,作为url字段存入es
    • 自定义的 URL中有自己写的正则,也用到了grok的正则
    • %{URIHOST:domain_name}提取了字段名domain_name到es;
    • %{URIPATH}没有提取出字段名
  • :匹配空格
  • %{NUMBER:exec_time} :把符合NUMBER正则的内容匹配出来,作为exec_time字段存入es

二、在线测试

1、在线Grok Debug工具,Grok校验|调试

2、Kibana中调试

  • Kibana -> Console -> Grok Debugger 中执行的结果

效果图如下所示:
在这里插入图片描述

三、logstash配置文件

1、配置文件输入

input {
    
    
 file {
    
    
    ...
  }
}
filter {
    
      
    grok {
    
      
		match => {
    
    
			"message"=>"\[%{TIMESTAMP_ISO8601:timestamp}\] %{USERNAME:method}[T ]%{URL:url} %{NUMBER:exec_time}"
		}
   }  
} 
output {
    
    
    ...
}

2、自定义正则生效

如何使我们自定义的正则生效呢,找到 logstash 中的文件 grok-patterns,在文件末尾追加自定义的内容(名字不能与已有的名字重复),重启服务生效。
正则配置文件路径:logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns

...

# Log formats
SYSLOGBASE %{
    
    SYSLOGTIMESTAMP:timestamp} (?:%{
    
    SYSLOGFACILITY} )?%{
    
    SYSLOGHOST:logsource} %{
    
    SYSLOGPROG}:

# Log Levels
LOGLEVEL ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)

# 用户自定义正则
URL (http(s)?:\/\/)?%{
    
    URIHOST:domain_name}%{
    
    URIPATH}

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/108825120
今日推荐