DNSTranによるAnalogの高速化

カテゴリ:ログ管理
日時:2005/02/11 15:39

名前解決は基本的にコストの高い処理であり、各種のログは通常IPアドレスのみを記録する。

Analogには、アクセスログに記録されたIPアドレスをホスト名に変換する機能がある。例えば、/etc/analog/analog.cfgに
DNS WRITE
DNSFILE /tmp/dnsfile
と記述すれば、DNS問い合わせを行って名前解決し、/tmp/dnsfileに結果をキャッシュする。

しかし、この機能は非常に遅い。 上記の設定で毎朝アクセスログを解析させていたところ、解析にかかる時間がじょじょに長くなり、1000分(秒ではない)を突破するようになってしまった。

DNSTranを使えば、この問題は解決する。まず、DNSTranをダウンロードし、アーカイブを展開して/usr/local/bin以下に移動する。
# wget http://www.summary.net/soft/dns-x86.tar.gz
# tar -xzvf dns-x86.tar.gz
# mv dnstran1.5.2 /usr/local/bin/dnstran
次に、/usr/local/bin/dnstran/dnstran.cfgの以下の部分を修正する。
translate               no
  ↓
translate               yes
verbose                 no
  ↓
verbose                 yes
これでDNSTranが使えるようになった。まずは、既存のアクセスログを解析させてDNSキャッシュを作成する。
# ./dnstran /var/log/apache2/access_log &
これによって作成される/usr/local/dnstran/dnscacheがDNSキャッシュである。このファイルをAnalogが利用するように、/etc/analog/analog.cfgに以下の記述を追加する。
DNS READ
DNSFILE /usr/local/dnstran/dnscache
/usr/local/bin/dnstran.shとして、アクセスログからDNSキャッシュを生成するスクリプトを用意する。
#!/bin/sh
cd /usr/local/bin/dnstran/
./dnstran /var/log/apache2/access_log
rm /var/log/apache2/access_log.gz
このスクリプトを、Analogによる解析の直前にcronに実行させる。ウチではAnalogの解析を5:30に実行しているので、dnstranは5:00に実行するようにする。
0  5  * * *     root    /usr/local/bin/dnstran.sh
DNSTranを入れたことにより、Analogの解析時間は2分以下に短縮した。1000分て一体……。