简介
rsyslogd是linux的一个日志服务。rsyslogd可以接受不同来源的日志消息,对日志加工,然后传送到不同目的地(如本地文件,日志服务器,数据库)。linux很多服务进程都是把日志传送给rsyslogd,/var/log下面的文件基本都是rsyslogd打印的服务日志。
基础
systemctl start rsyslogd #启动rsyslogd
systemctl status rsyslogd #查看rsyslogd状态,服务配置文件/usr/lib/systemd/system/rsyslogd.service
systemctl stop rsyslogd #停止rsyslogd
systemctl enable rsyslogd #设置rsyslogd开机启动
配置文件
默认配置文件/etc/rsyslog.conf
构件 | 功能 |
---|---|
module | rsyslogd内置一些功能模块,如果需要使用模块,就在配置文件中使用module(load='modulename' parameters)进行配置 |
template | 日志记录的格式模板,类似nginx配置中的log_format,httpd配置中的LogFormat;通常服务进程的日志信息都是单纯的文本,但是rsyslogd记录日志中一般会包含时间,日志产生的进程名称,具体日志内容 |
rule | 规定不同来源的日志的目的地 |
实际配置解释
module(load="imuxsock") # 加载模块imuxsock,模块的功能可以参考man rsyslog.conf
module(load="imklog" permitnonkernelfacility="on") #perminonkernelfacility是模块imklog的
#参数,这里设置参数值为on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #设置默认的日志格式模板
#为TraditionalFileFormat,TraditionalFileFormat为内置的格式模板
global(WorkDirectory="/var/spool/rsyslog") #设置工作路径为/var/spool/rsyslog
include(file="/etc/rsyslog.d/*.conf" mode="optional") #加载/etc/rsyslog.d/*.conf
kern.* /dev/console #rule,规定来自kern的所有级别(*代表所以级别)日志都会打
#印到/dev/console;关于日志来源和日志级别参考man 3 syslog
*.emerg :omurmsg:* #所有来源的大于等于emerg级别的日志打印到所有登陆用户的控制台
*.info;authpriv.none /var/log/messages #所有来源的info级别日志或者来自authpriv的大于
#等于none级别的日志打印到messages,关于日志来源和级别的信息可以查看
#man 3 syslog
实践
为了将rsyslog的日志集中到一个服务器上面,方便检查和处理,可以配置一个rsyslogd作为服务器接受其他服务器发来的rsyslogd日志。
服务端(192.168.12.3)rsyslogd添加配置:
#配置rsyslogd监听tcp514端口
module(load='imtcp' MaxSessions="10000")
input(type='imtcp' port='514')
#配置日志中带有客户端rsyslogd的ip(内置变量fromhost-ip代表了日志来源的服务器ip)
$template rFormat,"%timestamp% %fromhost-ip% %syslogfacility-text% %msg%\n"
$ActionFileDefaultTemplate rFormat #设置rFormat为默认的日志格式
#设置日志按照服务器ip分路径存放,文件夹%fromhost-ip%不需要提前建
$template RemoteLogs,"/var/log/rsyslog/%fromhost-ip%/%syslogfacility-text%_%$now%.log"
#fromhost-up不等于“127.0.0.1”的日志写到RemteLogs指定的路径
:fromhost-ip,!isequal,"127.0.0.1" ?RemoteLogs
客户端rsyslogd配置
添加如下配置
#所有来源的日志都发送到服务端192.168.12.3
*.* @@192.168.12.3
重启服务端和客户端rsyslogd
systemctl stop rsyslogd && systemctl start rsyslogd
测试
#客户端执行
logger test
#查看rsyslogd上面是否自动生成日志文件和产生日志
参考
- rsyslogd官方文档https://www.rsyslog.com/doc/v8-stable/index.html
- man rsyslogd.conf
- man 3 syslog