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