Tiwb

我的业余生活博客.

用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。

Piwik截图