Red Hat Training

A Red Hat training course is available for Red Hat Directory Server

9.4. ds-logpipe.py

名前付きパイプログスクリプトは、Directory Server ログファイル(アクセス、エラー、および監査)を名前付きパイプに置き換えることができます。特定のパターンに一致する行のみの書き込みや、特定のイベントタイプの場合など、そのパイプを別のスクリプトにアタッチすることで、出力に送信する前にログデータを処理できる別のスクリプトに割り当てることができます。
名前付きパイプスクリプトを使用すると、柔軟性が提供されます。
  • エラーログレベルは、問題を診断するために非常に高い値を設定し、パフォーマンスをヒットすることなく、過去に何万ものログメッセージだけのログを作成できます。
  • 対象となる特定のイベントのみを保持するためにメッセージをフィルタリングできます。たとえば、named pipe スクリプトは、アクセスログで失敗した BIND 回のみを記録でき、その他のイベントは破棄されます。
  • このスクリプトは、ユーザーエントリーの追加または削除、または特定のエラーが発生した場合など、イベント発生時の通知の送信に使用できます。

構文

ds-logpipe.py /path/to/named_pipe [ --user pipe_user ] [ --maxlines 数値 ] [[ --serverpidfile file.pid ] | [ --serverpid PID ]] [ --servertimeout seconds ] [ --plugin=/path/to/plugin.py | [ pluginfile.arg=value ]]

オプション

ds-logpipe.py で使用できるオプションのいくつかには省略された引数があります。

表9.6 ds-logpipe.py Options

オプション 略語 詳細
/path/to/named_pipe 必須。サーバーがロギングデータを送信するパイプの完全パスおよび名前。SELinux が Enforcing モードの場合、名前付きパイプはインスタンスのデフォルトのログディレクトリー(/var/log/dirsrv/slapd-インスタンス)にあり、Directory Server が SELinux ルールに違反することなくパイプファイルにアクセスして実行できるようにする必要があります。
--user -u 名前付きパイプが chown となるユーザー ID。プラグインで作成されたファイルも、そのユーザーが所有します。
--maxlines -m バッファーに保持する行数。デフォルトは 1000 です。
--serverpidfile -s サーバーの PID が含まれるファイルの名前。デフォルトでは、これは /var/run/dirsrv/slapd-instance.pid です。このオプションを使用すると、サーバープロセスで名前付きパイプを開始および停止できます。
--serverpid サーバーのプロセス ID。この引数を使用するには、サーバーがすでに実行されている必要があります。
--servertimeout -t PID ファイルの作成とプロセスの実行を待つ時間(秒単位)。デフォルトは 60(秒)です。
--plugin パイプから読み取る各行で呼び出す関数を定義するプラグインの名前を指定します。プラグインの読み込み時に呼び出しのためにオプションのプリ機能を指定でき、スクリプトの終了時にオプションの post-function を指定できます。このファイルは Python スクリプトで、最後に in .py にする必要があります。引数は、pluginfile.arg オプションを使用してプラグインに渡すことができます。
pluginfile.arg プラグイン引数を定義します。pluginfile はプラグインの名前であり、それぞれの arg はそのプラグインの引数の名前です。たとえば、引数名 ldifinput を exampleplug という名前のプラグインに渡す場合、引数は exampleplug.ldifinput になります。

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

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

例9.12 Basic Named Pipe Log Script

# ds-logpipe.py /var/log/dirsrc/slapd-example/errors.pipe
注記
スクリプトが終了すると(完了か、SIGTERM または Ctrl+C で終了している場合)、スクリプトはエラーログの最後の 1000 行を標準出力にダンプします。
スクリプトはバックグラウンドで実行でき、出力を対話的に監視できます。この場合は、kill -1 %1 を使用して、バッファーの最後の 1000 行を標準出力(stdout)にダンプし、バックグラウンドで実行を継続するようスクリプトに指示できます。

例9.13 Background での名前付きの Pipe ログスクリプトの実行

# 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「関連するプラグインを使用した名前付きパイプログスクリプト」 では、文字列 の警告 を含むログ行のみが内部バッファーに保存され、スクリプトの終了時に印刷されます。
スクリプト引数でプラグインが渡されない場合には、スクリプトは 1000 のログ行(デフォルト)のみをバッファーし、終了時にそれらを出力します。スクリプトには 2 つのプラグインが提供されます。
  • logregex.py は、指定の正規表現に一致するログ行のみを保持します。プラグイン引数には、使用する文字列または正規表現を指定する logregex.regex=パターン の形式があります。複数の logregex.regex 引数を使用できます。 これらの引数は AND ステートメントとして処理されます。エラーログ行は、指定されたすべての引数と一致する必要があります。一致するログ行がレコード(OR)を許可するには、文字列または式の間にパイプ(|)を付けて 1 つの logregex.regex 引数を使用します。正規表現とその構文についての詳細は、pcre または Python の正規表現のドキュメントを参照してください。
  • failedbinds.py logs failed BIND attempts は、このプラグインはアクセスログにのみ使用されます。これは、オプション failedbinds.logfile=/path/to/access.log を取得します。これは、実際のログメッセージが書き込まれるファイルです。このプラグインは、処理が少し行う複雑なプラグインの例になります。これは、別のタイプのアクセスログ処理を行うのに適した場所です。