IPをドメイン表示にする

Analogで解析したレポートファイルを見て判るとおり、Analogはアクセスの多いドメイン(.comや.co.jpなど)を集計し、表示する機能を持っている。Apacheのアクセスログにはどのサイトから訪れたかといった情報が載っているが、IPアドレスがそのまま記録されているため、そのままのログを解析してもドメイン名による集計はできない。
ここでは、このIPアドレスの部分をドメイン名に変換してレポートを作成する方法を紹介する。

1.ログ解析時にドメイン変換を行う

Analogには、ログ解析時にIPアドレスをDNS変換する機能がある。設定ファイルanalog.cfgを次のように修正する。

# DNS変換
DNS WRITE
# DNS検索用キャッシュファイル
DNSFILE /var/analog-5.32/dnsfile.txt
# DNSFILEの有効期限(時間)
DNSGOODHOURS 168

設定後、ログ解析を行い、レポートファイルを参照すると、組織別レポートの表の下に表示されている「上位20位の組織」がドメイン変換されていることが分かる。
また、ログファイルがすでにドメイン変換されているので、ドメインレポートを有効(DOMAIN ON またはコメントアウト)にしても、エラーにならない

ただし、理由はよく分からないが、Analogのドメイン変換は効率が悪く、処理速度も遅い。ログ解析にかかる時間を計測し、あまりに遅いと感じるようなら、次に紹介するやり方を検討する。

2.Apacheのログをドメイン変換してから、ログ解析を行う

Apacheには、ドメイン変換を行うツールがあらかじめ用意されている。そのツールを使って、現在のApacheのログファイルに対してDNS変換を行い、変換後のログファイルをAnalogに解析させる方法を紹介する。

2-1 ApacheのログファイルをDNS変換する

access_logに対してDNS変換を行う。

# cd /usr/local/apache2/logs
#/usr/local/apache2/bin/logresolve < access_log > access_log.resolve

これにより、access_logファイル内のIPアドレスをドメイン名に変換したファイルがaccess_log.resolveという名前で作成される。access_logファイルのサイズが大きいと、それだけ処理に時間がかかるので注意!!

2-2 DNS変換後のログファイルに対してログ解析を行う

DNS変換後のログファイルに対してログ解析を行うよう、Analogの設定ファイルanalog.cfgを次のように修正する。

LOGFILE /usr/local/apache2/logs/access_log.resolve

また、1で紹介したログ解析時のDNS変換は無効にする。

# DNS変換
#DNS WRITE
# DNS検索用キャッシュファイル
#DNSFILE /var/analog-5.32/dnsfile.txt
# DNSFILEの有効期限(時間)
#DNSGOODHOURS 168

2-3 シェルスクリプトの修正

cronでログの解析を自動実行している場合、ログ解析を行う前にドメイン変換を行うよう、シェルスクリプトを次のように修正する。

#!/bin/sh
/usr/local/apache2/bin/logresolve < /usr/local/apache2/logs/access_log > /usr/local/apache2/logs/access_log.resolve
/usr/bin/analog

3.注意事項

ドメイン変換は、サーバに相当な負荷がかかる処理である。しかも、DNSサーバが自サーバにない場合、ネットワークにも負荷をかけてしまうことになる。よって、巨大なログファイルをドメイン変換するべきではない
ログのローテーションを使ってログファイルの巨大化を防ぎ、過去ログと現在のログを使い分けるような工夫をしよう。

参考文献・サイト


[ TOP ]