Webalizer 在摘要页面上仅显示 2 个月(Ubuntu 14.04)

Webalizer 在摘要页面上仅显示 2 个月(Ubuntu 14.04)

Webalizer 过去常常在起始页的摘要中显示 12 个月,以图形概览的形式,以及指向本月和之前 11 个月的链接列表的形式。这至少在 Ubuntu 10.04 和 12.04 中是开箱即用的,我只需配置增量模式来处理我的每日(而非每月)日志文件。

在将两个网站移至 14.04 后,我发现 webalizer 弄乱了摘要,图形概览中只显示了两个月,其他月份的 10 个位置是空的。链接列表只显示相同的两个月(本月和上个月)。如果我省略 5 月和 6 月的日志数据,我会得到 3 月和 4 月 - 同样只有两个月。

我尝试省略增量模式(使用默认配置文件),并向 webalizer 提供包含 30 个月日志的单个日志文件。这导致 webalizer 创建了 11 次 5 月和 1 次 6 月的摘要图形和链接列表。

值得注意的是:每月的统计数据看起来是正确的,即使是三个月或更久以前的统计数据,我只需要手动输入两个月前的任何统计数据条目的 URL。

我使用“webalizer”、“两个月”、“仅”等的任意组合在网上搜索,只发现了一个这样的问题 - 但没有任何答案。

大家有什么想法吗,哪里出了问题或者我可能做错了什么?

好的,当然您想更详细地了解我所尝试的内容,因此我将提供我尝试过的命令行示例:

$ 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 个月的摘要),并且可以通过手动输入的 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 条记录。

谁能帮忙得到正确的总结?

谢谢你,TomTomTom

====================================================== 编辑:我修正了一些错别字,并做了更多测试

超过 24 小时没有收到任何回复或评论 - 看起来这个 webalzer 东西并不那么突出。好吧,这就是我所做的:

  • 我将日志文件复制到全新安装 14.04 的笔记本中 - 结果相同
  • 我删除了 14.04 版 Apache 创建的日志文件 - 结果相同
  • 我抓取了 webalizer 的源代码并在两台不同的 14.04 机器上进行了编译 - 最终这台机器成功了。

这是否意味着 Ubuntu-14.04 的 webalizer 包已损坏?已经超过一年了?难以置信。

如果没有人可以解释哪里出了问题,至少对于那些正在寻找 webalizer 摘要问题的人来说 - 你会发现这不是你一个人的问题。

我很高兴听到其他人有类似的 webalizer 问题 - 当然,如果有人可以向我指出一个不需要编译 webalizer 源的解决方案,我会更高兴。

谢谢你!

汤姆汤姆汤姆

答案1

这是一个已知的错误,并且有一个补丁:https://bugs.launchpad.net/ubuntu/+source/webalizer/+bug/1471387

答案2

好吧,我遇到了同样的问题,不过是 Fedora 盒子。也没有解决方案。我使用了一种“解决方法”,基于我在以下位置找到的脚本:http://stevehavelka.com/rebuilding-broken-webalizer-history-tcl/,使用它来重新创建历史文件。它很脏,是复制粘贴式的,但它可以工作。至少一个月(即,直到 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 文件中。就这样。

这可能意味着将历史记录写回到历史文件无法按预期工作。由于我完全不知道在源代码中查看哪里,所以我希望其他人可以对这个问题提供更多解释...欢迎提出任何建议。

相关内容