現在、ロガーを使用して、各仮想ホストに次のような行を含むsyslog-ngへのApacheアクセスログを取得しています。
CustomLog "|/usr/bin/logger -p local1.info -t www_main" combined
Apacheとsyslog-ngに関して私が見つけることができるほとんどすべてのチュートリアルまたはアドバイスは、ログをsyslog-ngに取り込むためにこの方法を使用しているようです。 ( 例 )。残りは名前付きパイプとpipe()ソースを使用します。 ( 例 )。
これに伴う問題は、ロガーが1024バイトより長い行を分割し、それらを個別のログエントリとして送信することです。つまり、一部のログエントリは、ログボックスの最終的な宛先ログファイルの個別の行になります。
名前付きパイプとsyslog-ngのpipe()ソースを使用すると、スプリットラインの問題は解決しますが、マイナーな問題と厄介な問題が発生します。いくつか例を挙げると、Apacheとsyslog-ngの両方を開始する前に名前付きパイプを作成する必要があります。Apacheを開始してログにタグ付けする前に、syslog-ngを開始する必要があります(これは、上記で-t
)は、vhostではなくsyslog-ng構成ファイルで実行する必要があります。
このページ は、/ usr/bin/loggerの代わりに使用する短いPerlスクリプトを書くことを提案しています。
誰かがロガーの代替手段を知っているかどうか疑問に思いました。できればネイティブにコンパイルされた言語で書かれているか、長い行を半分に分割しないロガーの更新バージョンであることが望ましいです。
また、ログサーバーに到達したら、syslog-ngを使用してそれらを結合し直すなど、長いログ行が分割される問題のその他の解決策についても知りたいと思います。
これをもっと調べた後、私の答えを更新します。
これは、syslogRFCに準拠することが期待される/usr/bin/logger
の制限のようです。 http://www.faqs.org/rfcs/rfc3164.html は言う:
パケットの全長は1024バイト以下でなければなりません。
コマンドライン(Apache以外)を介して1024文字を超える文字をsyslogに送信すると、これと同じ制限が発生します。
1024文字の制限はおそらく他の場所に存在することに注意してください。 HTTP GETの最大サイズは1024文字だと思いますが、一部のprintfライブラリルーチンには1024文字のハード制限があることを思い出しているようです(数年前、一部のsyslog /文字列に関する1024文字の制限に関してセキュリティアラートがありました)私が正しく覚えていれば、印刷ユーティリティ)。したがって、オプションは次のように思われます。
3)HTTPアプリケーションが長いログメッセージを書き込まないようにします。これは簡単に言うことができます。 1)logger
を再コンパイルして、この制限を増やします。これを行う場合は、コアユーティリティを変更していることに注意してください。これにより、予期しない動作が発生する可能性があります。これを軽減するには、このユーティリティを/ usr/local/binまたは/ opt/binに配置します。 /usr/bin/logger
は置き換えないでください。 2)Apacheからsyslogに送信しないでください。これはsyslogを使用しないため、次のようなものは1024文字の制限を回避するはずです。
CustomLog logs/access_log
4) http://www.oreillynet.com/pub/a/sysadmin/2006/10/12/httpd-syslog.htmlsys::syslog
を使用しており、 /usr/bin/logger
。 sys :: syslog で、これと同じ1024文字の制限を確認する必要があります。これはPerlであり、簡単にオーバーライドできるはずです。
古い答え:
http://www.campin.net/syslog-ng/faq.html によると、この制限はsyslog-ng内で調整可能であるようです。
syslogのデフォルトは1024バイト長のメッセージですが、この値はsyslog-ng 1.5で調整可能であり、より高い値に設定できます。
オプション{log_msg_size(8192); };
util-linux
の最近のバージョンは、--size
パラメータを取得できるlogger
を提供します。
--size size
Sets the maximum permitted message size to size.
The default is 1KiB characters, which is the limit traditionally used
and specified in RFC 3164. With RFC 5424, this limit has become flexible.
A good assumption is that RFC 5424 receivers can at least process 4KiB messages.
Most receivers accept messages larger than 1KiB over any type of syslog protocol.
As such, the --size option affects logger in all cases (not only when --rfc5424
was used).
RFC 5424プロトコルは、バージョン2.26以降のロガーのデフォルトです。
私は個人的にこのためにInterSectAllianceの無料製品を探しています。それらには、専用のApache製品(古いものではありますが)と、テキストベースのログをsyslog形式にスラップできるより一般的な製品があります。
http://www.intersectalliance.com/projects/EpilogUNIX/index.html
私は最近、非常に長いApache httpdログを必要としていた顧客とこれに遭遇しました(これは、rsyslogのような最新のsyslogデーモンの古いバージョンでも問題ありません)。
これに対処するために、従来のメッセージサイズの制限なしに、いくつかのスクリプト言語でlogger
クローンを作成しました。見る: