我一直在关注Logstash教程,并为测试目的创建了以下配置文件:
input {
file {
path => "C:\Dev\sample.log"
start_position => beginning
}
}
filter{
date {
match => [ "logdate", "YYYY-MM-dd HH:mm:ss,SSS" ]
}
}
output {
elasticsearch { host => localhost
index => "test"
}
stdout { codec => rubydebug }
}
但是,输出的唯一字段是 "消息&#34 ;, " @版本&#34 ;, " @时间戳&#34 ;, "主机"和 "路径"
否" logdate"被检索。我已经搜索了一段时间,我看到人们在错误的日期格式下遇到了同样的问题,但我用#34; Joda-Time"正如Logstash教程推荐的那样。谢谢你的帮助。
答案 0 :(得分:4)
通过执行以下操作,我设法得到了我想要的结果:
input {
file {
path => "C:\Dev\sample.log"
start_position => beginning
}
}
filter{
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:logdate}" ]
}
date {
match => [ "logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
}
}
output {
elasticsearch { host => localhost
index => "test"
}
stdout { codec => rubydebug }
}
所以,这可能是我的问题的答案,我希望它可以帮助那些陷入困境的人。但是我仍然不明白为什么我之前的例子(在问题中)没有给我(我认为是)正确的输出?如果有人能给我一些解释,我真的很感激。非常感谢!
答案 1 :(得分:1)
首先,我需要说我只是新手,但我的理解如下:
在日期过滤器中,匹配是一个令人困惑的术语。它与单词的正则表达式不匹配,它解析一个字符串并将其转换为日期。它只是看一个字符串并说,"第一个字符是一年中的第一个数字"它不做的是在另一个字符串中找到指定格式的字符串(在你的情况下是整个消息)。这是grok的工作。
总而言之,grok找到一个看起来像日期的字符串,日期过滤器将字符串转换为日期。