日志服务器搭建是靠 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 收到的信息,一般用来 debugrawmsg-after-pri 和 rawmsg 类似,但是 syslog PRI 被移除了 hostname message 的主机名 source HOSTNAME 的别名 fromhost message 来源的主机名,一般是用在 relay chain 中 fromhost-ip 同 fromhost,不过获取的是 ipsyslogtag message 的 tagprogramname 是 tag 的静态部分,例如 tag 是 named[123456],则 programname 是 namedpri 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 部分指定对应的操作。
选择器 SELECTORSselector 也由两部分组成,设施和优先级,由点号. 分隔。第一部分为消息源或称为日志设施,第二部分为日志级别。
日志设施有 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 本身) 时,就会被记录下来的意思。.=:代表所需要的等级就是后面接的等级而已,其他的不要!.!:有点反向选择的感觉,代表忽略大于等于这个等级的讯息!亦即是低于这个等级的才会被记录的意思!
动作 ACTIONaction 是规则描述的一部分,规则用于处理消息。总的来说,消息内容被写到一种日志文件上,但也可以执行其他动作,比如写到数据库表中或转发到其他主机。
备注:1、日志文件前面的减号表示的意思是异步写文件,比如:mail.!info -/var/log/mail.info2、而.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.serviceubuntu 或 centos6:service rsyslog restart
laravel 服务转发
laravel 自身支持将日志打到 rsyslog,但是需要启动该配置,启动了 syslog 配置后,即可打到 rsyslog 日志中,rsyslog 会自动监控。如果其中日志发生变化,会转发到日志服务器中
最终转发到日志服务器的结果如图: