Webalizer の概要ページに 2 か月しか表示されない (Ubuntu 14.04)

Webalizer の概要ページに 2 か月しか表示されない (Ubuntu 14.04)

Webalizer は、スタート ページの概要に 12 か月を表示し、グラフィカルな概要と、今月と前の 11 か月へのリンク リストを表示していました。これは、少なくとも Ubuntu 10.04 と 12.04 ではすぐに機能し、毎日の (月次ではない) ログ ファイルを処理するために増分モードを構成するだけで済みました。

2 つの Web サイトを 14.04 に移行した後、Webalizer が概要を混乱させ、グラフィカルな概要に 2 か月だけが表示され、他の月の 10 スロットが空になっていることに気付きました。リンク リストには同じ 2 か月 (今月と先月) だけが表示されます。5 月と 6 月のログ データを省略すると、3 月と 4 月が表示されますが、これも 2 か月だけです。

私は増分モードを省略し (デフォルトの設定ファイルを使用)、30 か月分のログを含む単一のログ ファイルを webalizer に渡してみました。その結果、webalizer は 5 月の 11 回と 6 月の 1 回の概要グラフィックとリンク リストを作成しました。

重要な注意点: 月次統計は 3 か月以上前のものであっても正しく表示されます。2 か月以上前の統計エントリの URL を手動で入力するだけです。

「webalizer」、「2 か月」、「only」などの組み合わせで Web を検索しましたが、これに似た質問は 1 つしか見つかりませんでした。ただし、回答はありませんでした。

皆さん、何かアイデアはありますか?何が間違っているのでしょうか、あるいは私が何を間違っているのでしょうか?

もちろん、私が試したことをより正確に知りたいと思うでしょうから、私が試したことのコマンドラインの例を記載します。

