9.4. ds-logpipe.py
名前付きパイプログスクリプトは、Directory Server の任意のログファイル (access、errors、および audit) を名前付きパイプに置き換えることができます。このパイプは別のスクリプトに加えることができます。このパイプは、特定のパターンに一致する行や特定のイベントタイプにのみ記述するなど、出力に送信する前にログデータを処理できます。
名前付きパイプスクリプトを使用すると、柔軟性が得られます。
- エラーログレベルを問題の診断用に非常に高く設定すると、パフォーマンスへの影響を抑えて最後の数 100 または数 1000 のログメッセージだけのログを作成できます。
- メッセージをフィルターして、特定のイベントのみを保持することができます。たとえば、名前付きパイプスクリプトはアクセスログで失敗した BIND 試行のみを記録し、他のイベントは破棄されます。
- このスクリプトは、ユーザーエントリーの追加や削除などのイベントが発生した時、または特定のエラーが発生した時などに、通知を送信するために使用できます。
構文およびコマンドラインオプションの詳細は、ds-logpipe.py(1) の man ページを参照してください。
例
名前付きパイプロギング用にサーバーを設定する手順は、「ログファイルの名前付きパイプへの置き換え」で説明されています。
名前付きパイプログスクリプトの最も基本的な使用方法は、名前付きパイプのみを参照するものです。
例9.12 基本的な名前付きパイプログスクリプト
# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe
スクリプトが終了すると (処理が完了したか、SIGTERM または Ctrl+C で終了したかのいずれか)、スクリプトにより、エラーログの最後の 1000 行が標準出力にダンプされます。
スクリプトはバックグラウンドで実行でき、出力を対話的に監視できます。この場合、コマンド kill -1 %1
を使用して、バッファーの最後の 1000 行を標準出力にダンプし、バックグラウンドで実行を継続するようにスクリプトに指示できます。
例9.13 バックグラウンドでの名前付きパイプログスクリプトの実行
# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe &
スクリプトの終了 (または強制終了もしくは中断) 時に最後の 1000 行をダンプし、出力をファイルに自動的に保存するには、スクリプト出力をユーザー定義のファイルにリダイレクトします。
例9.14 名前付きパイプログスクリプトからの出力の保存
# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe > /etc/dirsrv/myerrors.log 2>&1
名前付きパイプスクリプトは、Directory Server プロセスと連動して自動的に開始および停止するように設定できます。これには、-s
引数を使用して、スクリプトの実行中にスクリプトの PID を書き込むサーバーの PID ファイルの名前が必要になります。サーバーの PID は、サーバーの PID ファイルを参照するか、実際のプロセス ID 番号を指定して参照できます (サーバープロセスがすでに実行している場合)。
例9.15 サーバー PID の指定
# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe --serverpidfile /var/run/dirsrv/slapd-example.pid
プラグインは、名前付きパイプからログデータを読み取り、操作を実行するために呼び出すことができます。
例9.16 関連するプラグインを使用した名前付きパイプログスクリプト
# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe --plugin=/usr/share/dirsrv/data/logregex.py logregex.regex="warning"
例9.16「関連するプラグインを使用した名前付きパイプログスクリプト」では、文字列 warning
を含むログ行のみが内部バッファーに保存され、スクリプトの終了時に出力されます。
スクリプト引数で渡されるプラグインがない場合、スクリプトは 1000 のログ行をバッファーに格納 (デフォルト) し、終了時に出力します。スクリプトには 2 つのプラグインがあります。
-
logregex.py
は、所定の正規表現に一致するログ行のみを保持します。プラグイン引数には、使用する文字列または正規表現を指定するlogregex.regex=
pattern の形式があります。複数のlogregex.regex
引数があり、すべては AND ステートメントとして処理されます。エラーログの行は、指定したすべての引数と一致する必要があります。一致するログ行をレコード (OR) にするには、文字列または式の間にパイプ (|) を付けて単一のlogregex.regex
引数を使用します。正規表現とその構文についての詳細は、pcre または Python の正規表現のドキュメントを参照してください。 -
failedbinds.py
ログは BIND の試行に失敗したため、このプラグインはアクセスログにのみ使用されます。これは、実際のログメッセージが書き込まれるファイルであるfailedbinds.logfile=
/path/to/access.log
オプションを取ります。このプラグインは、かなりの量の処理を行う複雑なプラグインの例で、他のタイプのアクセスログ処理を行うための参照先として最適です。