連載
» 2010年01月20日 00時00分 公開

OpenLDAPによるディレクトリサーバ運用(3):ものいわぬOpenLDAPサーバのログ管理 (2/3)

[菊池研自,伊藤忠テクノソリューションズ株式会社]

ログの削除

 次は、ログの削除について説明します。このログ削除を怠って運用を続けていると、肥大化したログがディスク領域を圧迫しかねないので注意が必要です。

 最も簡単なOpenLDAPサーバのログ削除は、ログローテートを利用する方法です。

# vi /etc/logrotate.d/syslog
/var/log/ldap.log /var/log/messages [...略...] {      ←ログファイルldap.logを追加
    sharedscripts
    postrotate
        /bin/kill -HUP [...略...]
        /bin/kill -HUP [...略...]
    endscript
}

 例えば、上記の例のように、/etc/logrotate.d/syslogファイルにローテーション対象としてOpenDLAPサーバのログファイル(ここでは、/var/log/ldap.log)を追加することで、CentOSでは、「毎週日曜日の朝4時過ぎに現行のファイルがローテーションされ、過去4世代分のファイルを保持し、それより古い世代のファイルは削除される」ようになります。

# date
2009年 11月 30日 月曜日 09:48:21 JST    ←いまの時刻
# ls -l /var/log/ldap.log*        ↓ローテートされたログファイル
-rw------- 1 root root  3308 11月 30 09:45 /var/log/ldap.log
-rw------- 1 root root 17002 11月 22 04:02 /var/log/ldap.log.1
-rw------- 1 root root 27434 11月 15 04:02 /var/log/ldap.log.2
-rw------- 1 root root 45150 11月  8 04:02 /var/log/ldap.log.3
-rw------- 1 root root 27434 11月  1 04:02 /var/log/ldap.log.4

Berkeley DBのトランザクションログファイル

 実際のOpenLDAPサーバの運用においては、OpenLDAPサーバが出力するログのほか、エントリ情報を蓄積するバックエンドデータベースのログファイルについても考慮しておく必要があります。ここでは、OpenLDAPサーバがデフォルトで採用するバックエンドデータベースBerkeley DBを対象にして、ログファイルの管理方法を説明します。

 次の表は、OpenLDAPサーバのデータディレクトリに作成されるファイル一覧です。

ファイル名 役割
DB_CONFIG Berkeley DBの設定ファイル。Berkeley DBのホームディレクトリ(OpenLDAPの「datadir」以下)に配置する
__db.[00X] Berkeley DBのプロセス、スレッドが共有利用するメモリ領域(shared memory regions)を記録するファイル
alock OpenLDAPがBerkeley DBの重複利用や正常停止を管理するために利用するアクセスロック(Access LOCK)ファイル
dn2id.bdb、id2entry.bdb OpenLDAPのエントリ情報を蓄積するデータファイル。OpenLDAPではメインのデータファイルとなる
log.[000000000X] Berkeley DBのトランザクションログファイル。データの更新量に依存して増加。デフォルトのサイズは10Mbytes
[インデックス指定属性名].bdb OpenLDAPのインデックス情報を蓄積するデータファイル。インデックスを指定した属性ごとに作成される

 上記一覧中の、ファイル名が「log.」で始まり連番が付与されるファイルが、管理対象となるBerkeley DBのトランザクションログファイルです。

トランザクションログファイルの削除

 Berkeley DBのトランザクションログファイルの削除方法は、大きく分けて、

  • 管理者が手動で行う方法
  • Berkeley DBが自動で行う方法

の2つがあります。

 管理者が手動で削除を行う方法では、第2回で紹介したdb_archive -dコマンドを利用します。

# cd /usr/local/openldap-2.4.19/var/openldap-data
# PATH=$PATH:/usr/local/BerkeleyDB.4.7/bin

# db_checkpoint -h . -1        ←チェックポイントの明示的な実行
# db_archive -h . -d            ←不要なログファイルの削除

 トランザクションログファイルは、次の3つの条件を満たしている場合に削除が可能となります。ここで説明したdb_archive -dコマンドは、これら3つの条件を満たすファイルを選択したうえで削除できるコマンドです。

  1. 実行中のトランザクションに関連していない
  2. 新しいトランザクションログファイルが作成され、チェックポイントが実行されている
  3. Berkeley DBの実行環境で、唯一のトランザクションログファイルでない

 上記の例では、チェックポイントを明示的に実行し、更新内容をデータファイルへも書き出すことで、更新内容が、先行で書き込まれているトランザクションログファイルにのみ存在する状況をなくし、削除可能なトランザクションログファイルを増やしています。

 第2回で紹介した、定期的にトランザクションログファイルをバックアップディレクトリに退避するような運用を行っている場合は、退避する前に削除してしまわないよう、db_archive -dコマンドを実行するタイミングに注意が必要です。

 一方のBerkeley DBに自動で削除を行わせる方法では、Berkeley DBの設定ファイルであるDB_CONFIGファイルに“DB_LOG_AUTOREMOVE”フラグを指定します。

# cd /usr/local/openldap-2.4.19
# vi var/openldap-data/DB_CONFIG

[...略...]
set_flags DB_LOG_AUTOREMOVE        ←不要なログの自動削除を指定

# kill -INT `cat var/run/slapd.pid`
# ./libexec/slapd -u ldap

 この方法では、Berkeley DBへ更新が発生し、トランザクションログファイルへの書き込みが行われた時点で、削除可能なファイルがあるかどうかの判断が行われます。この方法は、定期的にトランザクションログファイルを退避させる運用には向かないことに注意してください。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。