elasticsearch 使用logstash解析自定义(不稳定)时间戳格式,elasticsearch,logstash,logstash-grok,grok,elasticsearch,Logstash,Logstash Grok,Grok" /> elasticsearch 使用logstash解析自定义(不稳定)时间戳格式,elasticsearch,logstash,logstash-grok,grok,elasticsearch,Logstash,Logstash Grok,Grok" />

elasticsearch 使用logstash解析自定义(不稳定)时间戳格式

elasticsearch 使用logstash解析自定义(不稳定)时间戳格式,elasticsearch,logstash,logstash-grok,grok,elasticsearch,Logstash,Logstash Grok,Grok,我试图解析时间戳并将其存储为date输入elasticsearch。将其存储为字符串类型是没有问题的,但是我希望根据这个时间戳查询日志。它的格式不是标准的,在logstash模式中找不到 这是日期的显示方式:12/24/15 16:37:14:921 CST 有时1/24/15 16:37:14:921 CST MM/dd/YY HH:MM:ss.SSS z和M/dd/YY HH:MM:ss.SSS z均不工作 下面是我的日志示例 [12/24/15 16:37:14:921 CST] 0000

我试图解析时间戳并将其存储为
date
输入
elasticsearch
。将其存储为字符串类型是没有问题的,但是我希望根据这个时间戳查询日志。它的格式不是标准的,在logstash模式中找不到

这是日期的显示方式:
12/24/15 16:37:14:921 CST

有时
1/24/15 16:37:14:921 CST

MM/dd/YY HH:MM:ss.SSS z
M/dd/YY HH:MM:ss.SSS z
均不工作

下面是我的日志示例

[12/24/15 16:37:14:921 CST] 00000094 ApplicationMg A   WSVR0204I: Application: <some_project_name> Application build level: Unknown
[12/24/15 16:37:15:436 CST] 00000094 SibMessage    W   [:] CWSII0269W: The runtime accessed the user repository for <some module name> to populate missing unique name data when loading the authorization model for the bus.
[12/24/15 16:37:15:452 CST] 00000094 SibMessage    I   [:] CWSII0210I: The authorization policy for the <some module name> has been updated as a result of an administrative update.
[12/24/15 16:37:15:468 CST] 00000094 SibMessage    W   [:] CWSII0269W: The runtime accessed the user repository for<some module name> to populate missing unique name data when loading the authorization model for the bus.
[12/24/15 16:37:14:921 CST]00000094应用程序MG A WSVR0204I:应用程序:应用程序构建级别:未知
[12/24/15 16:37:15:436 CST]00000094 SibMessage W[:]cwsi0269w:运行时访问的用户存储库,以在加载总线的授权模型时填充缺少的唯一名称数据。
[12/24/15 16:37:15:452 CST]00000094 SIBI消息[:]CWSII0210I:的授权策略已作为管理更新的结果进行更新。
[12/24/15 16:37:15:468 CST]00000094 SibMessage W[:]cwsi0269w:运行时访问的用户存储库,以在加载总线的授权模型时填充缺少的唯一名称数据。
这是我的日志存储配置文件

input {
    file {
     path => "<path_to_logs_dir>/applevac.log"
     codec => multiline {
        pattern => "^\[%{TS}\]"
        negate => true
        what => "previous"
        patterns_dir => "..\patterns"
     }
     start_position => "beginning"
     sincedb_path => "since_db"
    }
}

filter {
    grok {
        #includes custom patterns
        match => { "message" => "(\[)%{TS}(\])(\s)+%{HEX:thread}(\s)+%{WORD:module}(\s)+%{ULETTER:letter}(\s)+%{EVERYTHING:eventMsg}" }
    }
    date {
        match => ["eventtime","M/dd/YY HH:mm:ss:SSS z"]
    }
}

output {
    stdout { }
}
输入{
文件{
path=>“/applevac.log”
编解码器=>多行{
模式=>“^\[%{TS}\]”
否定=>true
什么=>“以前的”
模式\u dir=>“。\patterns”
}
开始位置=>“开始”
sincedb_path=>“自\u db”
}
}
滤器{
格罗克{
#包括自定义模式
match=>{“message”=>“(\[)%{TS}(\])(\s)+%{HEX:thread}(\s)+%{WORD:module}(\s)+%{ULETTER:letter}(\s)+%{EVERYTHING:eventMsg}”
}
日期{
匹配=>[“事件时间”,“年/月/日HH:mm:ss:SSS z”]
}
}
输出{
stdout{}
}

如何在elasticsearch中将出现在[]之间的时间戳存储为日期。我可以通过基于该时间戳映射自定义模式
TS
,将其存储为字符串
eventtime
字段从何而来?我试过两种日期格式,它们都很好用。也许在你的grok{}中你指的是%{TS:eventtime},然后在日期{}中使用这两种模式?%%TS:eventtime}将其存储为字符串。不是约会。因为TS不是elasticsearch接受的标准日期格式。如果低于9,则一个月和一天中的更多数据将以一位数显示。这些日志是为log4j定制的appender而来的,正如Val指出的,我不能修改代码的这一部分,您在date{}节中引用了“eventtime”,但没有显示它是如何创建的。由于在grok中使用%{TS}解析消息的日期,因此将该值放入“eventtime”中似乎是有意义的,也许这就是缺少的。或者不是。是的,有点像。让我试试,您的
eventtime
字段来自哪里?我试过两种日期格式,它们都很好用。也许在你的grok{}中你指的是%{TS:eventtime},然后在日期{}中使用这两种模式?%%TS:eventtime}将其存储为字符串。不是约会。因为TS不是elasticsearch接受的标准日期格式。如果低于9,则一个月和一天中的更多数据将以一位数显示。这些日志是为log4j定制的appender而来的,正如Val指出的,我不能修改代码的这一部分,您在date{}节中引用了“eventtime”,但没有显示它是如何创建的。由于在grok中使用%{TS}解析消息的日期,因此将该值放入“eventtime”中似乎是有意义的,也许这就是缺少的。或者不是。是的,有点像。让我试试