Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

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

7.5. ログファイルを名前された Pipe に置き換え

特定のイベントのみを記録するようにアクセスログを設定するなど、多くの管理者は、特別な設定やロギングデータで操作を行います。標準の Directory Server ログファイル設定属性を使用することはできませんが、ログデータを名前付きパイプに送信した後、別のスクリプトを使用してデータを処理することもできます。ログに名前付きパイプを使用すると、以下のような特別なタスクが簡素化されます。
  • 特定のユーザーまたは IP アドレスからの接続の失敗などの特定のイベントをログに記録
  • 特定の正規表現パターンに一致するロギングエントリー
  • ログを特定の長さに維持(ログの最後の行数のみ)
  • イベント発生時のメールなどの通知の送信
ログファイルをパイプで置き換えると、特に操作率が高いサーバーでパフォーマンスが向上します。
名前付きパイプは、データをログバッファーで処理される方法により、スクリプトを使用してログからデータを抽出するのとは異なります。
ログがバッファーされると、サーバーのパフォーマンスは適切ですが、重要なデータはイベント発生直後にディスク(ログファイル)には書き込まれません。サーバーのクラッシュに問題がある場合は、データがディスクに書き込まれる前にクラッシュし、スクリプトが抽出するデータがないことがあります。
ログがバッファー化されていない場合[1]そのため、書き込みは各操作でディスクにフラッシュされるため、ディスク I/O が多くなり、パフォーマンスが低下するようになります。
ログディスクファイルをパイプに置き換えると、パイプから読み取るスクリプトがメモリー内の受信ログデータをバッファーできるため、バッファーには利点があります(これは単純なスクリプトでは不可能です)。
スクリプトの使用方法およびオプションの詳細については、「ds-logpipe.py」 で説明されています。基本的な形式は次のとおりです。

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 ]]

7.5.1. ロギング用の名前付き Pipe の使用

Directory Server インスタンスは、名前付きのパイプログスクリプトを実行し、パイプ名を指定すると、ロギングに名前付きパイプを使用できます。(サーバーがすでに実行中の場合、ログを再開する必要がありますが、設定は必要ありません)。
# ds-logpipe.py /var/log/dirsrv/slapd-example/access
この方法で ds-logpipe.py を実行するのに、Directory Server 設定の変更を必要とせずに、簡単に実装できます。これは、特に特定のタイプのイベントを探している場合は、迅速にデバッグや監視に役立ちます。
Directory Server インスタンスが実際のファイルではなく、実際のファイルではなく、または永続的に使用する場合、インスタンスを再設定して名前付きパイプを作成し、ロギングに使用することができます(デフォルトではログファイルに対して行われます)。
インスタンスのログ設定に 3 つの項目を設定する必要があります。
  • 使用するログファイルをパイプnsslapd-*log に変更する必要があります。ここで、* は access、error、または audit になります。[2]設定されているログタイプに応じて、
  • スクリプトがすでにログエントリーをバッファー(nsslapd-*log-logbuffering)するため、バッファーを無効にする必要があります。
  • サーバーが名前付きパイプ(nsslapd-*log-maxlogsperdirnsslapd-*log-logexpirationtime、および nsslapd-*log-logrotationtime)のローテーションを試行しないように、ログローテーションを無効にする必要があります。
これらの設定変更は、Directory Server Console または ldapmodify を使用して実行できます
たとえば、これによりアクセスログが access.pipe にアクセスできるようになります。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=config
changetype: modify
replace: nsslapd-accesslog
nsslapd-accesslog: /var/log/dirsrv/slapd-instance/access.pipe
-
replace: nsslapd-accesslog-logbuffering
nsslapd-accesslog-logbuffering: off
-
replace: nsslapd-accesslog-maxlogsperdir
nsslapd-accesslog-maxlogsperdir: 1
- 
replace: nsslapd-accesslog-logexpirationtime
nsslapd-accesslog-logexpirationtime: -1
- 
replace: nsslapd-accesslog-logrotationtime
nsslapd-accesslog-logrotationtime: -1
注記
これらの変更を行うと、サーバーは現在のログファイルを閉じ、即座に名前付きパイプに切り替えます。これは、稼働中のサーバーをデバッグし、特定のメッセージに対してログの出力を取得するのが非常に便利です。


[1] アクセスログでログバッファリングが無効になっている場合や、エラーログでログレベルが変更された場合や、監査ロギングが発生します。
[2] 監査ログはデフォルトでは有効になっていません。そのため、名前付きパイプを使用して置き換える前にこのログを有効にする必要があります。