我正在尝试为某些日志编写groke规则,并且似乎无法找到在单个日志中有多行的情况下应该执行的操作 以下是我拥有的日志的屏幕截图: screenshot of logs 在attatched图像中,绿色(即较短的日志),正确解析,而较长的(由红色框表示,有多行),将被错误地解析。
多行:
这是多线,我写的,
multiline
{
type => "sftp"
pattern => "^[^\[2015]"
what => "previous"
}
这是同样的解析输出(错误):
[2015-10-03 23:32:00.603] ALL Config.logConfiguration() client configuration:]\n localPortCollection=[null]\n minThreadPoolSize=[3]\n maxThreadPoolSize=[6]\n perimeterServerName=[BSC_NODE2_OBD_PS3]\n.
正如您所看到的,上面的输出有" \ n"有了它,我写的格罗克规则不被接受,因为" \ n"在父日志中。
我试过了#34; \ n"在编写grok规则时。
答案 0 :(得分:0)
filter {
if [type] == "sftp"{
multiline {
pattern => "^\[%{TIMESTAMP_ISO8601"
negate => true
what => previous
}
grok {
match => {
message => "\[%{TIMESTAMP_ISO8601:timestamp}\]%{SPACE}%{WORD:loglevel}%{SPACE}%{GREEDYDATA:message}"
}
}
}
}
在多行中使用negate
并检查http://grokdebug.herokuapp.com/patterns#是否有可用的日期模式。
还可以使用date
过滤器。