Centos Syslog Server

Centos Syslog Server

在Unix类操作系统上,rsyslog广泛应用于系统日志。rsyslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。

完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上,能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录,记录到什么地方,是否需要发送到一个接收rsyslog的服务器等。由于rsyslog简单而灵活的特性,rsyslog不再仅限于 Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用rsyslog。

rsyslog是syslog的多线程增强版,现在Fedora、Ubuntu,、rhel6、centos6默认的日志系统都是rsyslog。rsyslog主要用来收集系统产生的各种日志,日志默认放在/var/log/目录下。在客户端/服务器架构的配置下,rsyslog同时扮演了两种角色:

1.作为一个syslog服务器,rsyslog可以收集来自其他设施的日志信息;
2.作为一个syslog客户端,rsyslog可以将其内部的日志信息传输到远程的syslog服务器。

主配置文件/etc/rsyslog.conf配置文件中有很多内容, 但最主要的是指定需要记录哪些服务和需要记录服务什么等级的信息。
格式是:日志设备[连接符号]日志级别 日志处理方式(action)

syslog中的日志设备层级:

level desc
auth 身份验证相关的消息(登录时)
authpriv ssh,ftp等登录信息的验证信息
cron 进程或应用调度相关的消息
daemon 守护进程相关的消息(内部服务器)
kernel 内核相关的消息
mail 内部邮件服务器相关的消息
syslog syslog 守护进程本身相关的消息
mark(syslog) rsyslog服务内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to unix copy, unix主机之间相关的通讯
lpr 打印服务相关的消息
local0 local7: 用户自定义的消息(local7 通常被Cisco 和 Windows 服务器使用)

syslog的日志优先级别:

level desc value
emerg Emergency(紧急) 0
alert Alerts(报警) 1
crit Critical(关键) 2
err Errors(错误) 3
warn Warnings(警告) 4
notice Notification(通知) 5
info Information(消息) 6
debug Debugging(调试) 7

连接符号,其中的xxx表示某一日志级别:

level desc
.xxx 表示小于等于xxx级别的日志信息
.=xxx 表示等于xxx级别的日志信息
.!xxx 表示在xxx之外的等级的日志信息
.* 所有等级的日志信息

日志处理方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1. 记录到普通文件或设备文件:
/var/log/file.log #将日志记录到文件/var/log/file.log
/dev/pts/0 #将日志记录在设备/dev/pts/0

2. 转发到远程的日志服务器
@192.168.0.1 #使用UDP协议转发到192.168.0.1的514(默认)端口
@@192.168.0.1:10514 #使用TCP协议转发到192.168.0.1的10514端口,这是指定非默认端口10514,tcp的默认端口也是514

3. 发送给用户(需要在线才能收到)::
root #发给root用户
root,kadefor,up01 #使用,号分隔多个用户
* #*号表示所有在线用户

4. 忽略,丢弃::
~ # 忽略丢弃日志

5. 执行脚本::
^/tmp/test.sh #^号后跟可执行脚本或程序的绝对路径,这个可以用来触发报警动作。

一个例子,用来将所有的日志信息发送给远程的服务器192.168.186.134:

1
*.*  @192.168.186.134

开启syslog

rsyslog守护进程来自于当前的linux发布版本的预装模块,但是默认并没有启动。为了能够让rsyslog守护进程能够接受外部的消息,需要编辑其配置文件/etc/rsyslog.conf.

1
2
3
4
5
6
7
8
# 将/etc/rsyslog.conf 中的内容放开注释

# 使用udp 协议发送/接收syslog
$ModLoad imudp
$UDPServerRun 514
# 使用tcp 协议发送/接收syslog
$ModLoad imtcp
$InputTCPServerRun 514

为远程消息创建模板,并告知rsyslog守护进程如何记录从其他客户端机器所接受到的消息。

使用文本编辑器来打开 /etc/rsyslog.conf,然后在GLOBAL DIRECTIVE块前追加以下的模板。

1
2
3
4
5
6
7
8
9
# 将所有从远程客户端接受到的消息写入到一个基于远程日志发送机器的主机名以及生成该日志的应用程序名命名的单个文件中。
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *
*.* ?RemoteLogs
# rsyslog守护进程停止对日志消息的进一步处理,并且不要在本地写入,如果没有使用该重定向规则,那么所有的远程消息都会在写入上述描述的日志文件之外同时被写入到本地日志文件,这就意味着日志消息实际上被写了两次。
& ~

#可以使用下面的模式对特定的设备或严重性级别使用新的模板直接来记录日志消息。

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

重启rsyslog守护进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo service rsyslog restart 

# 可以通过netstat命令来验证rsyslog守护进程是否正常工作。

$ sudo netstat -tulpn | grep rsyslog
# 在UDP监听端口下工作的rsyslog守护进程会有类似下面的输出。

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

syslog 客户端

  1. 安装Rsyslog守护进程
  2. 配置Rsyslog守护进程为客户端
1
2
3
4
5
$ vi /etc/rsyslog.conf 
*.* @192.168.1.25:514
# 远程syslog服务器地址和端口(udp协议)
*.* @@192.168.1.25:514
# 远程syslog服务器地址和端口(tcp协议)

非syslog 日志的转发

在机器上安装了一个名为“foobar”的应用程序,它会在/var/log下生成foobar.log日志文件。现在,你想要将它的日志定向到rsyslog服务器,这可以通过像下面这样在rsyslog配置文件中加载imfile模块来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 首先,加载imfile模块,这只需做一次。
module(load="imfile" PollingInterval="5")

# 然后,指定日志文件的路径以便imfile模块可以检测到:
input(type="imfile"
File="/var/log/foobar.log"
Tag="foobar"
Severity="error"
Facility="local7")

#定向local7设备到远程rsyslog服务器
local7.* @192.168.1.25:514

#最后重启rsyslog进程
$sudo service rsyslog restart
-------------本文结束感谢您的阅读-------------
坚持分享,您的支持将鼓励我继续创作!
0%