在 Logstash 中使用 Grok 在增强的 Apache 日志解析上添加自定义字段
Add custom field on augmented Apache log parsing with Grok in Logstash
这是我的问题:假设我有一些标准的 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
现在,我想解析这一行,以便我可以使用 score
在 Kibana 中进行可视化(Logstash 集成在整个 ELK 堆栈中)。因此,如果分数可以解析为浮点数,那就太好了。
注意: 我可以将分数放在标准 Apache 日志消息之前或之后,并在两者之间插入任何类型的字符(目前它只是一个 space ).
知道如何解决这个问题吗?
提前致谢!
终于找到处理方法了。我在乐谱前加了一点关键词: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 }
}
如果您遇到同样的问题,我希望这对您有所帮助!
干杯!
这是我的问题:假设我有一些标准的 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
现在,我想解析这一行,以便我可以使用 score
在 Kibana 中进行可视化(Logstash 集成在整个 ELK 堆栈中)。因此,如果分数可以解析为浮点数,那就太好了。
注意: 我可以将分数放在标准 Apache 日志消息之前或之后,并在两者之间插入任何类型的字符(目前它只是一个 space ).
知道如何解决这个问题吗?
提前致谢!
终于找到处理方法了。我在乐谱前加了一点关键词: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 }
}
如果您遇到同样的问题,我希望这对您有所帮助!
干杯!