if [CREATION_DATE] == ""
{
mutate {
convert => [ "CREATION_DATE", "string" ]
}
}
else
{
date {
locale => "en"
match => [ "CREATION_DATE", "dd-MMM-yy hh.mm.ss.SSS a"]
target => "CREATION_DATE"
}
}
if [SUBMITTED_DATE] == ""
{
mutate {
convert => [ "SUBMITTED_DATE", "string" ]
}
}
else
{
date {
locale => "en"
match => [ "SUBMITTED_DATE", "dd-MMM-yy hh.mm.ss.SSS a"]
target => "SUBMITTED_DATE"
}
}
if [LAST_MODIFIED_DATE] == ""
{
mutate {
convert => [ "LAST_MODIFIED_DATE", "string" ]
}
}
else
{
date {
locale => "en"
match => [ "LAST_MODIFIED_DATE", "dd-MMM-yy hh.mm.ss.SSS a"]
target => "LAST_MODIFIED_DATE"
}
}'
如果我在日期格式中拥有全部三个(CREATION_DATE,SUBMITTED_DATE,LAST_MODIFIED_DATE),那么正在获取输出。如果STRING没有在我的输入中获取该日志文件。 对于前: 我的意见是
12-JUL-13 11.33.56.259 AM,12-JUL-13 03.59.36.136 PM,12-JUL-13 04.00.05.584 PM
14-JUL-13 11.33.56.259 AM,11-JUL-13 04.00.05.584 PM
我的输出将成功
12-JUL-13 11.33.56.259 AM,12-JUL-13 03.59.36.136 PM,12-JUL-13 04.00.05.584 PM
但不是第二行
在Simple中,只有当三个if子句具有日期时,Logstash才会建立索引。 帮助我。提前提醒!!
答案 0 :(得分:1)
@ Fairy和@ alain-collins的评论指出了if语句的问题。
if [CREATION_DATE] == ""
不检查该字段是否存在,它检查它是否为空字符串。
相反,您可以使用正则表达式检查来查看字段中是否有任何内容使用:
if [CREATION_DATE] =~ /.*/
并在返回true时执行日期过滤器。
答案 1 :(得分:0)
当我更改输入格式时问题解决了。 (新格式)11-JUL-13 06.36.33.425000000 PM,13-JUL-13 06.36.33.425000000 PM ,, 代替 (旧格式)11-JUL-13 06.36.33.425000000 PM,13-JUL-13 06.36.33.425000000 PM,"", 但我的问题仍然存在。 我发布了这个,因为这个解决方案可能对某些人有用。 感谢!!!