1. 程式人生 > >頁面日誌採集:ngix+logstash+kafka

頁面日誌採集:ngix+logstash+kafka

        頁面日誌採集是指從頁面上採集使用者行為,將使用者行為資訊記錄成日誌,並將日誌資訊讀取到訊息佇列的過程。一種比較常用的日誌採集技術工具是:ngix+logstash+kafka。

       進行頁面日誌的採集,需要在頁面的最下端埋一個js程式碼片段。這個js程式碼片段通常在</body>的前面。這個js程式碼片段中有一行核心的程式碼:“src=XXXX/track.js”。當訪問這個頁面的時候,會從資料採集伺服器上下載track.js。當頁面渲染完成之後,會執行這個js,js就會採集到想要的資料,在track.js的最後會向資料採集伺服器傳送一個請求log.gif?args=……,資料採集伺服器會立即返回一個“1*1”畫素的圖片,又來有回,意味著這次請求結束。在資料採集伺服器的內部,會有一個內部的請求,相當於開了一個執行緒,這個執行緒專門用於記錄log,將track.js傳送過來的請求引數用log的形式寫到日誌檔案裡面。

       可以通過修改ngix的配置(log_format tick{}),來定義log的形式。當log檔案產生之後,可以通過flume、logstash等實時採集工具將資料寫到訊息佇列中。這裡使用kafka作為訊息佇列。

       使用logstash將log檔案的內容寫到kafka裡面,主要是配置logstash的配置檔案,例如下面編寫的logstash的配置檔案(flow-kafka.conf),用於將log資料寫到kafka中。

input{
        file{
          path=>"/home/hadoop/logs/ngix_logs/dir01/*.log"
          discover_interval=>5
          start_position=>"beginning"
        }
}
output{
   kafka{
         topic_id=>"ngixGamelog02"
         codec=>plain{
                format=>"%{message}"
                charset=>"UTF-8"
         }
         bootstrap_servers=>"mini02:9092,mini03:9092,mini04:9092"
   }
}

         接下來就是在叢集上,啟動kafka、logstash,進行頁面資料採集:

//啟動kafka
//1、需要先啟動zookeeper
zkServer.sh start
//2、檢查zookeeper是否啟動成功
zkServer.sh status
//3、在叢集上啟動kafka
kafka-server-start.sh export/servers/kafka/config/server.properties &
#啟動logstash進行資料採集
./export/servers/logstash/bin/logstash agent -f ./export/servers/logstash/config/flow-kafka.conf