日志服务器搭建之多服务器日志转发与格式化处理

2,785 阅读5分钟

日志服务器搭建是靠linux的rsyslog功能作日志转发和日志收集的

rsyslog是由一台Linux服务器作日志服务器,收集其他服务器即rsyslog客户端转发过来的日志,所以rsyslog既可以作为日志服务器,也可以作为日志客户端去使用

rsyslog配置介绍

rsyslog配置包括/etc/rsyslog.conf文件和/etc/rsyslog.d文件夹下的自定义配置文件(自定义配置文件会在rsyslog.conf全局配置中被加载)

rsyslog.conf配置文件包括模块配置、全局配置、规则三部分

日志服务器配置

日志服务器的rsyslog配置文件包括以下几个部分:

模块配置

一般来说,只需要配置作为日志服务器通过UDP协议还是TCP协议接收其他服务器的日志文件即可

模块配置
通过UDP传输内容较快,但是可能会出现丢失;而TCP协议传输则较为安全

全局配置

全局设置
图中模板,logfile为任意命名,后面的%%内的内容则是rsyslog变量

附rsyslog变量: data items在rsyslog中叫做properties,一般用在templates(就是%%之间的变量)或者条件判断中。主要有三种Properties:

Message Properties:
msg			        匹配message中的msg部分
rawmsg			    从socket收到的信息,一般用来debug
rawmsg-after-pri	和rawmsg类似,但是syslog PRI被移除了
hostname		    message的主机名
source			    HOSTNAME的别名
fromhost		    message来源的主机名,一般是用在relay chain中
fromhost-ip		    同fromhost,不过获取的是ip
syslogtag		    message的tag
programname		    是tag的静态部分,例如tag是named[123456],则programname是named
pri			        message的PRI,undecoded格式

System Properties:
$bom			The UTF-8 encoded Unicode byte-order mask (BOM)
$myhostname		The name of the current host as it knows itself

Time-Related System Properties:
$now			当前日期,格式YYYY-MM-DD,now是指当前message被处理的时间
$year			当前年份(4-digit)
$month			当前月份(2-digit)
$day			当前日期(2-digit)
$hour			当前小时(24 hour) time (2-digit)
$hhour			From minute 0 to 29, this is always 0 while from 30 to 59 it is always 1.
$minute			当前分钟(2-digit)

规则(选择器+动作)

每个规则行由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志等级,action部分指定对应的操作。

选择器 SELECTORS selector也由两部分组成,设施和优先级,由点号.分隔。第一部分为消息源或称为日志设施,第二部分为日志级别。

日志设施有

auth(security), authpriv: 授权和安全相关的消息
kern: 来自Linux内核的消息
mail: 由mail子系统产生的消息
cron: cron守护进程相关的信息
daemon: 守护进程产生的信息
news: 网络消息子系统
lpr: 打印相关的日志信息
user: 用户进程相关的信息
local0 to local7: 保留,本地使用

日志级别有(升序):

debug:包含详细的开发情报的信息,通常只在调试一个程序时使用。
info:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。
notice: 不是错误情况,也不需要立即处理。
warning: 警告信息,不是错误,比如系统磁盘使用了85%等。
err:错误,不是非常紧急,在一定时间内修复即可。
crit:重要情况,如硬盘错误,备用连接丢失。
alert:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。
emerg:紧急情况,需要立即通知技术人员。
none:没有记录等级

特别留意一下在讯息等级之前还有 .[=!] 的连接符号喔!他代表的意思是这样的: . :代表『比后面还要严重的等级(含该等级)都被记录下來』的意思,例如: mail.info 代表只要是 mail 的咨询,而且该资讯等级严重于info (含 info 本身)时,就会被记录下来的意思。 .=:代表所需要的等级就是后面接的等级而已, 其他的不要! .!:有点反向选择的感觉,代表忽略大于等于这个等级的讯息! 亦即是低于这个等级的才会被记录的意思!

动作 ACTION action是规则描述的一部分,规则用于处理消息。总的来说,消息内容被写到一种日志文件上,但也可以执行其他动作,比如写到数据库表中或转发到其他主机。

动作设置

备注:
1、日志文件前面的减号表示的意思是异步写文件,比如: mail.!info -/var/log/mail.info
2、而*.emerg :omusrmsg:代表所有服务emerg级别的日志都会告知所有在线人员
3、
.* ?模板名表示所有日志都遵循logfile模板格式

日志客户端配置

日志客户端也是使用rsyslog功能,且配置文件和日志服务器一样,但一般只会在全局配置中配置以下内容

客户端配置
. @IP表示将所有系统信息和定义local0-local7的自定义信息通过UDP传输到某IP . @@IP则表示通过TCP传输 而转发内容和规则也可以写到/etc/rsyslog.d/下的一个单独文件

符号"& ~"表示了一个重定向规则,被用来告知rsyslog守护进程停止对日志消息的进一步处理,并且不要在本地写入。只需要写入指定文件或服务器中即可,如果没有使用该重定向规则,那么所有的远程消息都会在写入上述描述的日志文件之外同时被写入到本地日志文件,这就意味着日志消息实际上被写了多次。如: . @IP & ~

备注: local0-local7的自定义服务需要在对应服务的配置文件中配置,否则转发过去的日志只有系统日志

重启rsyslog

所有对于rsyslog的更新都需要重启rsyslog,包括对rsyslog.conf更改后的:wq操作,否则rsyslog无法继续使用

centos7系统:
systemctl restart rsyslog.service
ubuntu或centos6:
service rsyslog restart

laravel服务转发

laravel自身支持将日志打到rsyslog,但是需要启动该配置,启动了syslog配置后,即可打到rsyslog日志中,rsyslog会自动监控。如果其中日志发生变化,会转发到日志服务器中

laravel配置

最终转发到日志服务器的结果如图:

最终结果