会话 ID 和空值的日志存储 Grok 模式



问题 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 - 如何处理 null 值,它在 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,"断开连接: 会话时间: 20:22:09.928 user=postgres database=sugarcrm host=[local]",,,,,,,,,"

注意 - 空值可能位于 " 或 ,,

对问题3的回答

我找到了处理的解决方案,,

下面是处理 ,, 值的配置,用它替换 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 }
}

参考- 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"
    ]   }

我需要将"替换为空

关于问题 1。它将两者分开,因为本质上你要求它做什么,它为session_id增加了另一个价值。你想要这样的东西:

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

在 https://grokdebug.herokuapp.com/上试试看。在哪里可以测试您的模式。I 以上不是最好的解决方案,但我没有足够的关于消息其余部分的信息。因为如果你知道更多,你可以扔掉WORD匹配。例如,如果它是具有固定长度的结构化session_ID,则可以执行以下操作:

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

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

%{DATESTAMP:log_time} GMT

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

最新更新