在Logstash

时间:2016-07-21 15:13:57

标签: apache logstash logstash-grok elastic-stack logstash-configuration

这是我的问题:让我们说我有一些标准的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日志消息之前或之后放置分数,并在两者之间插入任何类型的字符(目前它只是一个空格)。

关于如何解决这个问题的任何想法?

提前致谢!

1 个答案:

答案 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 }
}

如果您遇到同样的问题,我希望这对您有帮助!

干杯!