最終更新日:2004年2月9日

Homeへ

Webalizer DNS インフォメーション

WebalizerにはDNSの逆引きを使った相手を探索する機能があります。 この機能を使うためには幾つかのことについて説明しなくてはなりません。

Note:
DNS機能を使うためには、Webalizerのコンパイル時に、これを有効にしてコンパイルしておく必要があります。
コンパイルの際に、-DUSE_DNSとしてコンパイルするか、configure時に、--enable-dns としてconfigureしてください。
また、DNS機能を使うためにはシステムに、バークレイDBライブラリがインストールされている必要があります。 バークレイDBライブラリがインストールされているシステムは、"/usr/include/db1"というヘッダ(訳者注:バークレーDB4でも動作するようです)がある筈です。

どのように機能するか

DNS探索機能は、IPアドレスとその逆引きが収納されたDNSキャッシュファイルをつかって探索されます。 このため、Webalizerを実行するときに"-D"コマンドオプションか、設定ファイルの"DNSCache"キーワードを使ってキャッシュファイルを作成する必要があります。もしキャッシュファイルが作成されなかったなら、DNS探索は行われません。 DNSキャッシュは2つの異なる方法で作成できます。

  1. ランタイム方式: Webalizerの実行時、"-D"コマンドオプション(または設定ファイルの"DNSCache"キーワード)と供に、"-N"コマンドオプション(または設定ファイルの"DNSChildren")でDNS子子プロセスを指定することで、Webalizerの前処理でDNSキャッシュファイルを作成できます。ただし、Webalizerの処理としてログに記録されたレコード数に比例しキャッシュファイル作成に時間がかかります。

  2. スタンドアロン方式: WebalizerのDNSキャッシュを作成するための独立プロセスとして、 'webazolver' というコマンドを使ってDNSキャッシュファイルを作成できます。 (注:「webazolver」は、「webalizer」へのシンボリックリンクです)
    このとき、コマンドオプションとして、"-D"でキャッシュファイルを指定するだけで、子プロセスは5個でキャッシュファイルを作成します。

【ランタイム DNSキャッシュでの作成・更新】

以下の手順でキャッシュファイルを作成・更新します。

  1. ログファイルを読み込んで、キャッシュファイルにないIPアドレスを抽出します。
  2. 指定された数のDNS子プロセスを生成し、DNSを探索します。 
  3. 子プロセスによって抽出したIPアドレスのDNSから探索します。 探索は子プロセス数分、同時に行われます。探索結果はDNSキャッシュファイルに記録されます。
  4. 以前に記録されていたキャッシュ情報については、ログにそのIPアドレスが見つかった場合に変更がないかを確認して、変更があった場合には更新されます。Webalizerはこの更新された情報を元に、ホスト名を探索しレポートを作成します。

Webalizerの実行において、現在進行中のLogを対象にすべきではありません。 

【スタンドアロンキャッシュでの作成・更新】

以下の手順でキャッシュファイルを作成・更新します。

  1. ログファイルからキャッシュされていないすべてのIPアドレスを抽出します。
  2. 指定された数のDNS子プロセスを生成し、DNSを探索します。デフォルトでは5個のプロセスが生成されます。 
  3. 子プロセスによって抽出したIPアドレスのDNSから探索します。 探索は子プロセス数分、同時に行われます。探索結果はDNSキャッシュファイルに記録されます。
  4. 以前に記録されていたキャッシュ情報については、ログにそのIPアドレスが見つかった場合に変更がないかを確認して、変更があった場合には更新されます。 

使用例

webalizer -c test.conf -N 10 -D dns_cache.db /var/log/my_www_log

これは、設定ファイルとして"test.conf"を使い、この中からホスト名や出力先ディレクトリを探します。 また、ランタイムでDNSキャッシュファイルを"dns_cache.db"として作成し、レポートに反映させます。

webalizer -o out -D dns_cache.db /var/log/my_www_log

これは、"/var/log/my_www_log"のログファイルを処理し、その際にDNS探索として既存の"dns_cache.db"のDNSキャッシュを探索し、出力を"out"というディレクトリに出力します。 DNSキャッシュは既に存在している必要があります。

for i in /var/log/*/access_log; do 
webazolver -N 20 -D /etc/dns_cache.db $i
done

これは、"/var/log"ディレクトリ以下にある"access_log"というログを探しだし、これらのログから"/etc/dns_cache.db"というDNSキャッシュを作成・更新します。  DNSキャッシュの作成のために、子プロセスは20個起動します。 この例のような方法は、ヴァーチャルホストを提供しているサイトの管理で良く行われます。

for i in /etc/webalizer/*.conf; do webalizer -c $i -D /etc/cache.db; don

この例は、"/etc/webalizer"ディレクトリに以下にある、"*.conf"の複数の設定ファイルを探し出し、これによって、webalizerを実行します。 このときDNSキャッシュの情報として、"/etc/dns_cache.db"が利用されます。 入力するログや他の設定情報については"*.conf"の設定ファイルの内容のものを使います。 これは上記のDNSキャッシュの作成方法とペアで利用されることの多い方法です。

考慮すべき事

現在処理が続いているログファイルへのDNSキャッシュの作成は、DNS検索中に新たなログが記録され問題を引き起こすでしょう。

DNSのアドレスは3日間のTTL (time to live)を持っています。 これは、コンパイルの際に、dns_resolv.hのヘッダファイルの"DNS_CACHE_TTL"の値を変更すれば変えらるかも知れません。

DNSの子プロセスは最大100まで指定できます。 しかし、パフォーマンスなどを考えると現実的には5から20くらいにすべきでしょう。

もし、ログを標準入力(STDIN)から受け、DNSキャッシュもランタイムに作成するようにしたなら、処理はDNSキャッシュを生成した終了してしまうでしょう。もしSTDINからのストリームで結果を得たいなら、2回処理を行う必要がある事でしょう。一度目はDNSキャッシュをつくるために、もう一度はレポートを得るために。

オリジナルのdns-resolverのコードを提供してくれたHenning P. Schmiedehausen <hps@tanstaafl.de>へ心より感謝します。
この実装が基礎になっています。

Homeへ

Copyright© 1998-2003 ROBATA.ORG