这是我的问题:让我们说我有一些标准的Apache日志,如下:
IP1 IP2 - - [13/Jun/2016:14:45:05 +0200] "GET /page/requested.html HTTP/1.1" 200 4860 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0"
我可以使用Logstash的实际配置来成功解析这些日志:
input {
file {
path => '/home/user/logsDir/*'
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
}
output {
elasticsearch { }
stdout { codec => rubydebug }
}
但是在这些日志中,我应用了一些机器学习算法,我给它们score
。所以新的日志行看起来像这样:
IP1 IP2 - - [13/Jun/2016:14:45:05 +0200] "GET /page/requested.html HTTP/1.1" 200 4860 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0" 0.00950628507703
请注意该行末尾的 0.00950628507703
,即实际的 score
现在,我想解析这一行,以便在Kibana中使用score
进行可视化(Logstash在整个ELK堆栈中进行了整合)。因此,如果得分可以作为浮动解析,那将是很好的。
NB:我可以在标准Apache日志消息之前或之后放置分数,并在两者之间插入任何类型的字符(目前它只是一个空格)。
关于如何解决这个问题的任何想法?
提前致谢!
答案 0 :(得分:0)
最终我找到了如何处理。我在分数前添加了一个小关键字:单词pred
所以我的行知道如下:
IP1 IP2 - - [13/Jun/2016:14:45:05 +0200] "GET /page/requested.html HTTP/1.1" 200 4860 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0" pred:0.00950628507703
我将此配置用于logstash:
input {
file {
path => '/home/user/logsDir/*'
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG} pred:%{NUMBER:prediction_score}"}
}
# I convert the score into a float in order to vizualise it in Kibana
mutate {
convert => {"prediction_score" => "float"}
}
}
output {
elasticsearch { }
stdout { codec => rubydebug }
}
如果您遇到同样的问题,我希望这对您有帮助!
干杯!