web-dev-qa-db-ja.com

nginxアクセスログは特定のリクエストを無視します

Haproxyの背後でnginxを実行しています(同じサーバーで実行しています)。このホストに有効な「/」URLがない/必要ないため、nginxで単純なhtmlファイルを使用してサービスが稼働していることを確認するようにhaproxyを構成しました。 Nginxはhaproxyが使用するデフォルトのOPTIONSリクエストタイプ(私の知る限り)をサポートしていないため、GETに変更しました。

Nginxでアクセスログをオンにしているので、アクセスログにこれらすべての稼働時間ポーリングリクエストを取得しています。特定のリクエストを無視し、それらのログをスキップするようにnginxを構成する方法はありますか?

Haproxyバックエンドは次のとおりです。

backend static_http
        option  httpchk GET /test.html
        option  redispatch
        balance roundrobin
        #fullconn 1000
        server  w1_static www1:81 check port 81 inter 2000

そして、これがnginxログに表示されるものです:

127.0.0.1 - - [24/Jul/2009:19:28:22 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:24 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:26 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:28 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:30 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
7
Michael Marano

あなたは今これを行うことができます

http://nginx.org/en/docs/http/ngx_http_log_module.html

Ifパラメーター(1.7.0)は、条件付きロギングを有効にします。条件が「0」または空の文字列と評価された場合、リクエストはログに記録されません

map $request_uri $loggable {
  / 0;
  /healthcheck.html 0;
  default 1;
}

server {
...
  access_log /var/log/nginx/access.log combined if=$loggable;

}
8
KCD

さて、あなたはこれのために特定の場所ディレクティブを持っていることを試みることができます。

何かのようなもの

location /test.html {
  access_log off;
}

動作するはずです(テストされていません)...

7
Jauder Ho

必要な処理を実行する組み込みのフィルタリングはありません。

あなたが試みるかもしれないいくつかのトリックがあります。これらはすべて、関心のないデータを別のファイルに記録することになります。このファイルは、適切と思われる頻度で外部から削除できます(後でHUP nginxを覚えておいてください)。

  • /test.htmlをリクエストするのがhaproxyだけの場合は、ロケーションブロックごとに異なるアクセスログを設定できます(残念ながら、ロケーションブロック内のifブロックでは使用できません)。

  • 他のノードが/test.htmlを要求し、127.0.0.1からのすべての要求がhaproxyである場合、127.0.0.1をaccess_log.junkに変換し、それ以外はすべてaccess_logに変換する$ remote_addrに基づいてマップを作成できます。アクセスログステートメントの名前にmap変数を使用します

これに失敗すると、ソースを入手できるので、必要なものをハックします。

0
James F