0

WordPress日志分析

吴伯凡在《人类史就是一部通信史》书中提出一个观点,那就是人类的文明是深深依附于信息化,当人们对原子世界无可奈何的时候,可以通过把原子转化为信息,然后通过处理信息让原子失重,最终来解决原子世界的问题:

  • 希腊神话中的蛇发女神美杜莎,任何直视她双眼的人都会变成石像,非常难以对付。珀尔修斯为了除掉美杜莎,通过一只磨光的盾,用镜面反射代替直面敌人,根据这些信息挥舞宝剑最终除掉了美杜莎。败在自拍高手珀尔修斯的手中,美杜莎心中绝对是万马奔腾……
  • 曹冲称象,就是把物理世界的大象,通过重量相等这个信息,替换成一船石头,让魏武的文臣武将手动点赞。
  • 根据发声体振动的原理在胶木盘上刻下相应的波纹,从而记下原子世界中的声音,通过留声机把信息还原使得普罗大众都能够随时欣赏音乐会。

林林总总,人类都是通过信息化避免了直接和原子世界中的实物正面相对,通过采集等价的信息最终解决问题。与原子相比,信息的好处是没有重量,计算机里下载几百万本书重量也不会增加一毫克,而处理起来只要花费电能即可。

互联网中类似的场景更多。雅典剧作家阿里斯托芬曾经说过,是敌人而不是朋友教育我们,城市需要建造高墙。运营商业网站除了高屋建瓴的愿景,更多是需要研究客户的需求和痛点,从而有针对性的改良。在原子世界中了解客户需求并不那么容易,除了时间和空间的成本,找到客户的痛点也需要一定的技巧。然而,在信息世界中通过Web日志来分析用户行为,却容易得多,即使是海量的数据,大数据平台也使得一切举重若轻。

Web日志中包含了大量重要信息,除了基本的页面访问量、独立用户访问数、搜索关键词、停留时间等,还可以构建广告点击率预估模型、用户转化漏斗等应用。

举个例子,WordPress这个世界上最流行的博客系统,通过丰富的模板和插件,还可以支撑商业网站的运营。WordPress通常基于Apache服务器,本质上就是分析Apache服务器日志。分析WordPress日志只需要简单两步:

  1. 传输日志到大数据平台。
  2. 运用大数据平台分析日志。

传输日志其实有不少挑战,比如从多台服务器收集并汇总、水平扩展收集海量数据、高可靠处理避免数据丢失,等等。为了稳定高效地传输日志到大数据平台,可以使用百度日志服务(Baidu Log Service)。根据提示,把管理收集器安装到运行WordPress的主机即可:

baidu-log-service-02

注意,遵循最小权限安全准则,管理收集器默认权限很低,需要主动赋予它读取日志目录的权限:

setfacl -R -m user:bls:r /var/log/apache2

接着配置传输任务,让管理收集器把Apache日志传输到云端的百度对象存储(Baidu Object Storage)中,如果数据量大的话还可以启动压缩功能:

baidu-log-service-03

设置完毕后,日志就可以源源不断地输送到百度对象存储中供大数据分析了。

分析日志就相对直观了,使用百度开放云分析网站日志中已经介绍了方法,这里罗列一下代码。

首先根据WordPress日志格式创建数据表:

DROP TABLE IF EXISTS access_logs;
CREATE EXTERNAL TABLE access_logs(
    remote_addr STRING comment 'client IP',
    time_local STRING comment 'access time',
    request STRING comment 'request URL',
    status STRING comment 'HTTP status',
    body_bytes_sent STRING comment 'size of response body'
)
COMMENT 'web access logs'
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
    "input.regex" = "([0-9\\.:]+) - - \\[([^\\]]+)\\] \"([^\"]*)\" ([\\d]+) ([\\d]*)"
)
STORED AS TEXTFILE
LOCATION "bos://bigdata/log/wordpress";

之后就可以统计访问次数了:

SELECT day(from_unixtime(unix_timestamp(time_local, 'dd/MMMM/yyyy:HH:mm:ss Z'))) as day, count(1) as pv
FROM access_logs
WHERE status < 400
GROUP BY day(from_unixtime(unix_timestamp(time_local, 'dd/MMMM/yyyy:HH:mm:ss Z')))

结果如下:

baidu-log-service-04

在这个简单统计的基础上,还可以对JavaScript代码请求、网站扫描、网页等流量细分。本质上,使用代码埋点的网页统计服务,是Web日志分析的一个子集。

此外,还可以对地理位置进行分析并可视化在地图上:

baidu-log-service-05

有意思的是,杭州的访客是最多的,是不是应该过去做个地推呢?

 



张 琪

发表评论

电子邮件地址不会被公开。 必填项已用*标注