使用Grok Debugger解析Apache 2错误日志

时间:2015-08-02 17:06:01

标签: apache apache2 logstash grok logstash-grok

我试图在http://grokdebug.herokuapp.com/

的grok调试器中设置模式

输入:

[Sat Aug 01 21:54:54.048805 2015] [:error] [pid 4384:tid 140066215139072] [client 192.168.1.1:62028] PHP Notice:  Undefined index: foo in /home/koan/websightdesigns/websightdesigns.com/ierr.php on line 3

模式:

\[(?<timestamp>%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\]\s\[:%{LOGLEVEL:loglevel}\]

到目前为止我的工作是什么,它输出:

{
  "timestamp": [
    [
      "Sat Aug 01 21:54:54.048805 2015"
    ]
  ],
  "day": [
    [
      "Sat"
    ]
  ],
  "month": [
    [
      "Aug"
    ]
  ],
  "MONTHDAY": [
    [
      "01"
    ]
  ],
  "TIME": [
    [
      "21:54:54.048805"
    ]
  ],
  "HOUR": [
    [
      "21"
    ]
  ],
  "MINUTE": [
    [
      "54"
    ]
  ],
  "SECOND": [
    [
      "54.048805"
    ]
  ],
  "YEAR": [
    [
      "2015"
    ]
  ],
  "loglevel": [
    [
      "error"
    ]
  ]
}

到目前为止,这么好。但是,我遇到的问题是,如果我尝试添加到我的模式以获取下一部分[pid 4384:tid 140066215139072]部分,无论我尝试都会收到编译错误。

我试过了:

\[(?<timestamp>%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\]\s\[:%{LOGLEVEL:loglevel}\]\s\[%{PID:pid}\]

\[(?<timestamp>%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\]\s\[:%{LOGLEVEL:loglevel}\]\s\[%{PID:pid}:%{TID:tid}\]

以及其他模式,但似乎没有任何工作。任何人都知道在尝试将[pid 4384:tid 140066215139072]变为变量时我可能做错了什么?

1 个答案:

答案 0 :(得分:2)

在完成这项工作之后,以下模式现在适用于我:

\[(?<timestamp>%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[.*:%{LOGLEVEL:loglevel}\] \[pid %{NUMBER:pid}:tid %{NUMBER:tid}\] \[client %{IP:clientip}:.*\] %{GREEDYDATA:errormsg}