rsyslog是Linux系统日志管理的核心服务,通过配置文件(/etc/rsyslog.conf和/etc/rsyslog.d/)定义模块、全局指令和日志规则,结合systemctl命令实现服务控制。日志规则由facility.priority选择器和动作(如写文件、发远程)组成,支持本地分类存储与远程集中日志(UDP/TCP),并可通过logrotate实现日志轮转,避免磁盘耗尽,确保系统可观测性与稳定性。

Linux系统日志服务rsyslog的管理,核心在于理解其配置文件结构、日志规则的定义,以及如何通过
systemctl
管理rsyslog主要围绕以下几个方面展开:配置文件编辑、服务状态控制、日志规则定义与调试。
1. 配置文件的核心理解与编辑 rsyslog的主要配置文件是
/etc/rsyslog.conf
/etc/rsyslog.d/
.conf
一个典型的rsyslog配置文件包含几个部分:
$ModLoad imuxsock
$ModLoad imklog
imudp
imtcp
$ActionFileDefaultTemplate
$MainMsgQueueSize
2. 服务管理 rsyslog作为一个systemd服务,其管理非常直观:
sudo systemctl status rsyslog
sudo systemctl start rsyslog
sudo systemctl stop rsyslog
sudo systemctl restart rsyslog
sudo systemctl reload rsyslog
sudo systemctl enable rsyslog
sudo systemctl disable rsyslog
3. 定义日志规则 日志规则的格式通常是
SELECTOR ACTION
facility.priority
auth
cron
daemon
kern
syslog
user
local0
local7
debug
info
notice
warning
err
crit
alert
emerg
none
*
=
!
;
/var/log/syslog
@remote_host:port
@@remote_host:port
user1,user2
|/path/to/script
例如,将所有邮件相关的警告及以上级别的日志写入
/var/log/mail.warn
mail.warning /var/log/mail.warn
将所有非认证相关的info级别日志发送到远程服务器
logserver.example.com
*.info;authpriv.none @logserver.example.com:514
4. 调试与测试 在应用新的配置之前,使用
sudo rsyslogd -N1
-N
1
初次接触rsyslog的配置文件,尤其是
/etc/rsyslog.conf
它的核心结构可以概括为三个主要部分:
模块加载($ModLoad
$ModLoad imuxsock
$ModLoad imklog
imudp
imtcp
全局指令($
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
日志规则(SELECTOR ACTION
SELECTOR
facility
priority
.
facility
auth
cron
local0
local7
priority
debug
emerg
warning
err
none
*
=
!
mail.info
kern.*
*.err
authpriv.=info
cron.!warning
ACTION
/var/log/messages
@remote_host:port
@@remote_host:port
我个人在配置rsyslog时,更倾向于在
/etc/rsyslog.d/
.conf
20-nginx.conf
30-mysql.conf
在现代的分布式系统架构中,将日志集中到一个中央服务器进行存储、分析和监控,几乎是标配。rsyslog在这方面表现得非常出色,它既可以作为日志客户端发送日志,也可以作为日志服务器接收日志。我发现,一旦你掌握了远程日志的配置,整个系统的可观测性会大大提升,排查问题也变得高效得多。
1. 作为客户端发送日志
让rsyslog将日志发送到远程服务器,配置起来相对简单,主要是在客户端的配置文件中添加一条或多条规则。
UDP协议(非可靠传输):
*.* @remote_log_server_ip:514
@
TCP协议(可靠传输):
*.* @@remote_log_server_ip:514
@@
高级特性:队列与磁盘辅助队列 (Disk-Assisted Queues - DAQ) 当远程服务器不可用或网络拥堵时,rsyslog可以将日志缓存起来,等网络恢复后再发送。这通过配置队列来实现。
$ActionQueueFileName rsyslog_fwd_queue # 定义队列文件名 $ActionQueueMaxDiskSpace 1g # 最大磁盘空间1GB $ActionQueueSaveOnShutdown on # 关闭时保存队列 $ActionQueueType LinkedList # 队列类型 $ActionResumeRetryCount -1 # 永远重试 *.* @@remote_log_server_ip:514
这个配置段通常放在发送规则之前。DAQ是rsyslog一个非常强大的功能,它能有效防止在网络或远程服务器故障时日志丢失。我曾经遇到过远程服务器短暂维护,幸亏配置了DAQ,否则那段时间的日志就全没了,后果不堪设想。
2. 作为服务器接收日志
要让rsyslog服务器接收来自其他主机的日志,需要做两件事:加载相应的输入模块和定义接收规则。
冠龙科技手机企业网站管理系统是基于ASP+ACCESS技术开发的电子商务平台,属于全自动化、全智能的在线方式管理、维护、更新的网站管理系统。此系统直接上传到你的网站空间就可以使用了。完全后台操作。后台路径:/admin后台用户及密码均为 admin更新日志:1、增加在线客服系统支持网页在线客服及QQ\旺旺等2、修改产品展示的排序错误3、增加了后台修改前台图片的功能4、网站LOGO及版权信息后台自定
0
加载输入模块: 在服务器的
/etc/rsyslog.conf
/etc/rsyslog.d/
imudp
imtcp
module(load="imudp") # 启用UDP接收 input(type="imudp" port="514") module(load="imtcp") # 启用TCP接收 input(type="imtcp" port="514")
定义接收规则: 接收到的日志通常需要根据来源主机或应用程序进行分类存储。我们可以使用模板来动态生成文件名。
# 定义一个模板,根据远程主机的名称和程序名来命名日志文件
template(name="RemoteHostLog" type="string"
string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")
# 定义一个模板,根据远程主机的IP地址和程序名来命名日志文件
# template(name="RemoteIPLog" type="string"
# string="/var/log/remote/%FROMHOST-IP%/%PROGRAMNAME%.log")
# 将所有远程日志应用到这个模板
*.* ?RemoteHostLog这里的
%HOSTNAME%
%PROGRAMNAME%
3. 挑战与注意事项
firewalld
ufw
logrotate
我个人在部署远程日志时,总是会先从一个小的客户端测试开始,确保日志能够正确到达服务器并按预期存储。然后逐步扩展到更多的客户端。这个过程需要细心和耐心,但一旦建立起来,它带来的便利是巨大的。
日志文件是服务器运行状态的宝贵记录,但它们也会像雪球一样越滚越大,最终吞噬掉所有可用的磁盘空间。我见过太多次因为
/var/log
logrotate
1. logrotate与rsyslog的关系
理解
logrotate
rsyslog
logrotate
syslog
syslog.1
syslog.1
syslog.1.gz
syslog.N.gz
最关键的一步是通知rsyslog:“嘿,我把你的日志文件移走了,请开始写入一个新的文件!” 否则,rsyslog可能仍然会向旧的(已被重命名或压缩的)文件句柄写入日志,导致新文件是空的,或者日志丢失。
2. logrotate
logrotate
/etc/logrotate.conf
/etc/logrotate.d/
/etc/logrotate.conf
/etc/logrotate.d/
一个典型的
logrotate
/var/log/syslog
/var/log/mail.log
{
rotate 7 # 保留7个旧的日志文件
daily # 每天轮转一次
missingok # 如果日志文件不存在,不报错
notifempty # 如果日志文件为空,不进行轮转
delaycompress # 延迟压缩,下次轮转时才压缩上次的日志文件
compress # 压缩旧的日志文件
postrotate # 轮转后执行的命令
/usr/lib/rsyslog/rsyslog-rotate # 通知rsyslog重新打开日志文件
# 或者更直接的方式:
# systemctl reload rsyslog > /dev/null 2>&1 || true
endscript
}关键配置项解释:
rotate N
rotate 7
daily
weekly
monthly
yearly
size SIZE
size 100M
compress
delaycompress
logrotate
create MODE OWNER GROUP
postrotate
endscript
logrotate
postrotate
endscript
SIGHUP
kill -HUP $(cat /var/run/rsyslogd.pid)
systemctl reload rsyslog
3. 调试与维护
logrotate
sudo logrotate -f /etc/logrotate.conf
-f
/var/log
/var/log
logrotate
我个人在配置
logrotate
postrotate
logrotate
以上就是Linux如何管理系统日志服务rsyslog的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号