如何开发打点统计系统-阿里云开发者社区

开发者社区> 轩脉刃> 正文

如何开发打点统计系统

简介:
+关注继续查看

最近做了一个打点统计系统,统计系统肯定各个公司都有做过,至于怎么做就不好说了。我见过最多的就是使用php开发一个打点接口,然后在打点接口中做数据点击,这种方法最差的就是每次打点都往数据库中操作,另外一种就是往一个文件中增加数据。对于后一种,我就很奇怪了,你既然php是等于要往日志文件中增加一条记录,那干啥不用web服务器的自身的日志呢?所以我这次就果断使用分析nginx日志的方法来做打点(这个方法也是大多公司统计系统采用的方法吧)。
至于storm,hadoop啥的,太高大上了。没用

 

nginx日志打点第一个使用什么打点接口,当然可以自己放一个文件在服务器,然后访问这个文件。但是实际上nginx有个empty_gif的模块,它把图片存放在nginx的内存中,所以它的访问速度比静态文件的访问速度还快,所以果断选择这个。因此我的配置文件如下:

复制代码
server {
        listen       80;
        server_name ares.test.com;
        access_log /home/web/ares/log/ares.test.com.access.log;
        access_log /home/web/ares/log/ares.test.com.static.log;
        error_log /home/web/ares/log/ares.test.com.error.log notice;

        root /home/web/test/www/;
        index index.php;

        location = /ares.gif {
            empty_gif;
        }
}
复制代码

这里我把access_log写两份,目的是希望我一份做存留,一份做分析。

我设计的访问接口是http://ares.test.com/ares.gif?p=a&i=b

这里的p和i是统计的项目和统计项。

 

然后日志写完了之后,就需要进行日志切割了,日志切割怎么搞都行,我就搬起了php最快上搞,就是这里要注意下切割完日志以后要给nginx发送一个信号,让它修改下日志的fd。

复制代码
       @rename($srcLog, $disLog);

        // 发送信号给nginx
        $pidFile = Yii::app()->params->nginxPid;
        $command = "kill -USR1 `cat ${pidFile}`";

        @system($command);
复制代码

然后这个脚本我设置每1分钟跑一次,将当前的日志用分钟来重命名

 

下面就是分析日志的过程。

分析日志一定会是多个进程的环境。为什么,因为,一个进程,太慢。那多进程的环境,就需要有多个进程同时读取一个文件的情况,分析日志的时候就需要注意下使用文件锁。

复制代码
            $disLogs = glob(Yii::app()->params->logFolder . "ares_*.log");

            foreach ($disLogs as $log) {
                $fp = fopen ($log , "rw+");

                // 如果获取到锁
                if (flock($fp , LOCK_EX)) {
                    while(!feof($fp)) {
                        $line = fgets($fp, 4096);
                        // DO SOMETHING
                    }

                    ftruncate($fp, 0);
                    fflush($fp);
                    flock($fp, LOCK_UN);
                    unlink($log);

                    echo "logfile {$log} ok" . PHP_EOL;
                }

                fclose ($fp);
            }
复制代码

然后这个脚本我会让它循环跑10分钟,每2分钟启动一个脚本,这样就有5个脚本在跑。

至于数据库设计,就和后台需求有关了。

我这里第一版最简单的就是记录下每个小时的点击数。

所以只需要最简单的项目表,统计项表,统计数据表就好。

这样子还有个好处就是可分布式扩展,如果一个统计前端机扛不住了,那么我就单纯加机器就好了,反正这些数据都是往同一个数据库中插入的。

 

至于后台界面开发,最近疯狂喜欢上ACE这套后台模板,然后画图使用HighChart来弄。

后台统计项目如何加功能后面后面再说~

 

至此初步的统计就搞起来了。我在一台机器上测试过前端压力,8核的机器,大概能有1w左右的qps。至少能扛过一阵了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
竟有如此缤纷的 AIR 学习指导:推荐《Adobe AIR 完整入门与开发实录》
AIR一方面提供与Flash等量齐观的API,一方面拥抱市场上大批的 UI 框架,如何将这二者合二为一将对开发者的参考价值很大。教学第一,该书不是API文档乏味的复述,并有大量的例子与视频教学,学习AIR起来就可达到事半功倍的效果。
480 0
【开发】IDEA的Diagram这些功能你了解吗?
最近正好也没什么可忙的,就回过头来鼓捣过去的知识点,到Servlet部分时,以前学习的时候硬是把从上到下的继承关系和接口实现记得乱七八糟。
1664 0
仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)
转载请说明原出处,谢谢~~           上一篇仿酷狗日志结束后,整个换肤功能就只剩下调色板功能没有做了,我本以为会很简单,但是研究了酷狗的调色板功能后发现不是那么简单的事情。
1055 0
找优质的直播软件开发公司不用担心系统架构问题
文章标题中提到的系统架构问题,在直播软件开发过程中也是非常重要的一部分。为什么这么说呢?我们举个简单的例子,一个施工队盖楼肯定先要把整体的框架用钢筋扎好,然后再进行下一步的工作。开发直播软件也是一样,先把整体的架构设计好罗列出来,再把其中的功能挨个添加进去。
917 0
OAF_开发系列14_实现OAF代码动态新增控件
dERP技术讨论群: 288307890 技术交流,技术讨论,欢迎加入 Technology Blog Created By Oracle ERP - 鲍新建
664 0
《Node.js区块链开发》导读
每每读到这句话,总能被感动。后来,与那位朋友聊天,我说你真有才,能把一句话说到人的内心深处,我若不是因为是男人,一定美美地哭一场。他一听,十分感慨,告诉我他也是摘抄来的,还说只有经历过,才能被感动。
4190 0
mysql 系统用户最大文件打开数限制
mysql 系统用户最大文件打开数限制 纸上得来终觉浅,绝知此事多宕机...记录一下自己很蠢的一次故障处理过程。   上周的时候,一个刚上线的系统又开始反映登不上了,因为最近这个系统也老是出现这个问题,开发也一直在找问题中,所以也没太在意。
977 0
探讨一下如何打造稳定的报名系统之考务管理报名系统开发设计浅谈
首先,标题已注明是浅谈,也就不会太高深,适合各种技术类、非技术类人员参阅。由于才疏学浅,可能存在不到之处,还请大神指正,勿喷、谅解。
146 0
+关注
290
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载