问题 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
提供更多的信息,我们可以给出更好更具体的答案。以上应该有效,但是有几种方法可以剥猫皮!