在 Linux 上,日志文件包含了系统功能的信息,系统管理员经常使用日志来确认机器上的问题所在。日志可以帮助管理员还原在过去的时间中在系统中发生的事件。一般情况下,Linux 中所有的日志文件都保存在 /var/log 目录下。在这个目录中,有保存着各种信息的几种类型的日志文件。比如,记录系统事件的日志文件、记录安全相关信息的日志文件、内核专用的日志文件、用户或者 cron 作业使用的日志文件。日志文件的主要作用是系统调试。Linux 中的大部分的日志文件都由 rsyslogd 服务来管理。在最新的 Linux 发行版中,日志文件也可能是由 journald 系统服务来管理和控制的。journald 服务是 systemd 初始化程序的一部分。journald 以二进制的格式存储日志,以易失性的方式写入到内存和 /run/log/journal/ 中的环状缓冲区中,但是,journald 也可以配置为永久存储到 syslog 中。
在 Linux 中,可以配置运行一个 Rsyslog 服务器来集中式管理日志,在流行的服务端—客户端模式中,通过 TCP 或者 UDP 传输协议基于网络来发送日志信息,或者从网络设备、服务器、路由器、交换机、以及其它系统或嵌入式设备中接受生成的日志。
Rsyslog 守护程序可以被同时配置为以客户端或者服务端方式运行。配置作为服务器时,Rsyslog 将缺省监听 TCP 和 UDP 的 514 端口,来收集远程系统基于网络发送的日志信息。配置为客户端运行时,Rsyslog 将通过相同的 TCP 或 UDP 端口基于网络来发送内部日志信息。
Rsyslog 可以根据选定的属性和动作来过滤 syslog 信息。Rsyslog 拥有的过滤器如下:
设备或者优先级过滤器
基于特性的过滤器
基于表达式的过滤器
设备过滤器代表了生成日志的 Linux 内部子系统。它们目前的分类如下:
auth/authpriv = 由验证进程产生的信息
cron = cron 任务相关的日志
daemon = 正在运行的系统服务相关的信息
kernel = Linux 内核信息
mail = 邮件服务器信息
syslog = syslog 或者其它守护程序(DHCP 服务器发送的日志在这里)相关的信息
lpr = 打印机或者打印服务器信息
local0 ~ local7 = 管理员控制下的自定义信息
优先级或者严重程度级别分配如下所述的一个关键字或者一个数字。
emerg = 紧急 - 0
alert = 警报 - 1
err = 错误 - 3
warn = 警告 - 4
notice = 提示 - 5
info = 信息 - 6
debug = 调试 - 7 (最高级别)
此外也有一些 Rsyslog 专用的关键字,比如星号(*)可以用来定义所有的设备和优先级,none 关键字更具体地表示没有优先级,等号(=)表示仅那个优先级,感叹号(!)表示取消这个优先级。
Rsyslog 的动作部分由声明的目的地来表示。日志信息的目的地可以是:存储在文件系统中的一个文件、 /var/log/ 目录下的一个文件、通过命名管道或者 FIFO 作为输入的另一个本地进程。日志信息也可以直达用户,或者丢弃到一个“黑洞”(/dev/null)中、或者发送到标准输出、或者通过一个 TCP/UDP 协议发送到一个远程 syslog 服务器。日志信息也可以保存在一个数据库中,比如 MySQL 或者 PostgreSQL。
配置 Rsyslog 为服务器在大多数 Linux 发行版中 Rsyslog 守护程序是自动安装的。如果你的系统中没有安装 Rsyslog,你可以根据你的系统发行版执行如下之一的命令去安装这个服务。运行这个命令必须有 root 权限。
在基于 Debian 的发行版中:
sudoapt-get install rsyslog
在基于 RHEL 的发行版中,比如像 CentOS:
sudoyum install rsyslog
验证 Rsyslog 守护进程是否在你的系统中运行,根据发行版不同,可以选择运行下列的命令:
在新的使用 systemd 的 Linux 发行版中:
systemctl status rsyslog.service
在老的使用 init 的 Linux 发行版中:
service rsyslog status
或
/etc/init.d/rsyslog status
启动 rsyslog 守护进程运行如下的命令。
在使用 init 的老的 Linux 版本:
service rsyslog start
或
/etc/init.d/rsyslog start
在最新的 Linux 发行版:
systemctl start rsyslog.service
安装一个 rsyslog 程序运行为服务器模式,可以编辑主要的配置文件 /etc/rsyslog.conf 。可以使用下列所示的命令去改变它。
sudovi/etc/rsyslog.conf
为了允许在 UDP 的 514 端口上接收日志信息,找到并删除下列行前面的井号(#)以取消注释。缺省情况下,UDP 端口用于 syslog 去接收信息。
$ModLoad imudp
$UDPServerRun 514