Rsyslog配置

2019-08-06

环境: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# rsyslog v5 configuration file
...
...
# Include all config files in /etc/rsyslog.d/
IncludeConfig /etc/rsyslog.d/*.conf

#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* -/var/log/maillog


# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg *

# Save news errors of level crit and higher in a special file.
uucp, news.crit /var/log/spooler

# Save boot messages als o to boot.log
local7.* /var/log/boot.log
...
...

日志设施有:

  • 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
2
3
$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"

*.* ?DynamicFile

输出频道

输出频道为用户可能想要的输出类型提供了保护,在规则中使用前要先定义.其定义如下所示,其中NAME指定输出频道的名称,FILENAME指定输出文件,MAXSIZE指定日志文件的大小,单位是bytes, ACTION指定日志文件到达MAX_SIZE时的操作。

1
$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION

在规则中使用输出频道按照如下的格式:

1
FILTER :omfile:$NAME

下面给出使用输出频道的一个例子:

1
2
3
$outchannel log_rotation, /var/log/test_log.log, 104857600, /home/joe/log_rotation_script

*.* :omfile:$log_rotation

转发到远程机器

有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
2
sed  -i 's#^SyslogFacility AUTH#SyslogFacility local6#g' /etc/ssh/sshd_config
systemctl restart sshd

配置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
2
template (name="DynFile" type="string" string="/var/log/system-%HOSTNAME%.log")
*.* ?DynFile

rsyslog日志客户端

local6.* @10.10.23.10:514

日志轮询