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

配置并启动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的日志了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值