syslog/rsyslog的使用

Posted 门前大树下,路过一群鸭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了syslog/rsyslog的使用相关的知识,希望对你有一定的参考价值。

syslogd是Linux下的一个记录日志文件服务。从结构来说,可以理解为这个服务下面有一系列的子服务,例如mail、auth、cron、kern等等,这些子服务对外提供日志记录的功能,而当其它的程序或服务需要记录日志的时候,就可以直接调用这些子服务将日志记录到设定的地方。而配置这整个守护进程以及其子服务的地方就是/etc/syslog.conf这个文件。

 说明

而目前不少的Linux发行版已经用rsyslogd将syslogd代替了。rsyslogd是syslogd的升级版,其配置语法与syslogd的配置文件一致。
需要说明的是,在更老的版本中,syslogd作为服务端的配置是在/etc/sysconfig/syslog.conf配置文件中的,而现在很多的发行版采用了rsyslog之后就没有这个配置文件了。甚至在ubuntu中本身就不存在/etc/sysconfig/这个文件夹,这跟红帽系的发行版就不一样。而在rsyslog的配置文件中,也有少许不同:
#  ubuntu下的写法
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

# centos下的写法
# udp协议 
$ModLoad imudp 
$UDPServerRun 514 
# tcp协议 
$ModLoad imtcp 
$InputTCPServerRun 514
上面的两种写法作用都是一样的。

 配置文件语法

基础的配置语法可以参照《鸟哥的Linux私房菜:基础学习篇》第19章的内容。下面是将rsyslog配置成客户端/服务器这种结构。
不同的发行版的配置形式有所不同,下面仅以ubuntu16.04LTS版为例说明。
 

配置

服务器端

以ubuntu作为日志系统的服务器,需要进行一下简单的配置:

1.  在/etc/rsyslog.conf配置文件以下的语句去掉注释:

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
2.  # 定义模板(可选),如果没有模板就跟本机的日志文件混在一起
$template templatename ,  ‘/var/log/%HOSTNAME%/%PROGRAMNAME%.log‘ *
# 使用日志模板写入日志
*.*    ?templatename
&~    

"& ~"表示了一个重定向规则,被用来告知rsyslog守护进程停止对日志消息的进一步处理,并且不要在本地写入。如果没有使用该重定向规则,那么所有的远程消息都会在写入上述描述的日志文件之外同时被写入到本地日志文件,这就意味着日志消息实际上被写了两次。使用该规则的另外一个结果就是syslog服务器本身的日志消息只会被以该机器主机名命名的专有文件中。

客户端

在客户端方面,只要将对应的子服务的目标储存文件写成远程的ip:port 即可,例如:
 
# mail  @指明用udp协议传输
mail.*     @192.168.150.138:514
 
# auth  @@指明用udp协议传输
auth.*     @@192.168.150.138:514
 
# 更常见的是全部日志文件都指向远程主机

*.*     @192.168.150.138:514

 

3. 修改了配置文件之后,无论是客户端还是服务器端,都要重启rsyslogd服务

sudo service rsyslog restart

 

以上是关于syslog/rsyslog的使用的主要内容,如果未能解决你的问题,请参考以下文章

利用rsyslog+mysql+loganalyzer部署日志服务器

sudo配合syslog日志审计记录用户操作

日志审计策略配置audit

Rsyslog-legacy(旧版本语法)配置说明及举例

RHEL6-日志管理1-rsyslog日志类型与级别

由一个简单需求到Linux环境下的syslogunix domain socket