我有非常大的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
然后做“平常”的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
好的,如果这样做了,那么就移到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)
这可能比你需要更多的信息,但希望这有助于!