logstash_grokparsefailure问题

logstash_grokparsefailure问题,logstash,logstash-grok,Logstash,Logstash Grok,我对grok解析有问题。 在ElasticSearch/Kibana中,我匹配的行会出现标记“grokparsefailure” 这是我的日志存储配置: input { file { type => logfile path => ["/var/log/mylog.log"] } } filter { if [type] == "logfile" { mutate { gsub =>

我对grok解析有问题。 在ElasticSearch/Kibana中,我匹配的行会出现标记“grokparsefailure”

这是我的日志存储配置:

input { 
    file { 
     type => logfile 
     path => ["/var/log/mylog.log"] 
    } 
  } 
filter { 
    if [type] == "logfile" 
    { 
      mutate {
      gsub => ["message","\"","'"]
      }  

    grok 
        { match => { "message" => "L %{DATE} - %{TIME}: " } } 
    } 
} 

output { 
   elasticsearch { host => localhost port => 9300 } 
}
我试图匹配的线条/图案: L 08/02/2014-22:55:49:日志文件关闭:“完成”

我尝试了调试器,它工作正常,我的模式匹配正确

我想要解析的行可能包含双引号,我已经读到grok处理和转义它们的方式可能存在问题。 所以我尝试用变异来代替“替换”,以避免出现问题,但没有运气

有什么想法吗? 我如何调试这个


谢谢

发现了这个问题,是双引号引起的

match => { 'message' => 'L %{DATE:date} - %{TIME:time}: \"string_between_doublequotes\" '
需要使用简单引号来定义grok筛选器,并转义双引号

match => { 'message' => 'L %{DATE:date} - %{TIME:time}: \"string_between_doublequotes\" '

mylog.log中还有其他内容吗?因为任何不匹配的行都会生成一个
\u grokparsefailure
。调试这一点的一个好策略是创建一个包含预期日志的测试文件,并使用带有
输入{stdin{}
输出{stdout{codec=>rubydebug}的配置文件
然后执行logstash-f test_confgrok结果…例如
{%DATE DATE}
Hi,日志中还有其他东西我希望grokparsefailure是。尝试使用/logstash-e'input{stdin{}}output{stdout{codec=>rubydebug}}}“l08/02/2014-22:55:49:日志文件关闭”,“@version”=>“1”,“@timestamp”=>“2014-08-18T19:14:38.033Z,“主机”=>“lepostack”}这对我来说似乎很好:(@Alcanzar)这条评论值得回答,因为它回答了“我如何调试这个”的问题。我会给你一个投票,因为它帮助了我。