环境:centos 7
安装
1 | yum install rsyslog |
配置文件
rsyslog的配置文件为/etc/rsyslog.conf和/etc/rsyslog.d/目录内的文件。 rsyslog.conf文件配置了rsyslog守护进程在哪里保存日志信息。
rsyslog.conf配置文件主要包括以下几个部分:
全局配置
配置ryslog守护进程的全局属性,比如主信息队列大小($MainMessageQueueSize),加载外部模块($ModLoad)等等。
规则(选择器+动作)
每个规则行由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志等级,action部分指定对应的操作。
选择器 SELECTORS
selector也由两部分组成,设施和优先级,由点号.
分隔。第一部分为消息源或称为日志设施,第二部分为日志级别。 下面给出一个rsyslog.conf的例子:
1 | # rsyslog v5 configuration file |
日志设施有:
- auth(security), authpriv: 授权和安全相关的消息
- kern: 来自Linux内核的消息
- mail: 由mail子系统产生的消息
- cron: cron守护进程相关的信息
- daemon: 守护进程产生的信息
- news: 网络消息子系统
- lpr: 打印相关的日志信息
- user: 用户进程相关的信息
- local0 to local7: 保留,本地使用
日志级别有(升序):
- debug:包含详细的开发情报的信息,通常只在调试一个程序时使用。
- info:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。
- notice: 不是错误情况,也不需要立即处理。
- warning: 警告信息,不是错误,比如系统磁盘使用了85%等。
- err:错误,不是非常紧急,在一定时间内修复即可。
- crit:重要情况,如硬盘错误,备用连接丢失。
- alert:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。
- emerg:紧急情况,需要立即通知技术人员。
思考下面的例子:
1 | cron.* /var/log/cron |
把所有来自cron守护进程的消息保存到/var/log/cron文件中。 当指定日志级别时,所有等于或大于该日志等级的信息都要被处理。比如在下面的例子中,mail子系统所有warning及以上信息的日志都保存在/var/log/mail.warn文件中。
1 | mail.warn /var/log/mail.warn |
使用=可以指定日志等级,比如我们只想保留info信息,可以使用下面的写法:
1 | mail.=info /var/log/mail.info |
使用!可以排除这类信息,比如:
1 | mail.!info /var/log/mail.info |
动作 ACTION
action是规则描述的一部分,规则用于处理消息。总的来说,消息内容被写到一种日志文件上,但也可以执行其他动作,比如写到数据库表中或转发到其他主机。
模板
模板允许你指定日志信息的格式,可用于生成动态文件名,或在规则中使用。其定义如下所示,其中TEMPLATE_NAME是模板的名字,PROPERTY是rsyslog本身支持的一些属性参数。
1 | $template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION] |
下面给出一个模板定义及使用的例子:
1 | $template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log" |
输出频道
输出频道为用户可能想要的输出类型提供了保护,在规则中使用前要先定义.其定义如下所示,其中NAME指定输出频道的名称,FILENAME指定输出文件,MAXSIZE指定日志文件的大小,单位是bytes, ACTION指定日志文件到达MAX_SIZE时的操作。
1 | $outchannel NAME, FILE_NAME, MAX_SIZE, ACTION |
在规则中使用输出频道按照如下的格式:
1 | FILTER :omfile:$NAME |
下面给出使用输出频道的一个例子:
1 | $outchannel log_rotation, /var/log/test_log.log, 104857600, /home/joe/log_rotation_script |
转发到远程机器
有3种方式转发消息:
- 传统方式的UDP传输,有损耗
- 基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用
- RELP传输,不会丢失信息,但只在rsyslogd 3.15.0及以上版本中可用
写法:
- UDP 在主机名前加”@”
- TCP 在主机名前加”@@”
- RELP 在主机名前加”:omrelp:”
例: . @192.168.0.1 将所有日志信息通过UDP协议发送到192.168.0.1
本地日志管理
SSH日志重定义管理
配置ssh日志重定向到local6载体,默认是AUTH
1 | sed -i 's#^SyslogFacility AUTH#SyslogFacility local6#g' /etc/ssh/sshd_config |
配置rsyslog收集local6载体日志
增加
local6.* /var/log/sshd.log 到/etc/rsyslog.conf
systemctl restart rsyslog
远程日志管理
rsyslog日志管理服务端
需要开启模块
Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
使用模板安装主机名区分日志
1 | template (name="DynFile" type="string" string="/var/log/system-%HOSTNAME%.log") |
rsyslog日志客户端
local6.* @10.10.23.10:514