Piwik性能优化


第24章

Cloud

首先得确保你的服务器满足运行Piwik的最低要求,然后再考虑Piwik安装的性能优化问题。

部署和使用Piwik的最低要求

检查你的网站服务器,使其符合运行Piwik的最低要求。

  • 你的网站服务器正运行Nginx;
  • 已安装了PHP 5.3.3或以上版本;
  • 已安装了MySQL 4.1或以上版本,或者已安装了MariaDB;
  • 已安装了PHP扩展pdo和pdo_mysql,或者已经安装mysqli 扩展。

注意,随着时间改变,当将来Piwik软件进行新的升级时,如上所列示的最低要求可能会相应改变。

优化Piwik的性能

为了优化你的Piwik安装性能,需要考虑如下几个方面:

  • 服务器和RAM(硬件)
  • 负载均衡
  • 实时报告
  • 独立URL的数量
  • PHP缓存机制
  • 定时任务

服务器和RAM

这个方法要求在Piwik安装上增加额外的预算。你可以使用一个更好服务器,或者升级你的服务器(比如你的机器或者主要硬件)。

最好是你可以在一个完全专属的服务器上运行Piwik,即不与其他软件共享服务器资源。这并不是Piwik安装严格要求的。

大部分的云解决方案都是不错的选择。云解决方案为你的硬件升级提供了灵活性(比如服务器,RAM,处理器,硬盘空间等等)。

负载均衡

使用负载均衡器意味着你的Piwik安装同时使用多个服务器。负载均衡器能在多个服务器间均匀分布 Piwik安装的工作负荷。

  • 当使用负载均衡器时,你会遇到多个服务器上存在多个config.ini.php文件的情况。使用rsync来同步所有的config.ini.php文件;
  • 在Piwik的config.ini.php文件中,通过在[General]部分下面增加force_ssl=1来启用SSL;
  • 通过将dbtable赋值给变量session_save_handler,以在Piwik的config.ini.php文件中实现数据库会话的存储;
  • 在每次Piwik软件(或者任一插件)升级后,移除tmp/*文件夹的内容。

增加负载均衡器或者额外的服务器同样需要为你的Piwik安装增加额外的预算。

报告处理间隔

Piwik报告处理间隔默认被设置成150秒。为了使得Piwik运行更为平稳,增加报告处理间隔至3600秒(比如60分钟或者1个小时)或者甚至7200秒(120分钟或者2小时)。通过如下路径进行设置:

Administration -> General -> Archive reports at most every X seconds

给seconds字段输入更大的值(比如3600或者7200)。

唯一URL的数量

跟踪的唯一URL的数量越多,Piwik需要在数据库中存储的数据就越多,Piwik的数据库大小将会增大越快。通过保持数据库规模在逻辑上更小,就能避免Piwik性能的快速下降。

理论上下面列出的所有页面地址指向具备高度相似内容的页面(有时甚至是相同页面)

www.example.com/hotels/list-shanghai/
www.example.com/hotels/list-shanghai/?checkin-date=2016-03-01&checkout-date=2016-03-02
www.example.com/hotels/list-shanghai/?checkin-date=2016-05-15&checkout-date=2016-05-18

这些页面的差异仅仅是URL中的标记参数不同。

checkin-date=2016-03-01&checkout-date=2016-03-02
checkin-date=2016-05-15&checkout-date=2016-05-18

你可以在将这些URL存储到Piwik数据库中时排除掉这些相似URL。路径为:

Administration -> Websites -> Global list of Query URL parameters to exclude

输入URL的查询参数清单,每行一个。

注意,一个或多个URL参数均是特定的,以实现排除功能,且仅能对后续的数据产生影响。回顾历史数据时,这些URL参数不会从历史数据和报告中被移除。

PHP缓存

通过PHP缓存(比如XCache)对Piwik的PHP代码进行优化。

定时任务

当你通过网站浏览器登录Piwik账户接口时,Piwik会默认的触发报告归档进程。如果你的网站每日用户会话数相对较高,那么数据归档可能需要几分钟或者更久来进行。为了避免等待次数,可以在你的Linux服务器上设置一个定时任务,以便每小时自动处理这些数据。

为了自动触发Piwik归档进程, 可以设置一个可以每小时执行的脚本。在Piwik的Linux服务器上,设置一个定时任务用于自动归档Piwik报告。定时任务是Linux服务器上一个基于时间的计划服务,要求已经安装php-cli or php-cgi。你需要通过SSH访问进入服务器以进行设置。

通过文本编辑器创建一个新的定时任务:

nano /etc/cron.d/piwik-archive

将如下几行加入到定时任务中:

MAILTO="youremail@example.com"
5 * * * * www-data /usr/bin/php5 /path/to/piwik/console core:archive --url=http://example.org/piwik/ > /home/example/piwik-archive.log

Piwik归档脚本将每个小时运行一次(每小时过5分钟)。正常情况下,根据你网站当前的信息量情况,脚本会在1分钟至30分钟内执行完成。

让我们来检查定时任务的内容。当脚本执行出现错误时,脚本的输出和错误信息将会被发送至你设置的邮箱地址youremail@example.com。

MAILTO="youremail@example.com"

定时任务会被如下用户执行,且这个用户一般是网站服务器的用户。

www-data

PHP可执行文件的路径如下。这个路径很大程度上取决于你的服务器配置和操作系统。为了找出PHP5的执行文件路径,可以在Linux shell下执行命令which php5或者which php。

/usr/bin/php5

脚本中唯一强制要求的参数如下。这个参数必须被设置到你的Piwik基础URL中,例如http://analytics.example.org/ or http://example.org/piwik/。

--url=http://example.org/piwik/

脚本输出内容的写入路径如下。如果你不希望记录最后的Piwik定时任务输出文本,可以采用/dev/null替代这个路径。脚本数据包括有用的信息,比如归档了那些网站,花费了多久处理每一个数据和网站等等。

/home/example/piwik-archive.log

脚本写入错误消息的可选路径如下。如果在定时任务中漏掉这个路径,系统的错误信息将被发送到你的邮箱。如果在定时任务中写入这个路径,系统将在这个特定的错误日志文件中记录错误信息。

/home/example/piwik-archive-errors.log

Cron工具使用两种不同的配置文件类型:

  • 系统定时任务
  • 用户定时任务

这两种不同类型配置文件的唯一区别就在于第六字段。

在系统定时任务中,第六字段是运行这个指令的用户的名称。这使得系统定时任务可以以任何用户的身份运行指令。

在用户定时任务中,第六个字段是运行指令,所有的指令都是以创建定时任务的那个用户来执行。这是一个安全特性。

如果你需要设定用户定时任务类型的定时任务,需要写入:

5 * * * * /usr/bin/php5 /path/to/piwik/console core:archive --url=http://example.org/piwik/ > /dev/null

如下定时任务将在每小时5分钟后触发按日/周/月/年的归档进程。这将确保当你访问Piwik账户接口时,数据已经被处理过了,Piwik报告能被正常加载。

你可以测试定时任务指令。通过在shell内以定时任务用户运行脚本来确保定时任务将正常运行。

su www-data -c "/usr/bin/php5 /path/to/piwik/console core:archive --url=http://example.org/piwik/"

你应该会看到脚本输出,包括归档的网站清单,以及在末尾陈述没有发生错误的小结。



数据分析技术白皮书在2016年11月正式出版。

英文版:Piwik Performance Optimization – 繁体中文版:Piwik性能优化







数据分析技术白皮书上的内容按下列许可协议发布: CC Attribution-Noncommercial 4.0 International

Gordon Choi's Analytics Book