9.4. ds-logpipe.py

名前付きパイプログスクリプトは、Directory Server ログファイル(アクセス、エラー、監査)は名前付きパイプに置き換えることができます。そのパイプは別のスクリプトにアタッチして、特定のパターンに一致する行の作成や、特定のイベント型を持つなど、出力に送信する前にログデータを処理できます。

名前付きパイプスクリプトを使用すると、柔軟性が得られます。

  • パフォーマンスヒットなしに、最後の数または数千のログメッセージのログを作成するために、エラーログレベルを診断するために非常に高い値を設定することができます。
  • メッセージはフィルタリングして、対象の特定のイベントのみを保持できます。たとえば、名前付きパイプスクリプトは、アクセスログの BIND 試行の失敗のみを記録でき、その他のイベントを破棄します。
  • このスクリプトは、イベントの発生時(ユーザーエントリーの追加または削除、特定のエラーが発生する時など)に通知を送信するために使用できます。

構文およびコマンドラインオプションの詳細は、ds-logpipe.py(1) の man ページを参照してください。

名前付きパイプロギング用にサーバーを設定する手順は、「ログファイルを名前指定された Pipe に置き換える」 で説明されています。

名前付きパイプログスクリプトで最も基本的な使用方法は、名前付きパイプのみを参照します。

例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 プロセスにより自動的に開始および停止するように設定できます。これには、スクリプトの実行中にスクリプトの PID を書き込むサーバーの PID ファイルの名前(- s 引数)が必要です。サーバーの 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=パターンを使用します。複数の ログregex.regex 引数を使用して、すべて AND ステートメントとして処理されます。エラーログ行は、指定したすべての引数と一致する必要があります。一致するログ行をレコード(OR)にするには、文字列または式の間にパイプ(|)で単一の ログregex.regex 引数を使用します。正規表現とその構文についての詳細は、pcre または Python の正規表現のドキュメントを参照してください。
  • failedbinds.py ログは失敗した BIND の試行のみをログに記録するため、このプラグインはアクセスログにのみ使用されます。これは、実際のログメッセージが書き込まれるファイルである failedbinds.logfile=/path/to/access.log オプションを取ります。このプラグインは、処理を非常に多くの処理を行う複雑なプラグインの例です。また、他のタイプのアクセスログ処理を行うための適切な場所です。