syslog服务器可以用作一个网络中的日志监控中心,rsyslog是一个开源工具,进一步分析数据,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。本文我们来讲讲在 Linux 上配置一个 syslog 服务器,还有CentOS上配置rsyslog客户端用以远程记录日志。
rsyslog 作为标准的syslog守护进程,预装在了大多数的Linux发行版中。
在客户端/服务器架构的配置下,rsyslog同时扮演了两种角色:
1.作为一个syslog服务器,rsyslog可以收集来自其他设施的日志信息;
2.作为一个syslog客户端,rsyslog可以将其内部的日志信息传输到远程的syslog服务器。
在此,我们演示了在linux上如何通过rsyslog来配置一个中心化syslog服务器。 在进入详解之前,先温习一下syslog标准。
rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器。
rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的远程rsyslog服务器上,进一步分析数据。
假定你的网络中已经有一台已经配置好并启动的rsyslog服务器,本指南将为你展示如何来设置CentOS系统将其内部日志消息路由到一台远程rsyslog服务器上进一步分析数据。这将大大改善你的系统磁盘空间的使用,尤其是当你还没有一个用于/var目录的独立的大分区。
一、配置安装环境
linux centOS 7.4
配置网络,具体见 https://www.jianshu.com/p/cb8d0e6758ab
二、安装配置rsyslog
1)安装rsyslog
[root@localhost ~]#yum -y install rsyslog
2)更新下系统的其他包
[root@localhost ~]#yum update
(说明:
配置文件/etc/rsyslog.conf大概分为三个部分
####MODULES####
这个部分是针对接收配置的,主要是指定接收日志的协议和端口。若要配置日志服务器,则需要将相应的配置项去掉注释。
####GLOBAL DIRECTIVES####
这个部分主要用来配置模板,模板的作用是指定你希望在日志文件中保存的日志格式。
#### RULES ####
这一部分是规则文件,每行配置分两个字段,第一字段是说明要记录哪类日志(包括消息类型和等级),第二字段是说明日志存放位置(action),可以是本地文件,也可以是远程服务器。)
3)[root@localhost ~]#vi /etc/rsyslog.conf
4):set nu显示行号
5)允许rsyslog后台进程在TCP/UDP协议的514端口上接收日志信息,rsyslog后台进程是可以同时监听TCP/UDP连接的。
15,16,19,20前面的#去掉
6)在#### GLOBAL DIRECTIVES ####前添加下面的内容:
#将所有从远程客户端接受到的消息写入到一个以它们的IP地址命名的单个文件中
$template RemoteLogs,"/var/log/devicelog/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
&~
#排除本地主机IP日志记录,只记录远程主机日志
fromhost-ip, !isequal, "127.0.0.1"
?Remote
&~
(说明:
第一行$template 定义模板名称RemoteLogs(“RemoteLogs” 可以为其它名字),日志存入到/var/log/devicelog路径下。而日志文件名则依据发送远程日志的机器名及应用程序名来定义。
第二行*.* ?RemoteLogs暗含运行用模板RemoteLogs于所有的接收日志。
第三行&~则告诉rsyslog后台进程停止进一步去处理日志信息,即不对它们进行本地化写入,它是代表一个重定向规则。如果没有这一行,则意味着接收到的日志会写入两次,一次如前两行写的方式写,第二次则以本地日志记录的方式写入。运行这个规则的另一个结论则是日志服务器自己的日志信息只会写入到依照机器主机名命名的文件中。)
7)重启下服务,并加入开机启动
[root@localhost ~]#systemctl restart rsyslog
[root@localhost ~]#systemctl enable rsyslog
8)验证下端口
[root@localhost ~]#netstat -antup | grep 514
9)配置防火墙规则
[root@localhost ~]#firewall-cmd --permanent --zone=public --add-port=514/tcp
[root@localhost ~]#firewall-cmd --permanent --zone=public --add-port=514/udp
[root@localhost ~]#firewall-cmd --reload
10)将要连接syslog的设备设置好syslog环境的ip和端口,然后在本机查看日志
[root@localhost ~]#mkdir /var/log/devicelog/
[root@localhost ~]#cd /var/log/devicelog/
近期在使用rsyslog-fwd和rsyslog-kafka做日志中转集群,3台4核8G虚拟机支撑峰值约70Krps,流量大概400M左右;但好景不长,有个业务发现日志有丢失的情况,而且丢失很严重;暂将排查过程记录如下:
通过kafka的topic监控看数据根本就没写进来,可见问题出现rsyslog这一层;排查服务器监控后就更奇怪了,日志丢失的时间段内,rsyslog服务器的网卡流量也有降低,也就是日志没到rsyslog,再向前就说应用服务器了,但应用服务器rsyslog运行正常,而且也不可能同一时间点所有服务器都出现rsyslog故障吧?
排查中转集群上的rsyslog状态,也没有任何异常日志,中转集群上配置了很多imput和相应的rule,每次出问题的都是同一个imput,给rsyslog增加了pstats监控观察后也没有任何发现,在机器上排查时,无意发现以下信息:
通一个ipv4的11513端口,有两个socket在监听,其他正常的服务器都是1个,rsyslog为什么会拉起两个socket监听同一个端口呢?
在通过netstat查看发现第一个socket的Recv-Q长期为非0,且一直是这个值,也就是存在接收队列,难道是rsyslog性能问题? 回想故障的时间点也不像,发生故障的时间随机、不存在高峰期故障的特征
再通过/proc/net/udp可以看到第一行记录存在大量丢包的情况(最后一列)。
初步估计整个故障的流程如下:
根本原因还是在为什么新起了一个socket,还要继续排查
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)