post Category: Linux  post タグ: ,  post Comments (0) post2006年1月17日

前エントリのロリポップ生ログダウンロードの目的は、もちろん手元でログ解析したかったからな訳で、その後 うちのファイルサーバである玄箱くんにAWStatsを入れてみることにした。AWStatsにした理由は、Perlでできててお手軽そうなとことか、見た目が適度にきれいなとことか。

AWStats 6.0完全日本語版のページから日本語版をいただき、そのまんまの手順で置いただけです。Lightly and Leniently/AWStatsとは も とても参考になりました。

ただ、前述のとおり複数ドメイン分のログがあるので、うまいこと処理したいなと思い、awstats.*.conf と前段の日本語UTF化部分をいじりました。

そういえばついでに(?)玄箱くんにApacheもインストールしました。って apt-get install apache して設定ちょいといじっただけですが。

ゴール

各ドメインごとに統計が見られるといいな。もちろん全部入り統計も見たいな。

awstats.*.conf の設定

ドメインごと統計用設定ファイル

自環境に合わせて各ディレクトリ設定など変えてますが、それはさきのサイトやconfファイル内の解説どおりで。

んで、各ドメインごとに設定ファイルをつくりました。

zumomo.org 用に awstats.zumomo.org.conf、

www.zumomo.org 用に awstats.www.zumomo.org.conf って感じで。

それぞれ、zumomo.org.log, www.zumomo.org.log, … を解析対象とします。こいつらがどっから出てくるのかは後述。

変更した部分のみ抜粋 (zumomo.org用 awstats.zumomo.org.confの場合):

LogFile="/home/katamari/log/zumomo.org.log" SiteDomain="zumomo.org" HostAliases="localhost 127.0.0.1 REGEX[zumomo\.org$] yoppa.gonna.jp"

各ドメインごとに下線部分を変更(zumomo.org, www.zumomo.org, yoppa.gonna.jp, …)するわけです。

なんか冗長だよ2箇所違うだけじゃんかよ1つのconfファイルで回せないのかよと思って試行錯誤してみましたが、自分の力量ではうまくいきませんでした orz (詳細は後述)

賢い方法ありましたら教えてくださいです。。。

全部入り統計用設定ファイル

AWStatsには複数のログをマージしてくれるツール(tools/logresolvemerge.pl)がついてますので、それを使うことにします。設定内でパイプも使えるのね。

全部用設定は awstats.zumomo_all.conf としときました。変更した部分のみ抜粋:

LogFile="/home/katamari/awstats/tools/logresolvemerge.pl ?/home/katamari/log/*.log |"   (←↑実際は1行です) SiteDomain="*.zumomo.org" HostAliases="localhost 127.0.0.1 REGEX[zumomo\.org$] yoppa.gonna.jp"

ログの準備&awstatsの実行

元ネタは、awstats.cron として準備されてる奴です。

各生ログは zumomo.org.20050115.gz, www.zumomo.org.20050115.gz のような形で落としてあるので、「前日の各ログを展開→UTF化→それぞれ”ドメイン名.log”として保存」することにします。

これを毎日(ログファイルのダウンロード後) cron にて実行するわけだ。

awstats.sh.txt →awstats.sh にリネームし、chmod +x

(※無保証です。サポート等いたしません。)

やってることは、

  1. 昨日の日付(引数ありで呼んだときはn日前)の、各ドメインについて:
    1. ドメイン名.日付.gz を展開 → UTF8に変換 → ドメイン名.log※当然、日付が変わると一昨日の ドメイン名.log は昨日のログで上書きされます。
    2. awstats.ドメイン名.conf にてアクセス解析実行&今月のページを静的生成
  2. 全ドメイン処理すると ドメイン名.log が複数個残ってるので、そいつらを対象として awstats.全部入り.conf にてアクセス解析実行&今月のページを静的生成(awstats.zumomo_all.conf 内の LogFile設定↓にて、1.-1. で作った各ドメインのログがワイルドカードにひっかかるわけだ)
    LogFile="略) logresolvemerge.pl /home/katamari/log/*.log"

お化粧

くだらないですがガワを作りました。ただのベタなHTMLフレームなので(各ドメインの結果HTMLにリンクはっただけ)詳細は略。次↓見りゃ分かりますね。

注意することは、ファイル名を index.html にしないこと。awstats 実行時になんかエラーがあった場合、エラーメッセージがindex.htmlに吐かれるからです。上書きされちゃいます。

(awstats.*.conf の DefaultFile=”index.html” をいじればいいのかも。試してません。)

そいでこうなった

*
わー素敵。

参考:試行してみたけどうまくいかなかったこと

(1)awstats.ドメイン.conf は ドメインごと設定がちょっとずつ違うだけなんで、何とか共通化できないか?

設定ファイルで環境変数を指定して呼び出せるとのことなので、それが使えないかと思って試してみた↓

  • 呼び出し側:ドメインごとループで環境変数を指定。awstats実行時は同じ設定ファイル(awstats.zumomo_each.conf)を使用する。
    for DOMAIN in ${DOMAINS[@]} ; do       :     # 環境変数設定 export AWSTATS_TARGET_DOMAIN=$DOMAIN      # 解析実行 perl $AWSTATS_HOME/awstats.pl -config=zumomo_each -update       :  done;
  • 呼ばれる awstats.zumomo_each.conf の変更した部分のみ抜粋:
    LogFile="/home/katamari/log/__AWSTATS_TARGET_DOMAIN__.log" SiteDomain="__AWSTATS_TARGET_DOMAIN__"

→うまくいきました。静的HTML生成は。

ところが、その生成された HTML のリンク先や年月指定などのフォームアクション先は動的ページ(CGI)になるので、実行時には__AWSTATS_TARGET_DOMAIN__ は当然指定されておらず、エラーになっちゃいますた。

(2)全部入り解析後、せっかく awstats.*.conf の設定で PurgeLogFile=1 (処理済みのログを切り詰める)ってのがあるんだから、これで処理済ログをお片付けしてもらったらラクだな。

→怒られちゃいました。ログファイルでパイプ使ってるときはだめよ~だって。

Error: A pipe in log file name is not allowed if PurgeLogFile and ArchiveLogRecords are not set to 0

まだコメントはありません。

    トラックバック »

この記事へコメントをどうぞ

ガイドライン: いくつかのタグが使えます (a href, strong, em, code).

あなたのお名前を。必須です 
メールアドレスをこちらに。公開されません 
ウェブサイトやブログをお持ちの方はこちらに. 
ここにコメントを書きます. 
Cookieに保存(次回から入力を省略できます)