rsyslog介绍

官方原文:RSYSLOG is the rocket-fast system for log processing.

rsyslog可以理解为是syslog的升级版。

主要的特点有:

  • Multi-threading
  • TCP, SSL, TLS, RELP
  • MySQL, PostgreSQL, Oracle and more
  • Filter any part of syslog message
  • Fully configurable output format
  • Suitable for enterprise-class relay chains

它的主要作用就是用来处理日志,是很多Linux发行版默认的系统日志系统。能够接收各种来源的日志,并做一定的处理,最终输出到目标位置(文件、es等);

rsyslog支持的日志源(左侧)和目标位置(右侧)的示意图如下(来自官方):

rsyslog的启动配置

先通过systemd查看服务状态,如下图:


可见启动命令是:/usr/sbin/rsyslogd -n -iNONE

启动配置文件位置是:/lib/systemd/system/rsyslog.service

[Unit]
Description=System Logging Service
Requires=syslog.socket
Documentation=man:rsyslogd(8)
Documentation=https://www.rsyslog.com/doc/

[Service]
Type=notify
ExecStart=/usr/sbin/rsyslogd -n -iNONE
StandardOutput=null
Restart=on-failure

# Increase the default a bit in order to allow many simultaneous
# files to be monitored, we might need a lot of fds.
LimitNOFILE=16384

[Install]
WantedBy=multi-user.target
Alias=syslog.service

根据配置文件可以看到:重启策略是失败重启。同时还设置了alias别名为syslog.service,这是为了保持兼容。

rsyslog配置文件说明

主配置文件的位置是:/etc/rsyslog.conf,内容如下:

# /etc/rsyslog.conf configuration file for rsyslog
#
# For more information install rsyslog-doc and see
# /usr/share/doc/rsyslog-doc/html/configuration/index.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf


#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")

###########################
#### GLOBAL DIRECTIVES ####
###########################

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Filter duplicated messages
$RepeatedMsgReduction on

#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

由于rsyslog是模块化设计,因此可以通过配置文件中的#### MODULES ####部分来配置各模块的启用和具体配置。如imuxsock模块代表本地socket日志。imtcp和imudp分别代表tcp和udp协议的接收处理模块。

而#### GLOBAL DIRECTIVES ####部分则是定义了一些全局的配置。如配置日志文件的默认权限、workDirectory位置、其它配置文件的位置等。

rsyslog的日志规则配置

根据上面主配置文件可以知道rules定义在/etc/rsyslog.d/50-default.conf中。

首先说明rules的格式是: facility.priority Target

其中facility直译为设施设备,也即是日志源的意思。具体有哪些是提前约定好的,在后文会列出来。

priority:代表日志级别,如:emerg、alert、crit、err、warning、notice、info、debug;

Target:代表目标位置;

那么根据以上格式,可以看到含义也就很清楚了:通过facility.priority过滤选择出匹配的日志,然后输出到Target即可;

下面的规则文件是我本机(Ubuntu 20.04.1 LTS)的默认规则文件:

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none		-/var/log/syslog
#cron.*				/var/log/cron.log
#daemon.*			-/var/log/daemon.log
kern.*				-/var/log/kern.log
#lpr.*				-/var/log/lpr.log
mail.*				-/var/log/mail.log
#user.*				-/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info			-/var/log/mail.info
#mail.warn			-/var/log/mail.warn
mail.err			/var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#	auth,authpriv.none;\
#	news.none;mail.none	-/var/log/debug

#*.=info;*.=notice;*.=warn;\
#	auth,authpriv.none;\
#	cron,daemon.none;\
#	mail,news.none		-/var/log/messages

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#	news.=crit;news.=err;news.=notice;\
#	*.=debug;*.=info;\
#	*.=notice;*.=warn	/dev/tty8

根据以上规则文件我们知道:mail功能的所有日志都会写入到/var/log/mail.log,且mail功能的err级别日志会写入到/var/log/mail.err。

下面做一个简单的验证:执行以下2条命令,分别生成err和info日志:

logger -ip mail.err  test-error-msg
logger -ip mail.info test-info-msg

可以看到mail.log文件记录所有(2条)日志,而mail.err文件只记录了err级别的日志。

以上介绍了rsyslog的作用和基础配置,当然rsyslog还支持的更多特性和功能,本文没有一一展开。
如果大家有需要可以在理解基本原理的基础上,进一步配置所需的功能。

参考资料:

附:预定义的facility列表:

auth
authpriv   for security information of a sensitive nature
cron
daemon
ftp
kern       cannot be generated from userspace process, automatically converted to user
lpr
mail
news
syslog
user
uucp
local0

to
local7
security   deprecated synonym for auth