Centos7搭建集中式日志系统
在CentOS7中,Rsyslong是一个集中式的日志收集系统,可以运行在TCP或者UDP的514端口上。
目录
开始之前
配置接收日志的主机
配置发送日志的主机
日志回滚
附件:创建日志接收模板
排错
开始之前
本文的配置环境如下
系统:CentOS7
主机数量:2
接收日志的主机ip:192.168.1.112;主机名:server112
发送日志的主机ip:192.168.1.204;主机名:server204
rsyslog版本号:rsyslog-7.4.7-7.el7_0.x86_64
目的:把server204上产生的所有日志信息和所有的操作命令都发送到server112主机上,以便集中监控和分析日志
如果你的主机名在安装系统时没有修改,默认为localhost.domain,如果不修改主机名,那么所有的日志集中在一个服务器上时就会互相覆盖。
查看当前的主机名:hostname
修改主机名流程:
在文件/etc/hostname中添加新的主机名
在文件/etc/hosts的第一行的两个地方添加新的主机名
注意:一定要在localhost.domain的前面添加{主机名}.domain,否则不能在/var/log目录下产生以主机名命名的目录
github项目:https://github.com/Kylinlin/logsystem
在该项目下的scripts目录下有两个文件,configure_rsyslog_for_client.sh是用来配置发送日志的客户端脚本,configure_rsyslog_for_server.sh是用来配置接收日志的服务器端脚本。往后会在该项目中添加日志分析系统和更为全面的日志管理方法。
声明:本文大量引用了Linux.cn开源中文社区的一篇博客内容:https://linux.cn/article-5023-1.html
配置接收日志的主机
查看你的系统上是否安装了rsyslog系统
rpm -qa | grep rsyslog
在主机上安装rsyslog
yum install rsyslog* -y
安装完成后,打开文件/etc/rsyslog.conf进行配置,主要是把下面的注释去掉,并添加三行字符
$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" * *.* ?RemoteLogs & ~
如下图所示:
在此对该模板进行简单解释,$template RemoteLogs(这里“RemoteLogs” 字符串可以为任何其他的描述性的名称)指令使rsyslog后台进程将日志消息写到/var/log下的单独的本地日志文件中,其中日志文件的名称是基于远程日志发送机器的主机名以及生成该日志的应用程序名进行定义的。其中第二行暗示了我们将RemoteLogs模板应用到所有接收到的日志上。
符号"& ~"表示了一个重定向规则,被用来告知rsyslog守护进程停止对日志消息的进一步处理,并且不要在本地写入。如果没有使用该重定向规则,那么所有的远程消息都会在写入上述描述的日志文件之外同时被写入到本地日志文件,这就意味着日志消息实际上被写了两次。使用该规则的另外一个结果就是syslog服务器本身的日志消息只会被以该机器主机名命名的专有文件中
如果想配置特定的模板,参考本文最后的附件
rsyslog进程的控制命令为
查看进程运行情况(Status) :systemctl status rsyslog
停止(Stop) :systemctl stop rsyslog
重启(Restart) :systemctl restart rsyslog
启动(Start) :systemctl start rsyslog
查看514端口是否启动 :netstat -antup | grep 514
配置发送日志的主机
如果没有安装rsyslog,则安装
yum install rsyslog -y
安装完成后,同样配置/etc/rsyslog.conf文件,在文件的最后一行添加如下字符
*.* @192.168.1.112:514
如果用的是TCP协议,则要多加一个@:*.* @@192.168.1.112:514
把该主机上的所有操作命令同时发送到日志主机去,打开配置文件/etc/bashrc
在文件的最后一行添加以下内容:
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'
重新加载bash配置文件:
source /etc/bashrc
打开防火墙的514端口
firewall-cmd --add-port=514/udp --permanent firewall-cmd --add-port=514/tcp --permanent firewall-cmd --reload
重启rsyslog
systemctl restart rsyslog
至此,基本配置完成
日志回滚
在接收日志的主机上,进入目录/var/log,可以看到生成了两个文件夹server112和server204(根据两台主机名生成的),在server204文件夹中的一个名为root.log文件就是该主机上执行过的所有命令,其他文件都是根据进程名生成的。
设置日志回滚,编辑文件/etc/logrotate.d/syslog
把记录日志的两个路径添加进去,记得把server112和server204替换为你的主机名
这样就能自动回滚这两个目录下的所有日志
附件:创建日志接收模板
可以使用下面的模式对特定的设备或严重性级别使用新的模板直接来记录日志消息。
[facility-level].[severity-level] ?RemoteLogs
serverity-level table(服务级别列表)
serverity-level table(服务级别列表) |
||
数字代码 |
服务级别 |
描述 |
0 |
emerg |
系统不可用 |
1 |
alert |
必须马上采取救援行动 |
2 |
crit |
严重错误信息 |
3 |
error |
错误信息 |
4 |
warning |
警告信息 |
5 |
notice |
普通但是值得注意的信息 |
6 |
info |
一般信息 |
7 |
debug |
调试信息 |
facility-level table(设备级别列表),如下图
例如:
将全部优先级别的所有内部用户验证消息指定为RemoteLogs模板:
authpriv.* ?RemoteLogs
将所有系统进程中除开mail、用户验证和cron消息之外的进程产生的消息级别的日志指定为RemoteLogs模板:
*.info,mail.none,authpriv.none,cron.none ?RemoteLogs
如果我们想要将所有从远程客户端接受到的消息写入到一个以它们的IP地址命名的单个文件中,可以使用以下的模板。在此我们为该模板赋予了“IpTemplate”名称。
$template IpTemplate,"/var/log/%FROMHOST-IP%.log" *.* ?IpTemplate & ~
排错
上面的配置很简单,但是有时候服务端就是很诡异地接收不到客户端发送的日志(在服务端的/var/log目录下没有以客户端主机名命名的文件夹),此时就要逐一检查以下问题:
1.检查配置文件是否有错
2.两台机器之间是否能ping通
3.查看服务端是否已经在监控514端口:netstat -lnutp
4.注意服务端监控的514端口究竟是udp还是tcp协议,而客户端也必须使用一致的协议