Linux中使用rsyslog配置syslog服务器

对于包括Linux系统,Windows服务器,路由器,交换机及其它主机能在网络上发送日志信息的这类设备,日志服务器都可以用作于它们在网络上的重要日志监控点。通过日志服务器,你能从不同的主机及设备过滤和合并日志信息于一个单一的位置,所以你能很容易的查看及存档日志信息。

在大多数据的Linux发行版中,rsyslog是一个预先安装的标准日志后台进程。在 客户端/服务端 的系统配置中,rsyslog 能扮演两个角色;作为一个日志服务器能从其它设备收集日志信息,而作为一个日志客户端,rsyslog发送自己内部日志信息到远程日志服务器。

系统日志基本标准

当系统日志机制收集日志时,三个重要点必须被考虑进来:

  Facility level:监视的进程类型是什么

  Severity (priority)level:收集日志信息的类型是什么

  Destination:在什么地方记录日志信息,或在发送日志信息到什么地方

Facility levels定义为内部系统进程归类方法。在linux中一些公共的标准功能是:

 auth: 关联认证的信息

 cron: 关联程序或进程的定时任务的信息

 daemon:关联系统内部后台进程的信息

 kernel:关联系统内部内核的信息

 mail:关联系统内部邮件服务信息

 syslog:关联系后台日志进程自己的信息

 lpr:关联打印服务的信息

 local0-local7:关联用户定义的信息(local7 通常被Cisco和windows服务所使用)

Severity(priority)levels 通过使用标准简写和级别数字来定义和标准化。这些级别有:

 emerg:Emergency(紧急)--0 (对应数字0)

 alert:Alerts(警报)--1 (对应数字1)

 crit:Critical(危险)--2 (对应数字2)

 err:Errors(错误)--3(对应数字3)

 warn:Warnings(警告)--4(对应数字4)

 notice:Notification(通知)--5(对应数字5)

 info:Information(信息)--6(对应数字6)

 debug:Debugging(调试)--7(对应数字7)

Destination 说明日志客户端需要做三件事情:(1)在本地文件中保存日志,(2)通过tcp/udp协议向日志服务器发送日志,或(3)向标准的输出设备输出信息如终端

配置linux上的Rsyslog

1.rsyslog一般是预先就安装于linux系统的发行版上的,rsyslog后台进程默认不能接受外部信息的,但可以通过配置它的配置文件/etc/rsyslog.conf来配置。

打开/etc/rsyslog.conf文件,查询和去掉它们行首的#字符来得到去注释化后的下两行

$ModLoad imudp
$UDPServerRun 514

这个是允许rsyslog后台进程在udp协议的514端口上接收日志信息。UDP比TCP快,但是其是不可靠的数据传输协议。如果你想要可靠的传输,那你要使用没有注释的下面两行

$ModLoad imtcp
$InputTCPServerRun 514

注意:rsyslog后台进程是可以同时监听TCP/UDP连接的。

2.接下来我们需要创建一个模板,告诉rsyslog后台进程怎样记录从其它客户端接收的信息。打开/etc/rsyslog.conf文件,在GLOBAL DIRECTIVES内容块的前面追加如下模板

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
& ~

$template RemoteLogs指令(“RemoteLogs” 可以为其它的描述的名字)迫使rsyslog后台进程隔开本地/var/log/下文件去写日志信息。而日志文件名则依据发送远程日志的机器名及应用程序名来定义。第二行(*.*  ?RemoteLogs)暗含运行用模板RemoteLogs于所有的接收日志。

& ~则告诉rsyslog后台进程停止进一步的去处理日志信息,即不对它们进行本地化写入,它是代表一个重定向规则。如果没有这一行,则意味着接收到的日志会写入两次,一次如前两行写的方式写,第二次则以本地日志记录的方式写入。运行这个规则的另一个结论则是日志服务器自己的日志信息只会写入到依照机器主机名命名的文件中。

如果你想,你也可以通过特别功能或服务器级别去重定向日志信息到如下使用的新的模板中。

[facility-level].[severity-level]    ?RemoteLogs

例如:

重定向所有的优先级别的认证信息到RemoteLogs的模板中:

authpriv.*  ?RemoteLogs

重定向除邮件,认证和定时间任务的其它所有系统进程生成的信息消息到RemoteLogs模板中:

*.info,mail.none,authpriv.none,cron.none    ?RemoteLogs

如果我们想把所有从远程接收到的信息写入到依照ip地址命名的单个文件名中,你可以使用如下的模板。我们为这个新的模板起名为"IpTemplate"。

$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
*.*  ?IpTemplate
& ~

接下来就是重启rsyslog。

在Debian,Ubuntu或CentOS/RHEL 6下的方式如下:

$ sudo service rsyslog restart

在Fedora 或 CentOS/RHEL 7下的方式如下:

$ sudo systemctl restart rsyslog

我们可以能过netstat命令来验证rsyslog后台进程是否运行。

$ sudo netstat -tulpn | grep rsyslog

其输出应该像下面这种情况,rsyslog后台进程在UDP的端口上进行监听。

udp    0 0    0.0.0.0:514    0.0.0.0:*      551/rsyslogd
udp6    0 0    :::514        :::*          551/rsyslogd

如果rsyslog后台进程设置于监听TCP的连接,则输出应该是像下面的情况。

tcp    0 0    0.0.0.0:514  0.0.0.0:*    LISTEN    1891/rsyslogd
tcp6    0 0    :::514        :::*          LISTEN    1891/rsyslogd

发送windows日志给远程Rsyslog日志服务器

发送一个windows基于客户端的日志信息给我们的Rsyslog日志服务器,我们需要使用一个Windows的日志代理。而在windows上运行的日志代理有很多,我们可以选择Datagram SyslogAgent,这个是一个免费的程序。

在我们下载及安装后,我们需要配置其为一个运行服务。指定发送数据协议及接收数据的远程rsyslog日志服务器的IP地址和端口,以及像如下的要发送的日志事件类型。

Linux中使用rsyslog配置syslog服务器

在我们建立所有的配置后,我们就可以开启服务和通过tail -f命令来观察在rsyslog日志服务器上的日志文件。

Rsyslog 的详细介绍:请点这里
Rsyslog 的下载地址:请点这里

相关推荐