架构说明
- rsyslog client上应用程序的原生日志不做处理,直接通过relp协议发送到rsyslog server
- rsyslog server接收日志队列,通过配置tag+msg配合设施(管道)识别原生日志再写到自定义的文件中分类保存。
一、Rsyslog Client
CentOS 7.6 为例
1.安装relp协议模块
1 | # CentOS |
2.配置rsyslog.conf
加载模块
1 | # 加载输出模块 omrelp |
参数优化
1 | $SystemLogRateLimitInterval 0 # Interval 设置率计算的时间间隔,0 表示关闭 |
配置输入设施
- 这边要看应用程序生产日志配置的是什么设施,推荐使用自定义设施local0-local6
- 但是java log4j2模块即便配置了local3,也无法识别,生产设置走的是默认的
user.notice
- 所以这边以
user.notice
为设施- 禁止
user.*
设施生产的日志写到本地 user.*
设施生产的所有级别日志发送到远端rsyslog server
- 禁止
1 | # Log anything (except mail) of level info or higher. |
3.检查语法
1 | rsyslogd -N1 |
4.重启rsyslogd
1 | systemctl restart rsyslog.service |
一、Rsyslog Server
Ubuntu 16.04
1.安装relp协议模块
1 | # CentOS |
2.配置rsyslog.conf
加载模块
加载输入模块,主要是在tcp20514端口接收日志
1 | $ModLoad imrelp |
参数优化
1 |
|
3.配置/etc/rsyslog.d/50-default.conf
禁止来自设施user.none
的日志写到本地文件。
1 | #*.*;auth,authpriv.none -/var/log/syslog |
4.过滤切割
应用程序原生日志
1 | Aug 14 17:05:59 xxxx xxxx 2019-08-14 17:05:59,386 [LogDataUtil.java:44][INFO]:{"account_info":{"age":"","aid":"yyt_201908226050558812_518","area":"","gamekey":"notSdk","sex":"0","sid":0,"uid":55397},"create_time":1565773559380,"device_info":{"device_model":"","device_type":"","os_info":"","pt":0,"uuid":""},"ip":"220.249.166.153","log_id":"06b8090e-93ee-4478-b0d2-8dc8749e41e2","log_type":"register_log","role_info":{"job":"","nickname":"yyt_201908226050558812_518","role_id":55397,"sex":""}} |
过滤切割/etc/rsyslog.d/gamelog-pxmbd.conf
1 | # $template cocsFormat, "%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg%\n" |
5.重启rsyslogd
1 | # 检查语法 |
三、Client logger命令测试
client
1 | logger -it xxxx -p user.warning 111111111register_log111111111 |
rsyslog server
1 | ls |