【问题标题】:Grok filter for log4js用于 log4js 的 Grok 过滤器
【发布时间】:2017-01-31 19:51:31
【问题描述】:

我正在尝试为我的 log4js 日志创建一个 grok logstash 过滤器。

我的nodejs应用中的代码如下:

var httpLogFormat = ':remote-addr - - [:date] ":method :url ' + 'HTTP/:http-version" :status :res[content-length] ' + '":referrer" ":user-agent" :response-time';
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('logs/access.log'), 'access');
var logger = log4js.getLogger('access');
app.use(log4js.connectLogger(logger, { level: 'auto', format: httpLogFormat }));

这会导致以下日志消息:

 [2017-01-31 08:54:32.491] [WARN] access - 192.1.1.10 - - [Tue, 31 Jan 2017 07:54:32 GMT] "GET /api/test HTTP/1.0" 304 undefined "https://localhost.com/test" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36" 111

我当前的 grok 过滤器看起来像这样(更新):

grok {
     match => { "message" => "\[%{HTTPDATE:timestamp}\] \[%{WORD:loglevel}\] %{WORD:logtype} - %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \"%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})\" %{NUMBER:response} - \"%{DATA:rawrequest}\" \"%{QS:agent}\""}
   }

有一些解析错误,我怀疑这是由于 [] 但我不确定。

http://grokconstructor.appspot.com/ 失败:

不匹配。匹配此行开头的最长正则表达式前缀如下: 字首 ” 赛前:[2017-01-31 08:54:32.491] [WARN] 访问 - 192.1.1.10 - - [2017 年 1 月 31 日星期二 07:54:32 GMT] 匹配后: GET /api/test HTTP/1.0" 304 undefined "https://test.localhost.com/test" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36" 111

【问题讨论】:

    标签: logstash logstash-grok


    【解决方案1】:

    我已经更新了 grok 以适用于您的示例。我认为您滥用了一些类型(例如 QS,您不需要在其周围加上“):

    \[%{GREEDYDATA:timestamp}\]\ \[%{WORD:loglevel}\]\ %{WORD:logtype}\ -\ %{IPORHOST:clientip}\ %{USER:ident}\ %{USER:auth}\ \[%{GREEDYDATA}\]\ \"%{WORD:verb}\ %{NOTSPACE:request}(?: HTTP\/%{NUMBER:httpversion}|)\"\ %{NUMBER:response}\ %{WORD}\ \"%{DATA:rawrequest}\"\ %{QS:agent}\ %{INT:time_taken}
    

    查看docs 了解您可以使用的其他词。

    您的解析问题可能归结为 [ 和 ] 字符的字面使用,因为它们在正则表达式中使用,它们需要像我的示例中那样被转义。

    【讨论】:

    • 嗨隆隆声,我的错误。我已将示例消息复制了两次。我已经更新了上面的 grok 过滤器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2019-04-27
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多