I&U Home > うにまま(仮)

【PR】UNIXサーバ管理を任されたら・・・これを読もう!

・・・やってみたい・・・


■■ Webalizer ■■

Apache ログの解析ツールとして Webalizer を導入してみます。analog もいいのですが、Webalizer は見かけが派手でお年寄り(うちのボス)には受けがいいので(汗)。

ダウンロードは
http://www.webalizer.org/から。ソースからコンパイルするときは、この他に libgd や libpng が必要です。

webalizerのインストールと簡単な設定

  1. webalizer をダウンロードして展開する。
    % tar xof webalizer-2.01-10-src.tar
    % cd webalizer-2.01-10    
  2. 適当(ではなく適切)に config

    当サイトでは、以下の理由で特に config 時にオプションを付けませんでした。

    1. 学術系サイトなので英語使いな方のご訪問が多いため、--with-language=japanese は付けない。
    2. IP から URL への変換は Apache の logresolve を使っているので --with-dns は不要。

    オプションとして付けたのは、--with-etcdir くらいです。デフォルトが /etc なので、それはイヤかなと。

  3. コンパイルしてインストール
    % make
    % su
    # make install 
  4. conf ファイルの編集
    • --with-etcdir で指定したディレクトリに webalizer.conf.sample というファイルができていますので、それを webalizer.conf にコピーしてから編集します。こうしておけば、webalizer 実行時に設定ファイルをオプションで指定する必要はありません。
    • 一般的な設定は、
      LogFile        # 入力となるログファイルのパス
      OutputDir      # 出力先ディレクトリのパス
      
      この他に ReportTitleHostName くらいは設定しておかないとかっこ悪いと思います。(普通は設定しますよね)

いざ実行

    $ /usr/local/bin/webalizer
    OutputDir で指定したディレクトリにファイルができています。index.html をブラウズしてみましょう。

    crontab に登録して、自動化しましょう。


運用してみて分かったこと

    運用を始めて3ヶ月くらい経った頃、ふと気付くとその月だけ普段よりアクセス数が格段に多い。どうしたことかとログを確認してみるとWebalizerで作成した解析ページへの大量アクセスが。ページランクを上げようとしているのだろうか?。そんなサイトのページランクが上がろうが下がろうが関係はないのだが、公開している Referrer にポルノサイトの名前が並ぶというのはちょっと。

    Webalizer を狙ったアクセスがあるのは仕方ないが、どうにかしてこれを表示しないようにしよう。ということで、IgnoreURL に Webalizer の出力ディレクトリを設定した。こんな感じ。
    IgnoreURL /~ppppp/usage/*
    これでポルノサイトの URL を表示しなくて済む。

当サイトの特殊事情

  1. 1つのサイトで複数のデータベースを運用しているので、データベースごとに解析したい。ログはサイトで1つにまとまっている。
  2. ログは別のツールで使用する関係で、前日までのログが1日分1ファイルにまとめて、logresolve がかけてある。
  3. 1ヶ月程度のスパンでの使用状況が分かればよい。が、1ヶ月前のデータしか解析していないというのも寂しいので、10日分くらいずつ解析したい。

    このため、以下のようなスクリプトを毎月、1日、11日、21日に実行するようにした。 1日には前月のログを処理し、11日と21日には当月の前日までのログを処理する。

    当サイトで使用している Webalize 実行スクリプトの骨組み
    #!/usr/local/bin/perl
    
    ($sec, $min, $hour, $mday, $mon, $year, @lest) = localtime(time());
    if($mday != 1) { $mon++; }
    
    if($mon < 10) { $montmp = "0" . "$mon"; }
    else { $montmp = $mon; }
    $year = 1900 + $year;
    $log = "$LOGDIR/$year.$montmp.*";
    #####
    system("grep DB-keyword $log | cut -d\":\" -f2- | webalizer ");
    


2003.10.20


【PR】UNIXサーバ管理を任されたら・・・これを読もう!

I&U Home > うにまま(仮)