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生成的数据库文件 – 任何(date)日志文件将通过awstats.pl运行就好了。

在我看来,就像在处理日志的时候你遇到了困难的资源限制一样。 在ulimit上有一个好的SU页面,你可以看看。 TL; DR将会用'ulimit -a'来看看你目前的限制。 然后在下一次运行时使用类似“顶部”的东西来监视你的awstats进程。 你很可能会看到它的内存或堆栈大小的限制。

问题是AWStats中的DNS查询本质上是低效的,并不是那么好。 在这里阅读 。 在我设置的所有服务器上使用的更好的策略是使用GeoIP查找,而不是域名查找。 本教程中的更多细节在这里 。 基本上你会进入你的AWStatsconfiguration文件mydomain.com – 这应该是awstats.mydomain.com.conf – 如果我记得正确的格式化scheme。 并设置DNSLookup=0 。 但是,然后解决IP地址不仅仅是数字,你需要GeoIP设置。 如果您不关心向IP添加更多数据,则不必执行其他任何操作,而只能禁用DNS查找。 但是为了防止分享我的GeoIP查找方法。

请记住,如果你不习惯在你自己的包上编译,那么这个过程可能会很复杂,但这是我在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 

在less数情况下,我必须运行libtoolize才能使configuration正常工作:

 libtoolize -f 

然后做“平常”的configmake程序:

 ./configure make make check sudo make install 

在某些情况下,我必须运行dh-autoreconf 如下所述 :

 sudo aptitude install dh-autoreconf 

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

 autoreconf --force --install ./configure make 

好的,如果这样做了,那么就移到CPAN组件上,它将把Perl AWStats代码和GeoIP函数桥接起来:

 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执行以下操作。 首先,findDNSLookup行并禁用它:

 DNSLookup=0 

现在find具有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插件已经到位,请在GeoIP设置正确的情况下运行AWStats脚本后,检查AWStats页面的底部。 它应该读取像这样的东西:

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

这可能比你需要更多的信息,但希望这有助于!