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

多くの管理者は、アクセスログが特定のイベントのみを記録するように設定など、特別な設定やロギングデータを使用して操作を行う必要があります。これは、標準の Directory Server ログファイル設定属性を使用できませんが、ログデータを名前付きパイプに送信し、別のスクリプトを使用してデータを処理することもできます。ログに名前付きパイプを使用すると、以下のような特別なタスクが簡素化されます。

  • バインド試行の失敗や、特定のユーザーまたは IP アドレスからの接続などの特定のイベントのロギング
  • 特定の正規表現パターンに一致するロギングエントリー
  • ログを特定の長さに維持する(最後の行数のみのロギング)
  • イベントの発生時にメールなどの通知の送信

ログファイルをパイプに置き換えると、特にサーバーで操作が多い場合のパフォーマンスが改善されます。

名前付きパイプは、データをログバッファー内で処理する方法のため、スクリプトを使用してログからデータを抽出することとは異なります。

ログがバッファーされると、サーバーのパフォーマンスは良くなりますが、重要なデータはイベント発生直後にディスク(ログファイル)に書き込まれません。サーバーがクラッシュする問題がある場合は、データがディスクに書き込まれる前にクラッシュし、スクリプトが抽出するデータがないことがあります。

ログがバッファーされていない場合[1]書き込みは各操作でディスクにフラッシュされ、これによりディスク I/O が大幅に低下します。

ログディスクファイルをパイプに置き換えると、パイプから読み取るスクリプトがメモリー内で受信ログデータをバッファー(単純なスクリプトで不可能)できるため、バッファリングの利点が得られます。

スクリプトの使用およびオプションの詳細については、「ds-logpipe.py」 で説明されています。基本的な形式: ds-logpipe.py/path/to/named_pipe--userpipe_user--maxlinesnumber--serverpidfilefile.pid--serverpidPID--servertimeoutseconds--plugin=/path/to/plugin.pypluginfile.arg=value

7.5.1. ロギングに名前付きのプラップの使用

Directory Server インスタンスは、名前付きパイプログスクリプトを実行し、パイプ名を付けることで、ロギングに名前付きパイプを使用できます。(サーバーがすでに実行中の場合は、ログを再開する必要がありますが、その他の設定は必要ありません)。

# ds-logpipe.py /var/log/dirsrv/slapd-example/access

この方法で ds-logpipe.py を実行すると、Directory Server の設定変更を必要とせず、簡単に実装できます。これは、特に特定タイプのイベントを探している場合に、デバッグやモニタリングが高速に役立ちます。

Directory Server インスタンスが頻繁に、ロギング用の実際のファイルではなく名前付きパイプを永続的に使用する場合は、インスタンスを再設定し、名前付きパイプを作成してロギングに使用することもできます(デフォルトではログファイル用に動作します)。

インスタンスのログ設定に 3 つ設定する必要があります。

  • 使用するログファイルをパイプに変更する必要があります(nsslapd-*log。* はアクセス、エラー、または監査可能)。[2]設定されるログタイプに応じて、
  • スクリプトはすでにログエントリーをバッファーする(nsslapd-*log-logbuffering)ため、バッファーを無効にする必要があります。
  • ログローテーションは、サーバーが名前付きパイプのローテーションを試行しないように無効にする必要があります(nsslapd-*log-maxlogsperdir、nsslapd-*log-logexpirationtime、および nsslapd-*log-logrotationtime)。

これらの設定変更は Directory Server コンソールで行うか、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] 監査ログはデフォルトで有効になっていません。そのため、このログは、名前付きパイプを使用して置き換える前に有効にする必要があります。