1. 流程分析

用戶訪問某些界面頻率越高,那么此時可以推斷當前商品是熱門商品,所以我們可以收集商品詳情頁訪問日志,收集方式如上圖:
1:用戶訪問界面會經過Nginx
2:此時使用log_by_lua收集日志
3:log_by_lua將日志發送到Kafka
2. 相關安裝
Nginx安裝
Kafka安裝
3. 相關界面發布
我們可以將我們需要查看的界面上傳服務器,在nginx中配置好相關路徑,配置在serve下,
#靜態資源
location ~ .*\.(woff|ico|css|js|gif|jpg|jpeg|png)$ {
root /usr/local/openrestyDir/pages;
}
#所有以msitems開始的請求都到路徑下找詳情頁
location /msitems/ {
root /usr/local/openrestyDir/pages;
}

4. Lua 操作 Kafka
Lua操作Kafka主要實作MQ訊息發送和MQ訊息消費,我們專案中主要實作發送訊息,此時我們需要寫一個Lua庫或者借助其他Lua庫,寫一個Lua庫成本比較大,可以借助github上開源的lua庫https://github.com/doujiang24/lua-resty-kafka,
下載安裝包:

將下載好的該庫檔案lua-resty-kafka-master上傳至/usr/local/openresty,并解壓unzip lua-resty-kafka-master.zip -d /usr/local/openresty,
nginx要想使用到該lua庫,需要在nginx.conf中配置當前lua庫檔案路徑,在http中配置如下:
lua_package_path "/usr/local/openresty/lua-resty-kafka-master/lib/?.lua;;";

5. Lua實作日志收集
用戶訪問界面,我們需要使用log_by_lua收集日志,我們先撰寫一個lua腳本實作日志收集,創建log.lua,腳本代碼如下:
--引入json決議庫
local cjson = require("cjson")
--kafka庫
local producer = require "resty.kafka.producer"
--kafka的鏈接地址
local broker_list = {
{ host = "192.168.100.130", port = 9092 }
}
--生產者
local pro = producer:new(broker_list,{ producer_type="async"})
--用戶IP
local headers=ngx.req.get_headers()
local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr or "0.0.0.0"
--訊息內容
local logjson = {}
logjson["uri"]=ngx.var.uri
logjson["ip"]=ip
logjson["accesstime"]=os.date("%Y-%m-%d %H:%m:%S")
--發送訊息
local offset, err = pro:send("mslogs", nil, cjson.encode(logjson))
if not ok then
ngx.log(ngx.ERR, "kafka send err:", err)
return
end
修改nginx.conf中界面訪問的配置,使用log_by_lua_file向Kafka記錄日志:
#所有以msitems開始的請求都到路徑下找詳情頁
location /msitems/ {
root /usr/local/openrestyDir/pages;
# 日志收集
log_by_lua_file /usr/local/openresty/nginx/lua/logs.lua;
}
重啟加載nginx配置(nginx -s reload);
在Kafka界面打開消費者接受訊息:
sh bin/kafka-console-consumer.sh --bootstrap-server 192.168.100.130:9092 --topic logs --from-beginning
訪問http://192.168.100.130/msitems/1.html;
這個時候kafka會接收到相關訊息,資訊如下:

注意事項:
注意lua腳本中發送的訊息是到那個topic中,Kafka中的消費者也需要監聽該topic;
如果連接的是遠程服務器的Kafka,需要確保Kafka是否支持遠程連接,
遠程連接例外
接收到訊息后,我們便可以將接收到的資料保存至資料庫中,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/381332.html
標籤:其他
