我有一个运行 Ubuntu Server 11.10、Squid 2.7.STABLE9 的代理服务器。我安装了 sarg(2010 年 9 月 18 日版本 2.3.1)以使用普通 apt-get install 生成报告,并添加了一个 cron 作业以每 5 分钟生成一份当天的报告(这将覆盖 5 分钟前的报告)一):
*/5 * * * * /root/proxy_report.sh
其内容/root/proxy_report.sh
为:
#!/bin/bash
/usr/bin/sarg -nd `date +"%d/%m/%Y"` > /dev/null 2>&1
我添加了另一个 cron 作业,每小时 32 点生成一份完整报告(不要与 5 分钟作业冲突):
*/32 * * * * /root/proxy_report_full.sh
其内容/root/proxy_report_full.sh
是:
#!/bin/bash
/usr/bin/sarg -n > /dev/null 2>&1
我添加了一个小脚本来删除昨天的完整报告(昨天结束的完整报告不会被今天新的完整报告覆盖)以/etc/rc.local
在启动时运行:
/usr/bin/rm_yesterday.sh &>> /var/log/rm_yesterday
在哪里/usr/bin/rm_yesterday.sh
:
#!/bin/bash
find /var/www/sarg/ | grep `date -d Apr1 +"%Y%b%d"`-* | grep -v `date +"%Y%b%d"` | xargs rm -rf
* Apr1 是代理的开始日期...
** 我已将其放置/usr/bin
在启动时尽早安装...
这种安排大约持续了一个半月,但有一次我注意到一些错误并且没有生成报告,并通过偏移量(第二个 cron 作业的 32 中的两分钟)修复了该问题。然而,它随后开始不再生成报告。通过手动尝试生成它会出现以下错误:
root@proxy-server:~# sarg -n
SARG: getword_atoll loop detected after 3 bytes.
SARG: Line="154 192.168.10.40 TCP_MISS/200 39 CONNECT www.google.com"
SARG: Record="154 192.168.10.40 TCP_MISS/200 39 CONNECT www.google.com"
SARG: searching for 'x2f'
SARG: getword backtrace:
SARG: 1:sarg() [0x8050a4a]
SARG: 2:sarg() [0x8050c8b]
SARG: 3:sarg() [0x804fc2e]
SARG: 4:/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0x129113]
SARG: 5:sarg() [0x80501c9]
SARG: Maybe you have a broken date in your /var/log/squid/access.log file
当我查看/var/log/squid/
文件夹时,我注意到它包含一些旋转日志:
root@proxy-server:~# ls /var/log/squid/
access.log access.log.1 cache.log cache.log.1 store.log store.log.1
那么也许 sarg 安装了 logrotate 呢?或者它是标准 Ubuntu 自带的?我不记得我手动安装过它。
问题是: 可能出了什么问题?这和旋转日志有关系吗?如何追踪错误并重新开始生成报告?
答案1
首先我不知道 sarg 但问题似乎是由您的日志文件引起的。这可能是由两件事引起的:
- 您的鱿鱼配置的随机字符/二进制数据/更改的日志格式
- sarg 轮换的日志文件可能有问题
logrotate
基于http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=369693也https://bugs.launchpad.net/ubuntu/+source/squid/+bug/268816我认为这个问题可能是由logrotate引起的。