elasticsearch 用于自定义日志的日志存储过滤器Grok,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" /> elasticsearch 用于自定义日志的日志存储过滤器Grok,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana" />

elasticsearch 用于自定义日志的日志存储过滤器Grok

elasticsearch 用于自定义日志的日志存储过滤器Grok,elasticsearch,logstash,kibana,elasticsearch,Logstash,Kibana,我第一次使用Logstash,我试图用grok过滤器映射日志,将它们放在ElasticSearch上,并用Kibana可视化 这是我目前的情况: 过滤器 filter { grok { match => { "message" => "%{TIMESTAMP:timestamp} | %{WORD:trackingId} | %{WORD:request} | %{WORD:session} | %{IP:client} | %{WORD:userId} |

我第一次使用
Logstash
,我试图用grok过滤器映射日志,将它们放在
ElasticSearch
上,并用
Kibana
可视化

这是我目前的情况:

过滤器

filter {
  grok {
    match => { "message" => "%{TIMESTAMP:timestamp} | %{WORD:trackingId} | %{WORD:request} | %{WORD:session} | %{IP:client} | 
      %{WORD:userId} | %{GREEDYDATA:message}" }
  }
}
日志

2017-03-21 11:11:54.731 | myApp_35 | myApp_35 | 69E59F4DACC314C0B11B1A8CEA87F9BB | 127.0.0.1 |  | GET on URL [/api/customer] executed with success in [18555 us].
显然这不起作用。我做错了什么?

试试这个

%{TIMESTAMP_ISO8601:timestamp}%{SPACE}\|%{SPACE}%{WORD:trackingId}%{SPACE}\|%{SPACE}%{WORD:request}%{SPACE}\|%{SPACE}%{WORD:session}%{SPACE}\|%{SPACE}%{IP:client}%{SPACE}\|%{SPACE}%{DATA:userId}%{SPACE}\|%{SPACE}%{GREEDYDATA:message}
根据OPs注释,此处是另一个正则表达式,其空格替换为\s*

%{TIMESTAMP_ISO8601:timestamp}\s*\|\s*%{WORD:trackingId}\s*\|\s*%{WORD:request}\s*\|\s*%{WORD:session}\s*\|\s*%{IP:client}\s*\|\s*%{DATA:userId}\s*\|\s*%{GREEDYDATA:message}

我建议您使用此站点测试grok正则表达式:

显然%{SPACE}不起作用。我用一个简单的空格字符替换了它,一切都很好!你能修改答案吗?那么我接受它:)实际上空间是在grok模式中定义的。请看这里:@Nano请检查更新是否正常。我将%{SPACE}替换为\s*,它将查找空间(0次或更多次)。如果这对你有帮助,请接受答案。