使用Openresty接收前端性能监控指标并存入Redis

/data/openresty/html/post.lua

local json=require 'cjson';

local response = {}
response["returnCode"]=0
response["describeMsg"] = ""
response['data']= {}

local function close_redis(red)
        if not red then
                return
        end
        local pool_max_idle_time = 1000
        local pool_size = 100
        local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)
        if not ok then
                return
        end
end

local redis = require("resty.redis")
local red = redis:new()
red:set_timemout(5)
local ip = "192.168.0.215"
local port = 6379
local ok, err = red:connect(ip, port)
if not ok then
        response["describeMsg"]="connect to redis error"
        ngx.say(json.encode(response))
        return close_redis(red)
end
local request_method=ngx.var.request_method;
if request_method == "GET" then
        response["describeMsg"]="Only allow post"
        ngx.say(json.encode(response))
        return close_redis(red);
end;

local headers=ngx.req.get_headers()
function get_client_ip()
    local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr or "0.0.0.0"
    return ip
end

ngx.req.read_body();
local body_data=json.decode(ngx.req.get_body_data());
for i,v in ipairs(body_data) do
        body_data[i]["time"]=os.date("%Y/%m/%d %H:%M:%S", os.time()+3600*8)
        body_data[i]["time"]=os.date("%Y/%m/%d %H:%M:%S", os.time()+3600*8)
        body_data[i]["user-agent"]=headers["user-agent"]
        body_data[i]["clientIP"]=get_client_ip()
        body_data[i]["referer"]=headers["referer"]
        ok, err = red:lpush("logstash-vue", json.encode(body_data[i]))
        if not ok then
                response["describeMsg"]="write to redis err",err
                ngx.say(json.encode(response))
                return close_redis(red)
        end
        response["data"][i]=body_data[i]

end
close_redis(red)
response["describeMsg"]="success"
response["returnCode"]=10000
ngx.say(json.encode(response))

api.conf

    server {
        listen       80 default_server;
        server_name  fengwan.blog.51cto.com;
        error_log logs/error.log;
        add_header 'Access-Control-Allow-Origin' '*';
        add_header Access-Control-Allow-Headers "X-Requested-With";
        add_header Access-Control-Allow-Methods "GET,POST";
        location / {
                lua_code_cache off;
                default_type application/json;
                content_by_lua_file /data/openresty/html/post.lua;
        }
   }

logstash.conf

input {
    redis {
        data_type => "list"
        key => "logstash-vue"
        host => "192.168.0.215"
        port => 6379
        threads => 5
    }
}

filter {
        useragent {
                source => "user-agent"
                target => "ua"
        }
        date {
                locale => "en"
                match => ["time", "yyyy/MM/dd HH:mm:ss"]
        }
           geoip {
                source => "clientIP"
                database => "/GeoLite2-City.mmdb"

          }
}

output {
        stdout { codec => rubydebug }
}

转载于:https://blog.51cto.com/fengwan/2345973

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值