一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

如何開發(fā)打點統(tǒng)計系統(tǒng)

 icecity1306 2015-09-17

最近做了一個打點統(tǒng)計系統(tǒng),統(tǒng)計系統(tǒng)肯定各個公司都有做過,至于怎么做就不好說了。我見過最多的就是使用php開發(fā)一個打點接口,然后在打點接口中做數(shù)據(jù)點擊,這種方法最差的就是每次打點都往數(shù)據(jù)庫中操作,另外一種就是往一個文件中增加數(shù)據(jù)。對于后一種,我就很奇怪了,你既然php是等于要往日志文件中增加一條記錄,那干啥不用web服務器的自身的日志呢?所以我這次就果斷使用分析nginx日志的方法來做打點(這個方法也是大多公司統(tǒng)計系統(tǒng)采用的方法吧)。
至于storm,hadoop啥的,太高大上了。沒用

 

nginx日志打點第一個使用什么打點接口,當然可以自己放一個文件在服務器,然后訪問這個文件。但是實際上nginx有個empty_gif的模塊,它把圖片存放在nginx的內(nèi)存中,所以它的訪問速度比靜態(tài)文件的訪問速度還快,所以果斷選擇這個。因此我的配置文件如下:

復制代碼
server {
        listen       80;
        server_name ares.;
        access_log /home/web/ares/log/ares..access.log;
        access_log /home/web/ares/log/ares..static.log;
        error_log /home/web/ares/log/ares..error.log notice;

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

        location = /ares.gif {
            empty_gif;
        }
}
復制代碼

這里我把access_log寫兩份,目的是希望我一份做存留,一份做分析。

我設(shè)計的訪問接口是http://ares./ares.gif?p=a&i=b

這里的p和i是統(tǒng)計的項目和統(tǒng)計項。

 

然后日志寫完了之后,就需要進行日志切割了,日志切割怎么搞都行,我就搬起了php最快上搞,就是這里要注意下切割完日志以后要給nginx發(fā)送一個信號,讓它修改下日志的fd。

復制代碼
       @rename($srcLog, $disLog);

        // 發(fā)送信號給nginx
        $pidFile = Yii::app()->params->nginxPid;
        $command = "kill -USR1 `cat ${pidFile}`";

        @system($command);
復制代碼

然后這個腳本我設(shè)置每1分鐘跑一次,將當前的日志用分鐘來重命名

 

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

分析日志一定會是多個進程的環(huán)境。為什么,因為,一個進程,太慢。那多進程的環(huán)境,就需要有多個進程同時讀取一個文件的情況,分析日志的時候就需要注意下使用文件鎖。

復制代碼
            $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);
            }
復制代碼

然后這個腳本我會讓它循環(huán)跑10分鐘,每2分鐘啟動一個腳本,這樣就有5個腳本在跑。

至于數(shù)據(jù)庫設(shè)計,就和后臺需求有關(guān)了。

我這里第一版最簡單的就是記錄下每個小時的點擊數(shù)。

所以只需要最簡單的項目表,統(tǒng)計項表,統(tǒng)計數(shù)據(jù)表就好。

這樣子還有個好處就是可分布式擴展,如果一個統(tǒng)計前端機扛不住了,那么我就單純加機器就好了,反正這些數(shù)據(jù)都是往同一個數(shù)據(jù)庫中插入的。

 

至于后臺界面開發(fā),最近瘋狂喜歡上ACE這套后臺模板,然后畫圖使用HighChart來弄。

后臺統(tǒng)計項目如何加功能后面后面再說~

 

至此初步的統(tǒng)計就搞起來了。我在一臺機器上測試過前端壓力,8核的機器,大概能有1w左右的qps。至少能扛過一陣了。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    中文精品人妻一区二区| 亚洲中文字幕在线观看四区| 国产专区亚洲专区久久| 日韩不卡一区二区在线| 精品熟女少妇av免费久久野外| 亚洲日本加勒比在线播放| 欧美日韩国产精品自在自线| 亚洲午夜福利不卡片在线| 人妻露脸一区二区三区| 亚洲日本韩国一区二区三区| 精品丝袜一区二区三区性色| 日韩欧美亚洲综合在线| 国产对白老熟女正在播放| 国产精品一区日韩欧美| 夜夜躁狠狠躁日日躁视频黑人| 美女激情免费在线观看| 国产精品一区二区有码| 中文字幕亚洲精品在线播放| 精品一区二区三区人妻视频| 亚洲一区二区亚洲日本| 欧美日韩精品一区免费| 亚洲欧美日韩网友自拍| 欧美精品久久男人的天堂| 国产精品亚洲一区二区| 久久精品伊人一区二区| 亚洲内射人妻一区二区| 91欧美视频在线观看免费| 日韩精品视频免费观看| 国产av精品一区二区| 国产福利一区二区久久| 91蜜臀精品一区二区三区| 精品日韩欧美一区久久| 欧美日韩国产二三四区| 欧美激情区一区二区三区| 亚洲日本韩国一区二区三区| 欧美极品欧美精品欧美| 婷婷基地五月激情五月| 国产成人精品久久二区二区| 国产偷拍精品在线视频| 少妇熟女亚洲色图av天堂| 欧美偷拍一区二区三区四区|