我的 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.conf
DNSLookup=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)
这可能比您需要的信息更多,但希望这会有所帮助!