问题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,"空闲",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
但我正在努力"" null值我尝试下面的配置,但我收到配置错误
filter { mutate {
gsub => [
"message", "^,", "0,",
"message", ",,", ",0,",
"message", ",,", ",0,",
"message", ",,", ",0,",
"message", ",$", ",0",
"message", "^\"" "null\""
"message", """" ""null""
"message", """" ""null""
"message", ""$", ""null"
] }
我需要更换""使用null
答案 0 :(得分:2)
关于问题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
提供更多信息,我们可以提供更具体的答案。以上应该可以,但有几种方法可以给猫皮肤!