通过openresty把日志发送到syslog服务器,openrestysyslog


配置并启动syslog

在远端服务器启用syslog
1.安装

yum install rsyslog  -y

2.配置

vim /etc/rsyslog.conf 

主要修改配置如下

$ModLoad imtcp #使用tcp
$InputTCPServerRun 514 #端口
$template RemoteLogs,"/var/log/openresty/%FROMHOST-IP%.log" #定义下记录日志的路径和命名格式
*.* ?RemoteLogs #使用这个定义的格式
& ~

3.启动

#centos 6
service rsyslog start

#centos 7
systemctl start rsyslog 

4.查看是否正常
看下端口

# netstat -anop | grep 514
tcp        0      0 0.0.0.0:514                 0.0.0.0:*                   LISTEN      32056/rsyslogd      off (0.00/0/0)

在其他服务器上telnet这台rsyslog服务器

telnet 172.16.91.10 514
#如果telnet正常连接,可以随便再输入些任意字符,rsyslog服务器的/var/log/openresty/下应该会有这台主机的日志文件

#如果是用UDP,可以用nc来检查连通性
nc -vz -u 172.16.91.10 514

配置openresty

1.准备好lua-resty-logger-socket模块
地址 https://github.com/cloudflare/lua-resty-logger-socket
把它放到对应的路径,如/usr/local/openresty/nginx/ext/
2.nginx配置
关键配置如下

http
    {

        .....
        lua_package_path "/usr/local/openresty/nginx/ext/lua-resty-logger-socket/lib/?.lua;;";
        log_escape_non_ascii off;
        error_log /opt/weblogs/platform/error.log debug;#在第一次配置的时候建议开启debug日志,便于查找问题
        .....

        server
        {
            .....
            log_by_lua_file /usr/local/openresty/nginx/lua/log_by.lua
            lua_need_request_body on;
        }
    }   

3.log_by.lua示例如下

local cjson = require "cjson.safe"
local logger = require "resty.logger.socket"

if not logger.initted() then
    local ok, err = logger.init {
        host = "172.16.91.10", --部署时,需要填写logserver服务器ip
        port = 514,--部署时,需要填写logserver服务器port
        sock_type = "tcp",--采用udp传输
        flush_limit = 1,--1就是时实传输,
        --drop_limit = 5678, --默认1mb 超过会自动删除
        timeout = 10000,--超时设置
        pool_size = 100 --连接池大小
    }
    if not ok then
        ngx.log(ngx.ERR, "failed to initialize the logger: ", err)
        return
    end
end

client_ip = ngx.var.remote_addr
local args = ngx.req.get_post_args(10)
if not args then
    ngx.say("failed to get post args")
    return 
end
-- ngx.req.read_body()

logstr = cjson.encode(args).."\n"

local bytes, err = logger.log(logstr)
if err then
    ngx.log(ngx.ERR, "failed to log message: ", err)
    return
end

配置完成后,reload下openresty的nginx,正常情况下可以在syslog服务器看到nginx的日志了。

相关内容

    暂无相关文章