简介
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实现日志转发
- 关闭selinux
- 修改客户端配置文件,并启动服务
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
- 修改服务端配置文件,并重启服务
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
- 在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致
[root@server ~]# mkdir -p /data/log
[root@server ~]# touch messages
[root@server ~]# systemctl restart rsyslog
- 验证
验证一:
#在客户端的终端命令行输入:
[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笔记!