$ logdir=/path-to-logdir
$ ls $logdir
...
2015.0617-access.log.gz
2015.0618-access.log.gz
2015.0619-access.log.gz
$ outputdir=/path-to-webroot/statistics
$ rm $outputdir/*
$ for logfile in $logdir/*-access.log.gz;  do webalizer -r http://$hostname -n $hostname -o $outputdir $logfile;  done
... lots of verbose output about webalizer's activity
... last of it being:
Webalizer V2.23-08 (Linux 3.13.0-55-generic x86_64) locale: htm*
Using logfile /path-to-logdir/2015.0619-access.log.gz (gzip-clf)
Creating output in /path-to-webroot/statistics
Hostname for reports is 'myhostname'
Reading history file... webalizer.hist
Reading previous run data.. webalizer.current
Saving current run data... [06/19/2015 23:27:09]
Generating report for June 2015
Saving history information...
Generating summary report
20 records in 1 seconds, 20/sec
$ 

この結果、合計の要約は 2 か月分のみになりましたが、月ごとの要約 (2 か月以上前のものも含む) が作成され、手動で入力した URL からアクセスできるようになりました。

もう一つの試み(すべてのデータを一度に - 非増分)は次のとおりです。

$ zcat $logdir/*-access.log.gz >/tmp/access.log
$ rm $outputdir/*
$ webalizer -r http://$hostname -n $hostname -o $outputdir /tmp/access.log
... lots of verbose output just as before
$ 

同様の結果ですが、合計サマリーには 5 月のエントリが 11 件、6 月のエントリが 1 件ありました。

正しい要約を得るために誰が協力してくれるでしょうか?

ありがとう、トムトムトム

======================================================== 編集: いくつかのタイプミスを修正し、さらにテストを行いました

24 時間以上経っても回答やコメントが 1 つもありません。この Webalzer の機能はあまり目立たないようです。さて、私がやったことは次のとおりです。

  • ログファイルを14.04の新規インストールでノートブックにコピーしましたが、結果は同じでした
  • 14.04のApacheによって作成されたログファイルを削除しました - 結果は同じです
  • 私は webalizer のソースを取得し、2 つの異なる 14.04 マシンでコンパイルしました。最終的に、このマシンが動作します。

つまり、Ubuntu-14.04 の webalizer パッケージが壊れているということですか? もう 1 年以上も? 信じがたいですね。

何が間違っているのか誰も説明できない場合、少なくとも Webalizer の要約の問題を探している人にとっては、それは自分だけの問題ではないことがわかります。

同様の Webalizer の問題を抱えている他の人の話を聞けたら嬉しいです。そしてもちろん、Webalizer ソースをコンパイルする必要のない解決策を教えてくれたら、さらに嬉しいです。

ありがとう!

トムトムトム

答え1

これは既知のバグであり、パッチがあります:https://bugs.launchpad.net/ubuntu/+source/webalizer/+bug/1471387

答え2

そうですね、私も同じ問題を抱えています。Fedora ボックスですが。解決策もありません。私は、次のサイトで見つけたスクリプトに基づいた「回避策」を使っています。http://stevehavelka.com/rebuilding-broken-webalizer-history-tcl/、これを使用して履歴ファイルを再作成します。これは汚いコピー アンド ペースト スタイルですが、機能します。少なくとも 1 か月間 (つまり、Webalizer がインデックス ページを再作成し、履歴ファイルを上書きするまで) は機能します。

#!/bin/sh
#Using this script is straightforward:
#
# 1. Run it within the folder that has your old webalizer files, and it produces as much historical data as it can.
# 2. Copy/paste that historical data into your webalizer.hist file, and rerun Webalizer.
# 3. That’s it!  You should have all your stats back.
#
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# first, find the right files
foreach file [lsort -decreasing [glob usage_*.html]] {

    # and get the date from the files
    regexp {usage_(\d{4})(\d\d).html} $file -> year month

    # open the file to get some data from it
    set fh [open $file r]
    set text [list]
    while { ![eof $fh] } {
        lappend text [gets $fh]
    }
    close $fh

    # now start pulling out data with Total Hits
    set idx [lsearch -glob $text {*Total Hits*}]
    regexp {<B>(\d+)</B>} [lindex $text $idx+1] -> totalHits

    # Total Files
    set idx [lsearch -glob $text {*Total Files*}]
    regexp {<B>(\d+)</B>} [lindex $text $idx+1] -> totalFiles

    # Total Unique Sites
    set idx [lsearch -glob $text {*Total Unique Sites*}]
    regexp {<B>(\d+)</B>} [lindex $text $idx+1] -> totalUniques

    # Total kB Files
    set idx [lsearch -glob $text {*Total kB Files*}]
    if { $idx == -1 } {
        set idx [lsearch -glob $text {*Total KBytes*}]
    }
    regexp {<B>(\d+)</B>} [lindex $text $idx+1] -> totalKb

    # Process days
    set first [lsearch -glob $text {*Daily Statistics for*}]
    set last [lsearch -glob $text {*Hourly Statistics for*}]
    set subtext [lrange $text $first $last]
    set dates [lsearch -glob -all -inline $subtext {<TR*><TD ALIGN=center><FONT SIZE="-1"><B>*</B></FONT></TD>}]

    # First day processed
    regexp {<B>(\d+)</B>} [lindex $dates 0] -> firstDay

    # Last day processed
    regexp {<B>(\d+)</B>} [lindex $dates end] -> lastDay

    # Total Pages
    set idx [lsearch -glob $text {*Total Pages*}]
    regexp {<B>(\d+)</B>} [lindex $text $idx+1] -> totalPages

    # Total Visits
    set idx [lsearch -glob $text {*Total Visits*}]
    regexp {<B>(\d+)</B>} [lindex $text $idx+1] -> totalVisits

    # and that's it!
    puts "[string trimleft $month 0] $year $totalHits $totalFiles $totalUniques $totalKb $firstDay $lastDay $totalPages $totalVisits"

}

前述のとおり、このスクリプトを統計サマリーを含むディレクトリに配置し、実行して、結果を webalizer.hist ファイルにコピーして貼り付けます。これで完了です。

これはおそらく、履歴を履歴ファイルに書き戻すことが期待どおりに機能していないことを意味します。ソースのどこを調べればよいのか全くわからないので、他の誰かがこの問題についてもっと明らかにしてくれることを願っています... どのような提案でも歓迎します。

関連情報