Nginx+Lua实现访问日志收集系统
source link: https://panda843.github.io/article/1758295789.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Nginx+Lua实现访问日志收集系统
网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。
名称 | 途径 | 备注 | ||
---|---|---|---|---|
访问时间 | web server | Nginx $msec | ||
IP | web server | Nginx $remote_addr | ||
域名 | javascript | document.domain | ||
URL | javascript | document.URL | ||
页面标题 | javascript | document.title | ||
分辨率 | javascript | window.screen.height & width | ||
颜色深度 | javascript | window.screen.colorDepth | ||
Referrer | javascript | document.referrer | ||
浏览客户端 | web server | Nginx $http_user_agent | ||
客户端语言 | javascript | navigator.language | ||
访客标识 | cookie | |||
网站标识 | javascript | 自定义对象 | ||
# 埋点代码 | ||||
|
前端统计脚本
(function () { |
需要在nginx的配置文件中定义日志格式
#日志采用每行一条记录的方式,采用不可见字符^A(ascii码0x01,Linux下可通过ctrl + v ctrl + a输入,下文均用“^A”表示不可见字符0x01),具体格式如下: |
Nginx+Lua配置
nginx配置本身的逻辑表达能力有限,这里选用了OpenResty做这个事情。OpenResty是一个基于Nginx扩展出的高性能应用开发平台,内部集成了诸多有用的模块,其中的核心是通过ngx_lua模块集成了 Lua,从而在nginx配置文件中可以通过Lua来表述业务。这里用到了诸多第三方ngxin模块(全都包含在OpenResty中了)
location /1.gif { |
真正的日志收集系统访问日志会非常多,时间一长文件变得很大,而且日志放在一个文件不便于管理。所以通常要按时间段将日志切分,例如每天或每小时切分一个日志。这里为了效果明显,每一小时切分一个日志。并通过crontab定时调用一个shell脚本实现
#这个脚本将ma.log移动到指定文件夹并重命名为ma-{yyyymmddhh}.log,然后向nginx发送USR1信号令其重新打开日志文件。 |
Contab配置
59 * * * * root /path/to/directory/rotatelog.sh |
注意,原始日志最好尽量多的保留信息而不要做过多过滤和处理。例如上面的MyAnalytics保留了毫秒级时间戳而不是格式化后的时间,时间的格式化是后面的系统做的事而不是日志收集系统的责任。后面的系统根据原始日志可以分析出很多东西,例如通过IP库可以定位访问者的地域、user agent中可以得到访问者的操作系统、浏览器等信息,再结合复杂的分析模型,就可以做流量、来源、访客、地域、路径等分析了。当然,一般不会直接对原始日志分析,而是会将其清洗格式化后转存到其它地方,如MySQL或HBase中再做分析。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK