web-dev-qa-db-ja.com

NetcatへのApacheパイピングログが失敗する

Apacheログをカスタム形式(GELF)でUDP受信サーバー(Graylog2を実行)に送信したいと思います。すべてが正常に機能していることは確かでしたが、しばらくすると、サーバーが応答しなくなったというアラートが表示されました。 Apacheのエラーログに次のようなものがたくさんあります。

piped log program 'nc -w 1 -u logserver 12201' failed unexpectedly

興味深いことに、トラフィックが非常に少ないサーバーでは、Webサイトへのトラフィックがない場合でも、ログにこのエラーが常に表示されます。また、トラフィックがある場合、ログはnetcatからgraylogに送信されるため、関係なく機能します。

Apacheを停止して再起動すると、再起動後もエラーログにエラーが表示され続けます。停止した後、暴走するプロセスが残っていないことを確認しました。

構成は次のとおりです。

LogFormat "{ \"version\": \"1.1\", \"Host\": \"%V\", \"short_message\": \"%r\", \"full_message\": \"%r, status: %>s, %O bytes, User Agent: %{User-Agent}i\", \"timestamp\": %{%s}t, \"level\": 6, \"_user_agent\": \"%{User-Agent}i\", \"_source_ip\": \"%a\", \"_duration_usec\": %D, \"_duration_sec\": %T, \"_request_size_byte\": %O, \"_http_status\": %s, \"_http_request_path\": \"%U\", \"_http_request\": \"%U%q\", \"_http_method\": \"%m\", \"_http_referer\": \"%{Referer}i\" }" graylog2_access

そしてCustomLog:

CustomLog "|nc -w 1 -u logserver 12201" graylog2_access

何が失敗したかについて、より多くのデバッグ情報を取得する方法がわかりません。

  1. 誰かが私が失敗に関するより詳細な情報を得るのを手伝ってくれる?
  2. これが失敗する理由を誰かが知っているなら、それも素晴らしい答えになるでしょう!
  3. ログを常に(リアルタイムで)出荷する別の方法も、許容できるソリューションです。ただし、logstashについては知っていますが、この場合、解析する必要はありません。すでにGELF形式で出力できます。過去にもlogstashを試しましたが、最終的には常にメモリが不足し、自動的に停止していました。
5
ETL

Apacheドキュメント: http://httpd.Apache.org/docs/2.2/logs.html#piped

Apacheは、サーバーの起動時にパイプログプロセスを開始し、サーバーの実行中にクラッシュした場合は再起動します。 (この最後の機能が、この手法を「信頼性の高いパイプロギング」と呼ぶことができる理由です。)

NCドキュメント:man nc

 -w timeout
         Connections which cannot be established or are idle timeout
         after timeout seconds.  The -w flag has no effect on the -l
         option, i.e. nc will listen forever for a connection, with
         or without the -w flag.  The default is no timeout.

表示されているのは、Apacheが1秒のタイムアウトでnetcatを起動していることです。ログデータがあるかどうかに関係なく、netcatは1秒後にタイムアウトし(-w 1オプションのため)、終了します。その後、Apacheはnetcatを再起動します。泡立てて、すすぎ、繰り返します。

この状況では、netcatコマンドから-w 1を削除することをお勧めします。

一歩下がって、この関数にsyslogを使用することをお勧めします(そもそもなぜsyslogを使用しなかったのかわかりません)。

5
Slartibartfast