使用rsyslog将多个服务的日志合并
一、前言
最近想把多个服务的日志集中到一个日志文件里,选中了 rsyslog
二、过程
我这里有两个日志文件目录分别为
/www/wwwroot/guowang/jar
/www/wwwroot/guowang8183/jar
1、编写配置文件
vim /etc/rsyslog.d/guowang-all.conf
加入如下配置
module( # 开启 rsyslog 的「文件监控」功能,让它能读取普通文本日志
load="imfile" # input file 的缩写,加载文件读取模块
Mode="polling" # 轮询,每隔一小段时间主动去看一下文件有没有新内容
PollingInterval="1" # 这里是每秒一次
)
# 对应服务的 system.log
# guowang
input(
type="imfile"
File="/www/wwwroot/guowang/jar/system.log"
Tag="guowang" # 服务名,为了看清哪条日志来自哪个服务
Facility="local0" # rsyslog 给自定义业务用的
PersistStateInterval="1" # 实时保存读取位置,重启不失效
# readFromLast="on" # 重启后从最后一行开始读,不重复、不丢失,我这里可能是系统问题,不能加这个
)
# guowang8183
input(
type="imfile"
File="/www/wwwroot/guowang8183/jar/system.log"
Tag="guowang8183"
Facility="local1"
PersistStateInterval="1"
# readFromLast="on"
)
# 统一输出
local0.*;local1.* /var/log/guowang-all.log # 没有特殊要求就放到 /var/log 目录下

保存退出
2 、开放权限
给 rsyslog 开放日志目录权限
chmod -R 755 /www/wwwroot/guowang/
chmod -R 755 /www/wwwroot/guowang8183/

给 system.log 读权限
chmod 644 /www/wwwroot/guowang/jar/system.log
chmod 644 /www/wwwroot/guowang8183/jar/system.log

3、重启 rsyslog
停止
systemctl stop rsyslog

启动
systemctl start rsyslog

或者直接使用重启命令
systemctl restart rsyslog

可能会没有生成合并文件,这里手动创建一下
touch /var/log/guowang-all.log

4、按天切割配置(logrotate)
vim /etc/logrotate.d/guowang-all
加入如下配置文件
/var/log/guowang-all.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0644 root root
sharedscripts
postrotate
systemctl restart rsyslog > /dev/null 2>&1 || true
endscript
}
这是带注释的
/var/log/guowang-all.log { # 要切割的文件路径
daily # 每天切割,每天凌晨(默认 3:00~4:00)自动把今天的日志归档
missingok # 日志文件不存在也不报错,如果文件不小心删了,logrotate 不会抛出错误信息,更稳定、不扰民
rotate 7 # 保留最近 7 天
compress # 自动压缩老日志,压缩后体积只有原来的 10%~20%
delaycompress # 延迟一天再压缩,避免正在写入的日志被压缩导致异常,最安全的写法
notifempty # 空日志不切割,今天没日志 → 不生成空文件,干净、不浪费
create 0644 root root # 切割后自动新建日志文件,权限:0644(可读可写,安全),归属:root 用户 + root 组,保证 rsyslog 能继续写入日志
sharedscripts # 所有日志切割完,统一执行一次脚本,配合下面的重启命令使用
postrotate # 切割完日志后,重启一下 rsyslog,让 rsyslog 重新写入新的日志文件,下面三行
systemctl restart rsyslog > /dev/null 2>&1 || true # > /dev/null 2>&1 || true:不输出错误、不抛异常
endscript
}
保存退出,然后重启一下 rsyslog
systemctl restart rsyslog

隔天观察 /var/log 目录

可以看到日志已经切分

1495

被折叠的 条评论
为什么被折叠?



