0

nginx ログ ファイルから出力を取得して、logstash に送信しようとしています。

10.1.10.20 - bob [14/Feb/2014:18:57:05 +0000] “POST /main/foo.git/git-upload-pack HTTP/1.1” 200 3653189 “-” “git/1.8.3.4 (Apple Git–47)” 

Grock は最初の 3 つの単語を正しく見つけることができます

10.1.10.20 - bob [14/Feb/2014:18:57:05 +0000]

%{IPV4:user_ip} - %{USERNAME:user_name} \[%{HTTPDATE:time_local}\]

Grok は 3 番目と 4 番目の単語をうまく見つけることができます

[14/Feb/2014:18:57:05 +0000] “POST /main/foo.git/git-upload-pack HTTP/1.1”

\[%{HTTPDATE:time_local}\] %{QUOTEDSTRING:request}

ただし、それらを組み合わせて4つすべてを見つけようとすると、grokは結果がないと言います(テストにはhttp://grokdebug.herokuapp.com/を使用)

10.1.10.20 - bob [14/Feb/2014:18:57:05 +0000] “POST /main/foo.git/git-upload-pack HTTP/1.1” 

%{IPV4:user_ip} - %{USERNAME:user_name} \[%{HTTPDATE:time_local}\]  %{QUOTEDSTRING:request}
#not found

上記の例で引用符で囲まれた文字列を取得する方法を知っている人はいますか?

私はグロクが初めてなので、おそらくこれに正しく取り組んでいません。

アップデート

興味深いことに、次のログ行を使用して手動で URL を入力すると、機能します

 bob 14/Feb/2014:18:57:05 +0000 "herp"
 #Once herp works, replace herp, with POST
 bob 14/Feb/2014:18:57:05 +0000 "POST"
 #Once POST works, keep expounding until the whole thing is in place
 autobuild 14/Feb/2014:18:57:05 +0000 "POST /main/builder.git/git-upload-pack HTTP/1.1"
4

3 に答える 3

3

"POST /main/builder.git/git-upload-pack HTTP/1.1"パターンで

"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}"

于 2014-12-01T02:30:47.820 に答える
0

スタック オーバーフローへの通知プロセスで問題が特定されました。

注意深く見ると、二重引用符の解析方法が異なります

"POST 

“POST

二重引用符を手動で入力すると、問題が解決します

于 2014-02-15T00:40:42.177 に答える