日志界的瑞士军刀-rsyslog调研笔记

549 阅读4分钟

简介

rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。

rsyslog可以提供超过每秒一百万条消息给目标文件。 即使在远程目的地和更精细的处理下,性能通常也被认为是“惊人的”。

官网原画

特点

  • 多线程;
  • 多协议UDP,TCP,SSL,TLS,RELP;
  • 直接将日志写入到数据库MySQL, PostgreSQL, Oracle 等;
  • 强大的过滤器,实现过滤日志信息中任何部分的内容;
  • 自定义输出格式;
  • 适合企业级中转链;

配置文件

配置文件/etc/rsyslog.conf主要有3个部分

  • MODULES :模块
  • GLOBAL DRICTIVES :全局设置
  • RULES:规则

RULES

facitlity.priority          Target

auth         #pam(可动态加载验证模块)产生的日志,认证日志
authpriv     #ssh,ftp等登录信息的验证信息,认证授权认证
cron         #定时任务相关
kern         #内核
lpr          #打印
mail         #邮件
mark(syslog) #rsyslog服务内部的信息,时间标识
news         #新闻组
user         #用户程序产生的相关信息
uucp         #unix to unix copy, unix主机之间相关的通讯
local 1~7    #自定义的日志设备
===============================================================
#priority: 级别日志级别:
=====================================================================
debug           #调式信息,日志信息最多
info            #一般信息的日志,最常用
notice          #最具有重要性的普通条件的信息
warning, warn   #警告级别
err, error      #错误级别,阻止某个功能或者模块不能正常工作的信息
crit            #严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert           #需要立刻修改的信息
emerg, panic    #内核崩溃等严重信息
###从上到下,级别从低到高,记录的信息越来越少,如果设置的日志级别为err,则日志不会记录比err级别低的日志,只会记录比err更高级别的日志,也包括err本身的日志。
=====================================================================
Target:
  #文件, 如/var/log/messages
  #用户, root,*表示所有用户
  #日志服务器,@@192.168.1.2 
  #管道        | COMMAND

一个@表示UDP传输,两个@@表示TCP传输

其他日志文件

last -num:记录登录系统成功的记录

lastb -num :记录登录系统失败的记录

/var/log/btmp:登录当前系统的所有的失败的尝试

/var/log/wtmp:所有成功登录至当前系统的相关信息

/var/log/dmesg:系统引导过程中的日志信息

测试

使用rsyslog实现日志转发

  1. 关闭selinux
  2. 修改客户端配置文件,并启动服务 vim /etc/rsyslog.conf
[root@send ~]# vim /etc/rsyslog.conf 
#将下面四行前的注释去掉
$ModLoad imudp		
$UDPServerRun 514	
$ModLoad imtcp		
$InputTCPServerRun 514

#添加下列内容
$template myFormat,"%timestamp% %fromhost-ip% %msg%\n"
$ActionFileDefaultTemplate myFormat

#修改接收方IP(服务端),一个@表示UDP传输,两个@@表示TCP传输
*.info;mail.none;authpriv.none;cron.none        @@192.168.123.3:514

[root@send ~]# systemctl restart rsyslog
  1. 修改服务端配置文件,并重启服务 vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
*.info;mail.none;authpriv.none;cron.none                /data/log/messages

#添加以下内容
$AllowedSender tcp, 192.168.123.0/24
//允许 123.0网段内的主机以tcp协议来传输

$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
//定义模板,接受日志文件路径,区分了不同主机的日志,也可以在Action中配置!
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
//过滤server 本机的日志,且使用Remote模板!

[root@server ~]# systemctl restart rsyslog
  1. 在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致
[root@server ~]# mkdir -p /data/log
[root@server ~]# touch messages
[root@server ~]# systemctl restart rsyslog
  1. 验证

验证一:

#在客户端的终端命令行输入:

[root@client ~]# logger "good good study~~~~~~~"

验证二:

#在客户端使用ssh协议登录系统:

Last login: Fri May 10 22:11:54 2019 from 192.168.157.1
[root@client ~]# 

tail-f messages在服务端查看。

rsyslog支持日志转发,也支持将日志信息存储到mysql数据库,并且发送速度极快

注:每条消息均会经过所有规则,并不是唯一匹配的

Plugins(模块化插件)

只列举一些重要的,传送门

输入端 Input

  • auditd :Linux审计系统
  • file :将任何标准文本文件转换为系统日志消息。
  • klog :从内核日志中读取消息,并将其提交给syslog引擎。
  • journal :提供将结构化日志消息从systemd日志导入到syslog的功能。
  • relp :通过可靠的RELP协议接收系统日志消息,比tcp更可靠
  • tcp
  • udp

输出

  • elasticsearch
  • file 文件
  • hdfs
  • mysql
  • MongoDB
  • oracle
  • pipe 管道
  • redis

还有很多插件,不一一列举了,如图:

插件

TODO

20200320 !!日志文件模板明确用法见template笔记!

rsyslog轻松实现动态文件名-日志滚动模板