为了使系统管理员识别或解决CentOS 7或RHEL 7服务器系统上的问题,它必须知道并查看在特定时间段内发生在系统中的日志文件中存在的系统中的事件/ var / log目录。
Linux机器上的系统日志服务器可以通过网络执行中央监控点,其中生成日志的所有服务器,网络设备,路由器,交换机以及大部分内部服务无论是与特定内部问题相关,还是仅提供信息性消息都可以发送其日志。
在CentOS / RHEL 7系统上, Rsyslog守护程序是预先安装的主要日志服务器,其次是Systemd Journal Daemon ( journald )。
Rsyslog服务器在构建中作为客户端/服务器架构服务,并可同时实现两种角色。 它可以作为服务器运行,并收集网络中其他设备传输的所有日志,也可以通过发送记录到远程端点syslog服务器的所有内部系统事件作为客户端运行。
当rsyslog被配置为客户端时,日志可以本地存储在本地文件系统上的文件中,或者可以远程发送,而不是将它们写入存储在机器上的文件或在本地写入事件日志文件,并将它们发送到远程syslog服务器同一时间。
Syslog服务器使用以下方案来操作任何日志消息:
type (facility).priority (severity) destination(where to send the log)
A. 设施或类型数据由生成消息的内部系统进程表示。 在生成日志的Linux内部进程(设施)中,标准化如下:
- auth =认证过程(登录)生成的消息。
- cron =由计划进程生成的消息(crontab)。
- 守护进程 =由守护进程(内部服务)生成的消息。
- kernel =由Linux内核本身生成的消息。
- 邮件 =邮件服务器生成的邮件。
- syslog = rsyslog守护程序本身生成的消息。
- lpr =由本地打印机或打印服务器生成的消息。
- local0 - local7 =由管理员定义的自定义消息(local7通常分配给Cisco或Windows)。
B. 优先级(严重性)水平也是标准化的。 每个优先级被分配有如下所述的标准缩写和数字。 第七个优先事项是更高的水平。
- 出现 =紧急 - 0
- alert =警报 - 1
- err =错误 - 3
- 警告 =警告 - 4
- 通知 =通知 - 5
- info =信息 - 6
- debug =调试 - 7
特殊的Rsyslog关键词:
- * =所有设施或优先事项
- none =设施没有给定优先级例如: mail.none
C. syslog模式的第三部分由目标指令表示。 Rsyslog守护进程可以将日志消息发送到本地文件系统上的文件中(大部分在/ var / log /目录中的文件中),或者被管道传输到另一个本地进程或发送到本地用户控制台(到stdout) ,或者通过TCP / UDP协议将消息发送到远程syslog服务器,甚至将消息丢弃到/ dev / null 。
为了将CentOS / RHEL 7配置为中央日志服务器,首先我们需要检查并确保记录所有日志文件的/ var分区足够大(最少几GB),以便能够存储所有的将由其他设备发送的日志文件。 使用单独的驱动器(LVM,RAID)安装/ var / log /目录是一个很好的决定。
要求
如何在CentOS / RHEL 7服务器中配置Rsyslog
1.默认情况下, Rsyslog服务自动安装,应在CentOS / RHEL 7中运行。 为了检查系统中是否启动守护程序,请使用root权限发出以下命令。
# systemctl status rsyslog.service
检查Rsyslog服务
如果服务默认情况下不运行,请执行以下命令启动rsyslog守护进程。
# systemctl status rsyslog.service
2.如果您打算用作集中式日志服务器的系统上未安装rsyslog软件包,请执行以下命令来安装rsyslog软件包。
# yum install rsyslog
3.为了将rsyslog守护程序配置为集中式日志服务器,我们需要在系统上执行第一步,因此可以接收外部客户端的日志消息,是使用自己喜欢的文本编辑器打开和编辑主配置文件从/etc/rsyslog.conf ,如下面的摘录中所示。
# vi /etc/rsyslog.conf
在rsyslog主配置文件中,搜索和取消注释以下几行(删除行开头的标签#
号),以便通过514端口向Rsyslog服务器提供UDP传输接收。 UDP是Rsyslog用于日志传输的标准协议。
$ModLoad imudp $UDPServerRun 514
配置Rsyslog服务器
UDP协议没有TCP开销,这比TCP协议传输数据更快。 另一方面,UDP协议不能确保传输数据的可靠性。
但是,如果您需要使用TCP协议进行日志接收,则必须从/etc/rsyslog.conf文件中搜索并取消注释以下几行,以便配置Rsyslog守护程序来绑定和监听514端口上的TCP套接字。 用于接收的TCP和UDP监听套接字可以在Rsyslog服务器上同时配置。
$ModLoad imtcp $InputTCPServerRun 514
5.在下一步,不要关闭文件,创建一个新的模板,用于接收远程消息。 此模板将指示本地Rsyslog服务器在哪里保存由syslog网络客户端发送的接收到的消息。 必须在GLOBAL DIRECTIVES块开始之前添加模板,如下面的摘录所示。
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" . ?RemoteLogs & ~
创建Rsyslog模板
上述$模板RemoteLogs指令指示Rsyslog守护程序根据客户端计算机名称和基于模板配置中定义的属性生成消息的远程客户端工具(应用程序),将收到的所有日志消息收集并写入不同的文件: %HOSTNAME%和%PROGRAMNAME% 。
所有这些日志文件将被写入本地文件系统到一个以客户机主机名命名并存储在/ var / log /目录中的专用文件。
&〜重定向规则指示本地Rsyslog服务器进一步停止处理收到的日志消息,并丢弃消息(不将其写入内部日志文件)。
RemoteLogs名称是给此模板指令赋予的任意名称。 您可以使用任何可以找到最适合您的模板的名称。
为了在远程客户端的IP地址之后的单个日志文件中写入所有接收的消息,而不过滤生成消息的工具,请使用下面的摘录。
$template FromIp,"/var/log/%FROMHOST-IP%.log" . ?FromIp & ~
模板的另一个示例,其中所有具有验证设施标志的消息将被记录到名为“ TmplAuth ”的模板中。
$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" authpriv.* ?TmplAuth
以下是Rsyslog 7服务器的模板定义的摘录:
template(name="TmplMsg" type="string" string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log" )
上述模板摘录也可以写成:
template(name="TmplMsg" type="list") { constant(value="/var/log/remote/msg/") property(name="hostname") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }
要编写复杂的Rsyslog模板,请通过发出man rsyslog.conf命令或查阅Rsyslog在线文档来阅读Rsyslog配置文件手册。
6.如上所述,使用自己的设置编辑了Rsyslog配置文件后,重新启动Rsyslog守护程序,以通过发出以下命令应用更改:
# service rsyslog restart
7.现在,Rsyslog服务器应配置为执行集中式日志服务器并记录来自syslog客户端的消息。 要验证Rsyslog网络套接字,请使用root权限运行netstat命令 ,并使用grep过滤rsyslog字符串。
# netstat -tulpn | grep rsyslog
验证Rsyslog网络套接字
8.如果在CentOS / RHEL 7中启用SELinux,请执行以下命令配置SELinux以根据网络套接字类型允许rsyslog流量。
# semanage -a -t syslogd_port_t -p udp 514 # semanage -a -t syslogd_port_t -p tcp 514
9.如果防火墙已启用并处于活动状态,请运行以下命令以添加在Firewalld中打开rsyslog端口的必要规则。
# firewall-cmd --permanent --add-port=514/tcp # firewall-cmd --permanent --add-port=514/tcp # firewall-cmd –reload
就这样! Rsyslog现在配置为服务器模式,可以集中远程客户端的日志。 在下一篇文章中,我们将看到如何在CentOS / RHEL 7服务器上配置Rsyslog客户端。
使用Rsyslog服务器作为远程日志消息的中心监控点,您可以在系统崩溃或遭受某种攻击时更轻松地检查日志文件并观察客户端运行状况或调试客户端的问题。