会话 ID 和空值的 Logstash Grok 模式

Logstash Grok pattern for session id and null values

问题 1 -

56dd573d.5edd 这是我的会话 ID,我有像

这样的 grok 过滤器

%{WORD:session_id}.%{WORD:session_id} - 这将读取会话 ID,输出将如下所示

 "session_id": [
    [
      "56dd573d",
      "5edd"
    ]
  ]

有什么方法可以得到类似

的输出
  "session_id": [
    [
      "56dd573d.5edd"
    ]
  ]

我只需要在单个字段中使用它

问题 2 -

2016-03-08 06:48:15.477 GMT

这是我的日志条目中的一行,我已经使用了

%{DATESTAMP:log_time} %{WORD} 

grok 过滤器来读取这个日期,这里我只是想删除或忽略 GMT

是否有任何特殊模式可以忽略日志行中无用的下一个单词?

已更新

问题 3 - 我如何处理空值,它在 GMT 之后

2016-03-07 10:26:05 GMT,,

这是我的 postgresql 日志条目

2016-03-08 06:48:15.477 GMT,"postgres","sugarcrm",24285,"[local]",56dd573d.5edd,4,"idle" ,2016-03-07 10:26:05 GMT,0,LOG,00000,"disconnection: session time: 20:22:09.928 user=postgres database=sugarcrm host=[local]","""

Note - null value may be in "" or ,,

问题 3 的答案

我找到了处理 ,

的解决方案

下面是处理 , value 的配置,用它替换 0

input {
  file {
    path => "/var/log/logstash/postgres.log"
    start_position => "beginning"
    type => "postgres"
  }
}

filter {
  mutate {
    gsub => [
      "message", "^,", "0,",
      "message", ",,", ",0,",
      "message", ",,", ",0,",
      "message", ",,", ",0,",
      "message", ",$", ",0"
    ]
  }
grok {
        match => ["message","%{GREEDYDATA:msg1}"]
}
}

output {
  stdout { codec => rubydebug }
}

Reference - http://comments.gmane.org/gmane.comp.sysutils.logstash.user/13842

但我正在尝试“”空值我尝试了以下配置但我收到配置错误

filter {   mutate {
    gsub => [
      "message", "^,", "0,",
      "message", ",,", ",0,",
      "message", ",,", ",0,",
      "message", ",,", ",0,",
      "message", ",$", ",0",
      "message", "^\""  "null\""
      "message", """" ""null""
      "message", """" ""null""
      "message", ""$", ""null"
    ]   }

我需要将“”替换为 null

关于问题 1。它将两者分开,因为本质上你要求它做的事情会为 session_id 添加另一个值。你想要这样的东西:

(?<session_ID>(%{WORD}.%{WORD})) 

https://grokdebug.herokuapp.com/ 上试用。您可以在哪里测试您的模式。我上面不是最好的解决方案,但我没有关于消息其余部分的足够信息。因为如果你知道的多了,你就可以扔掉WORD匹配了。例如,如果它是一个固定长度的结构化 session_ID,你可以这样做:

(?<session_ID>([a-zA-Z0-9]{1,8}\.)[a-zA-Z0-9]{1,4})

关于第二个问题。我会对其进行硬编码以进行快速破解:

%{DATESTAMP:log_time} GMT

提供更多信息,我们可以给出更好更具体的答案。以上应该可行,但有几种方法可以给猫剥皮!