AWStats 进程在处理大量日志时死亡

AWStats 进程在处理大量日志时死亡

我的 nginx 日志文件非常大 - 多达 250MB。

当我运行了 10 天的日志文件时,下一个每日日志将导致我的 awstats 死机。如下所示:

/usr/lib/cgi-bin/awstats.pl -config=mydomain.com -update
....
Flush history file on disk (unique hosts reach flush limit of 20000)
Flush history file on disk (unique hosts reach flush limit of 20000)
Killed

我知道这与大数据有关 - 因为当我删除 awstats 生成的数据库文件时 - 任何(日期)日志文件都可以通过 awstats.pl 正常运行。

答案1

在我看来,您在处理日志时遇到了资源硬限制。有一个很好的有关 ulimit 的 SU 页面您可以查看一下。TL;DR 可以使用“ulimit -a”查看当前限制;然后在下次运行时使用类似“top”的命令观察 awstats 进程。您很可能会看到它达到内存或堆栈大小限制。

答案2

问题在于 AWStats 中的 DNS 查找本质上效率低下,而且效果并不是很好。 点击这里了解详情。我在所有设置的服务器上都使用了一种更好的策略,即使用 GeoIP 查找而不是域名查找。更多详情在此教程中。基本上,您将进入 AWStats 配置文件—如果我没记错格式方案的话,mydomain.com应该是—。并设置。但是为了将 IP 地址解析为数字以外的内容,您需要设置 GeoIP。如果您不介意向 IP 添加更多数据,则只需禁用 DNS 查找即可。但为了以防万一,我还是分享一下我使用 GeoIP 查找的方法。awstats.mydomain.com.confDNSLookup=0

请记住,如果您不熟悉在自己的软件包上进行编译,这个过程可能会很复杂,但这是我在 Ubuntu 12.04 LTS 下进行操作的方法。

首先,从 MaxMind 获取 GeoIP 工具:

wget http://www.maxmind.com/download/geoip/api/c/GeoIP-latest.tar.gz

提取档案:

tar -xvzf GeoIP-latest.tar.gz

它应该是 GeoIP-1.5.1`,但如果版本发生变化,请检查它会扩展为什么。假设它仍然是 1.5.1 版本,请进入目录:

cd ./GeoIP-1.5.1

在某些情况下我必须运行libtoolize才能使配置正常工作:

libtoolize -f

然后按照“通常”的config惯例make

./configure
make
make check
sudo make install

在某些情况下,我不得不跑dh-autoreconf 如这里所述

sudo aptitude install dh-autoreconf

GeoIP-1.5.1然后在您的目录中执行以下操作:

autoreconf --force --install
./configure
make

好的,如果完成并且有效,请转到将 Perl AWStats 代码与 GeoIP 功能连接起来的 CPAN 组件:

sudo cpan Geo::IP::PurePerl Geo::IP

好吧,一切顺利吗?现在从 MaxMind 获取数据库:

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz

将它们移动到本地/usr/share/GeoIP/目录:

sudo mv ~/GeoIP.dat.gz /usr/share/GeoIP/
sudo mv ~/GeoLiteCity.dat.gz /usr/share/GeoIP/
sudo mv ~/GeoIPASNum.dat.gz /usr/share/GeoIP/

并解压缩它们:

sudo gzip -d /usr/share/GeoIP/GeoIP.dat.gz
sudo gzip -d /usr/share/GeoIP/GeoLiteCity.dat.gz
sudo gzip -d /usr/share/GeoIP/GeoIPASNum.dat.gz

现在执行awstats.mydomain.com.conf以下操作。首先,找到该DNSLookup行并将其禁用:

DNSLookup=0

现在找到包含以下内容的行GEOIP_STANDARD并添加此行或编辑该行以考虑三个新数据库:

LoadPlugin="geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/share/GeoIP/GeoIPCity.dat"
LoadPlugin="geoip_org_maxmind GEOIP_STANDARD /usr/share/GeoIP/GeoIPASNum.dat"

确保这些.dat文件与 中实际的文件名称匹配/usr/share/GeoIP/。一切都好吗?太棒了!现在重新运行 AW Stats 命令。要确认 GeoIP 插件已安装到位,请在运行 AWStats 脚本并设置好 GeoIP 后检查 AWStats 页面的最底部。它应该显示如下内容:

Created by awstats (plugins: geoip_org_maxmind, geoip_city_maxmind, geoip)

这可能比您需要的信息更多,但希望这会有所帮助!

相关内容