亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

基于Nginx1.9+LuaJIT+Kafka的點播監控系統實戰

2024-06-28 16:00:16
字體:
來源:轉載
供稿:網友

http://m.blog.csdn.net/article/details?id=51168573

基于Nginx1.9+LuaJIT+Kafka的點播監控系統實戰(上海卓越智慧樹網點播監控系統)

發表于2016/4/16 16:06:45  1310人閱讀

分類: Kafka Lua Nginx

最近在做點監控系統,先后采用了兩套方案:方案一:Nginx記錄日志 --> tail語句掃描日志到Kafka --> java站點消費Kafka消息后存儲到MySQL數據庫 --> Mysql數據庫 --> 數據庫定時匯聚數據 --> 界面呈現方案一遇到的問題:1.1 面對海量數據,日志文件增長很快,磁盤占用大1.2 Java站點消費Kafka消息后存儲到Mysql數據庫 太慢為了解決上述兩個問題,采用方案二:方案二:Nginx+Lua直接向Kafa發送數據  --> Java站點消費Kafka消息后存儲到Mysql數據庫 --> Mysql數據庫 --> 數據庫定時匯聚數據 --> 界面呈現2.1 Nginx+Lua直接向Kafa發送數據: Nginx不記錄日志,直接發送到Kafka,不占用磁盤空間2.2 Java站點消費Kafka消息后存儲到Mysql數據庫: 合并更新操作,如對同一個sessionid的更新操作有100條,合并后只有一條更新語句方案二遇到的問題:2.3 Nginx可以直接用完整的OpenResty,也可以在現有的Nginx基礎上添加插件,    我采用的是在現有的Nginx基礎上添加插件方案一具體如下:Nginx1.9.9kafka_2.11-0.9.0.11.1、Nginx配置文件里的配置:log_format ht-video  '$request|$msec|$http_x_forwarded_for|$http_user_agent|$request_body';server{                server_name lc.zhihuishu.com;                location / {                        root /usr/local/nginxnew/html/view;                        index index.html;                }                location /ht{                        #root   html;                        #index  index.html index.htm;                        if ( $request ~ "GET" ) {                                #access_log logs/ht-video.log ht-video;                                                access_log /htlog/ht-video.log ht-video;                        }                        PRoxy_set_header Host $http_host;                        proxy_pass http://localhost:6099;                        client_max_body_size 8000M;                        #error_page 405 =200 $1;                }        }        server {                listen       6099;                server_name  localhost;                location /ht {                root   /usr/local/nginxnew/html/hightower;                index  index.html index.htm;                client_max_body_size 8000M;                error_page 405 =200 $1;        }1.2、修改本機Hosts文件vi /etc/hosts10.252.126.242  kafka1.livecourse.com10.252.126.242  zookeeper1.livecourse.com1.3、修改Kafka文件vi /usr/local/kafka_2.11-0.9.0.1/config/server.properties    這個文件里要改下面5點:broker.id=0port=9092host.name=10.252.126.242log.dirs=/able4/kafka-logszookeeper.connect=zookeeper1.livecourse.com:2181vi /usr/local/kafka_2.11-0.9.0.1/bin/kafka-run-class.sh   添加兩行:export JAVA_HOME=/usr/local/java/jdk1.7.0_79export JRE_HOME=/usr/local/java/jdk1.7.0_79/jre1.4、啟動zookeeper和kafka/usr/local/kafka_2.11-0.9.0.1/bin/zookeeper-server-start.sh -daemon /usr/local/kafka_2.11-0.9.0.1/config/zookeeper.properties/usr/local/kafka_2.11-0.9.0.1/bin/kafka-server-start.sh -daemon /usr/local/kafka_2.11-0.9.0.1/config/server.properties1.5、掃描Nginx日志發送到kafkatail -n 0 -f  /usr/local/nginxnew/logs/ht-video.log | /usr/local/kafka_2.11-0.9.0.1/bin/kafka-console-producer.sh --broker-list kafka1.livecourse.com:9092 --topic HT-VIDEO方案二具體如下:Nginx1.9.9LuaJIT-2.0.4lua-nginx-module-0.10.2ngx_devel_kit-0.3.0rc1lua-resty-kafkakafka_2.11-0.9.0.1參考的這幾篇文章方成此方案

Nginx與Lua

基于Lua+Kafka+Heka的Nginx Log實時監控系統

Lua如何讀取nginx內置對象和方法

Kafka官方文檔

nginx+lua+kafka實現日志統一收集匯總

1 安裝LuaJIT下載http://luajit.org/download.htmlhttp://luajit.org/install.html  命令如下:tar zxf LuaJIT-2.0.4.tar.gzcd LuaJIT-2.0.4make PREFIX=/usr/local/LuaJITmake install PREFIX=/usr/local/LuaJITecho "/usr/local/LuaJIT/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.confldconfig#注意環境變量!export LUAJIT_LIB=/usr/local/LuaJIT/libexport LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.02 安裝lua-nginx-modulehttps://github.com/openresty/lua-nginx-module/tagscd /usr/localtar zxvf lua-nginx-module-0.10.2.tar.gz 

3 安裝ngx_devel_kit

https://github.com/simpl/ngx_devel_kit/tags

http://17173ops.com/2013/11/01/17173-ngx-lua-manual.shtmlcd /usr/localtar zxvf ngx_devel_kit-0.3.0rc1.tar.gz 4 安裝編譯Nginxhttp://17173ops.com/2013/11/01/17173-ngx-lua-manual.shtml給Nginx添加下面的參數,如果已經安裝了Nginx則用  nginx -V   --add-module=/usr/local/lua-nginx-module-0.10.2 --add-module=/usr/local/ngx_devel_kit-0.3.0rc1如:cd /usr/local/nginx-1.9.9./configure  --prefix=/usr/local/nginxnew/ --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=/root/install/ngx_log_if-master --add-module=/usr/local/lua-nginx-module-0.10.2 --add-module=/usr/local/ngx_devel_kit-0.3.0rc15 lua插件lua-resty-kafkahttps://github.com/doujiang24/lua-resty-kafkamkdir /usr/local/lua上傳lua-cjson-2.1.0.3.tar.gz到/usr/local/lua上傳lua-resty-kafka到/usr/local/lua這里遇到些問題,我改寫了其中的client.lua文件的兩個方法:方法1:function _M.new(self, broker_list, client_config)    local opts = client_config or {}    local socket_config = {        socket_timeout = opts.socket_timeout or 3000,        keepalive_timeout = opts.keepalive_timeout or 600 * 1000,   -- 10 min        keepalive_size = opts.keepalive_size or 2,socket_config    }    --start 0 == wangsihong 2016-4-16    local broker_list_host_ip = opts.broker_list_host_ip or {}    local cli = setmetatable({        broker_list = broker_list,broker_list_host_ip = broker_list_host_ip,        topic_partitions = {},        brokers = {},        client_id = "worker" .. pid(),        socket_config = socket_config,    }, mt)    --end 0 == wangsihong 2016-4-16    if opts.refresh_interval then        meta_refresh(nil, cli, opts.refresh_interval / 1000) -- in ms    end    return cliend方法2:function _M.choose_broker(self, topic, partition_id)    local brokers, partitions = self:fetch_metadata(topic)    if not brokers then        return nil, partitions    end    local partition = partitions[partition_id]    if not partition then        return nil, "not found partition"    end    local config = brokers[partition.leader]    if not config then        return nil, "not found broker"    end    --start 1 == wangsihong 2016-4-16    local broker_list_host_ip = self.broker_list_host_ip    for k = 1, #broker_list_host_ip do         local hostip = broker_list_host_ip[k]         if config ~= nil and hostip ~= nil and config.host == hostip.host then             config.host = broker_list_host_ip[k].ip         end     end    --end  1 == wangsihong 2016-4-16    return configend6 lua插件cjsonhttp://www.kyne.com.au/~mark/software/lua-cjson-manual.htmlcd /usr/local/luatar zxvf lua-cjson-2.1.0.3.tar.gz 7 安裝Nginx1.9.9好后修改nginx.confhttp{#    lua_package_path "/usr/local/lua/lua-resty-kafka/lib/?.lua;/usr/local/lua/lua-cjson-2.1.0.3/lua/?.lua;;";#    lua_package_cpath '/usr/local/LuaJIT/lib/lua/5.1/?.so;';    lua_package_path "/usr/local/lua/lua-resty-kafka/lib/?.lua;;";    server{#為了方便調試,關閉了lua_code_cache,如果是生產環境,應該開啟它。lua_code_cache off;listen 80;server_name localhost;location = /lua-v {            content_by_lua '                ngx.header.content_type = "text/plain";                if jit then                        ngx.say(jit.version)                else                        ngx.say(_VERSION)                end             ';        }location /ht3/video/p {            content_by_lua '                ngx.header.content_type = "text/plain";                --local cjson = require "cjson"                --local client = require "resty.kafka.client"                local producer = require "resty.kafka.producer"                local broker_list = {                    { host = "10.252.126.242", port = 9092 },                    { host = "10.252.126.242", port = 9093 },                    { host = "10.252.126.242", port = 9094 },                    { host = "10.252.126.242", port = 9095 },                    { host = "10.252.126.242", port = 9096 },                }local broker_list_host_ip = {   { host = "kafka1.livecourse.com", ip = "10.252.126.242" },}                local key = "key"                --local message = $request|$msec|$remote_addrx|$http_user_agent|$request_body                local myIP = ngx.req.get_headers()["X-Real-IP"]                if myIP == nil then                        myIP = ngx.req.get_headers()["x_forwarded_for"]                end                if myIP == nil then                        myIP = ngx.var.remote_addr                end                local h = ngx.req.get_headers()local message = ngx.req.get_method() .. " " .. ngx.var.uriif ngx.var.args  ~= nil then    message = message .. "?" .. ngx.var.args .. "|"endmessage = message .. ngx.now() .. "|"message = message .. myIP .. "|"message = message .. h["user-agent"] .. "|"local bodyData = ngx.req.get_body_data()if bodyData  == nil thenbodyData = "-"endmessage = message .. bodyData               -- 定義kafka異步生產者                -- 發送日志消息,send第二個參數key,用于kafka路由控制:                -- key為nill(空)時,一段時間向同一partition寫入數據                -- 指定key,按照key的hash寫入到對應的partition

               -- 指定key,按照key的hash寫入到對應的partition

                local key = nil

                -- this is async producer_type and bp will be reused in the whole nginx worker                local bp = producer:new(broker_list, { producer_type = "async" , broker_list_host_ip = broker_list_host_ip,refresh_interval = 3000})                local ok, err = bp:send("HT-VIDEO", key, message)                if not ok then                    --ngx.say("send err:", err)   ngx.say("void(1);");                    return                endngx.say("void(0);");                --ngx.say("send success, ok:", ok)            ';        }           }}8 完成

請求Url:http://localhost/ht3/video/p?a=bbbb 就能將日志內容發送到kafka


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品免费在线免费| 性欧美办公室18xxxxhd| 久久精品国产视频| 2020国产精品视频| 国产亚洲欧美日韩精品| 7m第一福利500精品视频| 精品久久久免费| 色偷偷888欧美精品久久久| 国产欧美一区二区白浆黑人| 国内精品一区二区三区四区| 久久精品成人欧美大片古装| 亚洲精品国产精品乱码不99按摩| 欧美诱惑福利视频| 国产一区二区三区三区在线观看| 亚洲电影免费观看高清完整版在线观看| 国产欧美日韩中文字幕在线| 国模gogo一区二区大胆私拍| 亚洲男子天堂网| 久久久国产在线视频| 国产精品久久久久久久久久新婚| 国产精品一区二区性色av| 国产一区二区三区欧美| 91在线精品视频| 国产一区二区在线播放| 久久久亚洲福利精品午夜| 成人黄色免费网站在线观看| 国产精品视频公开费视频| 欧洲午夜精品久久久| 国产在线观看精品一区二区三区| 欧美激情视频给我| 国产精品久久在线观看| 欧美极品少妇xxxxx| 日韩亚洲一区二区| 日韩美女在线看| 日韩国产高清视频在线| 国产国语刺激对白av不卡| 日韩精品免费在线视频观看| 国产精品午夜国产小视频| 成人性生交大片免费看小说| 亚洲欧美在线第一页| 亚洲男人天堂九九视频| 久久av在线播放| 在线播放精品一区二区三区| 最近2019中文字幕第三页视频| 国产精品久久久久久网站| 欧洲精品在线视频| 永久免费精品影视网站| 俺去亚洲欧洲欧美日韩| 91免费的视频在线播放| 日韩av综合网站| 精品在线观看国产| 夜夜嗨av色综合久久久综合网| 午夜精品一区二区三区视频免费看| 日韩av在线网址| 亚洲精品美女视频| 欧美噜噜久久久xxx| 热久久这里只有精品| 亚洲自拍高清视频网站| 中文字幕日韩av综合精品| 日韩欧美国产高清91| 日韩av第一页| 久久精品国产96久久久香蕉| 性色av香蕉一区二区| 国产97人人超碰caoprom| 中文字幕国产精品久久| 91美女片黄在线观| 亚洲综合中文字幕在线观看| 黄色成人av网| 国产精品丝袜一区二区三区| 亚洲一区中文字幕| 国产精品美女主播在线观看纯欲| 欧美情侣性视频| 亚洲精品久久视频| 成人国产精品色哟哟| 日韩精品欧美激情| 国产精品爽爽爽爽爽爽在线观看| 久久久久久久久久久亚洲| 日韩av123| 亚洲老头同性xxxxx| 亚洲成人性视频| 国产成人精品视| 成人精品久久一区二区三区| 欧美限制级电影在线观看| 国产精品久久久久久婷婷天堂| 色999日韩欧美国产| 欧美三级免费观看| 欧美乱妇高清无乱码| 亚洲人成电影网站色…| 久久伊人91精品综合网站| 中文字幕一区二区三区电影| 亚洲国产精品va在线观看黑人| 国产一区二区视频在线观看| 欧美日韩黄色大片| 欧美在线不卡区| 欧美色道久久88综合亚洲精品| 少妇精69xxtheporn| 国产91色在线|免| 久久久成人精品| 国产91精品久久久| 日韩在线观看精品| 午夜精品蜜臀一区二区三区免费| 中文字幕在线观看日韩| 久久色免费在线视频| 精品自拍视频在线观看| 成人在线一区二区| 日韩女优在线播放| 国产精品 欧美在线| 91性高湖久久久久久久久_久久99| 97在线观看视频国产| 韩国美女主播一区| 国产亚洲精品美女久久久| 97超级碰碰碰久久久| 久久久久久久久久婷婷| 欧美高清在线播放| 亚洲精品狠狠操| 亚洲成人黄色在线观看| 国产成人极品视频| 久久伊人精品一区二区三区| 亚洲国产精品99久久| 精品国内产的精品视频在线观看| 国产成人免费91av在线| 最新91在线视频| 国产精品视频xxxx| 国产精品久久久久久av福利| 国产精品高精视频免费| 美女精品视频一区| 91社影院在线观看| 亚洲天堂影视av| 亚洲aⅴ日韩av电影在线观看| 久久精品国产亚洲| 欧美在线一级va免费观看| 久久成人精品视频| 国产亚洲欧美视频| 成人中文字幕+乱码+中文字幕| 欧美中文在线观看国产| 91久久国产精品91久久性色| 国产精品免费在线免费| 欧美精品一区在线播放| 国产精品一区二区三区成人| 亚洲精品日韩av| www国产精品com| 日韩av在线精品| 97视频在线观看免费高清完整版在线观看| 这里只有精品视频在线| 欧美性猛交xxxx乱大交极品| 26uuu另类亚洲欧美日本老年| 精品久久久久久国产| 日韩精品视频免费专区在线播放| 精品国产一区二区三区久久狼5月| 日韩在线观看免费高清完整版| 欧美精品一区二区三区国产精品| 欧美丝袜美女中出在线| 国产成人精品久久二区二区| 久久久国产一区| 久久视频在线看| 日韩中文在线中文网在线观看| 久久人人爽人人爽爽久久| 九九久久国产精品| 日本欧美精品在线| 精品露脸国产偷人在视频| 日韩精品免费一线在线观看| 亚洲国模精品私拍| 国产成人精品午夜| 欧美激情久久久久久|