用Piwik统计网站访问情况
最近想统计下网站的访问量情况,又不想在页面上加入统计代码,首先想到的就是用服务器的access.log来统计访问情况,经过一番搜索,发现已经有不少成熟的项目了。经过比较,只有Pwiki比较满足我的需求,但是这个项目是php+mysql的,需要定时导入access.log的数据。php的脚本只需要我一个人访问就可以了,所以对服务器承载没有任何影响。
在Nginx下安装PHP
服务器上只有512M的内存,有的时候还想运行个PHP网站,我一直都是用nginx做网站服务器的,所以在nginx下配php脚本。
nginx已经装过了,下面要安装php,使用的是php-fpm这个独立的程序,用FastCGI与nginx连接:
$ yum install php-fpm
配置下php-fpm, 让它只用2个进程, 因为php程序只有我一个人用。修改文件/etc/php-fpm.d/www.conf
,修改下面的属性,其他的可以根据需要自己改。
pm = static
pm.max_children = 2
下面就可以启动php-fpm了,并且把它设置成一直启动的
$ chkconfig php-fpm on
$ service php-fpm start
配置nginx使用php
在您需要修改的网站目录下加一个php的配置,我们假设piwik的文件放在/data/www/piwik
下
server {
location / {
root /data/www/piwik;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /data/www/piwik;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/piwik/$fastcgi_script_name;
include fastcgi_params;
}
}
重新加载配置后, 就可以通过网站访问piwik的安装界面了,pwiki会提示你缺少什么组件,开始安装之前需要把缺少的组件也安装上。
定时导入access.log
配置好了piwik以后,就需要导入access.log中的访问数据了, 我的思路是每个小时导入一次,这样我就可以看到以小时为单位的访问情况了。经过一番折腾,弄出来了一个比较奇葩的方法:
首先需要一个导入日志的脚本,这个脚本运行时,需要把当前access.log中的日志导入pwiki,同时再把导入过的备份到别的地方。脚本如下:
#!/bin/sh
LOG_DIR=/var/log/nginx
LOG_ACCESS=$LOG_DIR/access.log
LOG_IMPORTING=$LOG_DIR/access.log.importing
LOG_IMPORTED=$LOG_DIR/imported.log
# move current log file to a tmp file, and restart log server
mv $LOG_ACCESS $LOG_IMPORTING 2>/dev/null
/bin/kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null
# import temp log file
/data/www/piwik/misc/log-analytics/import_logs.py \
--idsite=1 \
--url=piwik.tiwb.com \
--log-format-name=ncsa_extended \
$LOG_IMPORTING
# join importing log to imported
cat $LOG_IMPORTING >>$LOG_IMPORTED
# remove temp file
rm $LOG_IMPORTING 2>/dev/null
最后还需要配置cron每个小时运行一次导入脚本,再配置logrotate不要处理access.log。