原来使用的日志持久化方案是多线程异步解析nginx日志同步到mysql,由于项目现场访问量太高,且目前不具备升级条件,项目组希望我们把日志同步到其他机器去解析,所以就有了这个文章:
我的建议是使用rsyslog作为接收端,nginx直接发送日志到rsyslog上
rsyslog版本如下(怎么安装随你,编译或者yum都可以):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
rsyslogd 8.2102.0-117.el9 (aka 2021.02) compiled with:
PLATFORM: x86_64-redhat-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
systemd support: Yes
Config file: /etc/rsyslog.conf
PID file: /var/run/rsyslogd.pid
Number of Bits in RainerScript integers: 64
See https://www.rsyslog.com for more information.
|
配置文件如下(这里你最不能修改的就是我的template,我调了很久):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# rsyslog配置文件
# 更多信息,请参阅 /usr/share/doc/rsyslog-*/rsyslog_conf.html
# 或者在线查看最新版本 http://www.rsyslog.com/doc/rsyslog_conf.html
# 如果您遇到问题,请查看 http://www.rsyslog.com/doc/troubleshoot.html
#### 全局指令 ####
# 放置辅助文件的位置
global(workDirectory="/var/lib/rsyslog")
# 使用自定义格式
template(name="NoHeaderLogFormat" type="string" string="%msg:2:$%\n")
#module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
module(load="builtin:omfile" Template="NoHeaderLogFormat")
#### 模块 ####
# 在514端口启用UDP syslog接收
module(load="imudp")
input(type="imudp" port="514")
# 包含 /etc/rsyslog.d/ 目录下的所有配置文件
include(file="/etc/rsyslog.d/*.conf" mode="optional")
# 禁用未使用的模块 (为参考而注释掉)
#module(load="imuxsock" # 提供本地系统日志记录支持(例如通过logger命令)
# SysSock.Use="off") # 关闭通过本地日志套接字接收消息;
# # 现在通过imjournal获取本地消息。
#module(load="imjournal") # 提供对systemd日志的访问(用于UDP接收时不需要)
#module(load="imklog") # 读取内核消息(用于UDP接收时不需要)
#module(load="immark") # 提供--MARK--消息功能
#### 规则 ####
# 所有接收到的UDP消息都写入 /usr/openresty/nginx/log/access.log
*.* /usr/openresty/nginx/log/access.log
|
nginx配置,只保留同步的逻辑,去掉本地存储的部分:
1
2
3
4
5
6
|
http {
...
access_log syslog:server=192.168.31.166:514 access if=$loggable;
#access_log logs/access.log access buffer=256k flush=5s if=$loggable;
...
}
|