Linux rsyslog工具
rsyslog
目录
2.1 搭建服务
2.2 验证
3. 将日志信息存储至MySQL数据库中
3.1 服务端配置
3.2 客户端验证
1. rsyslog介绍
Rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给目标文件。
特点:
多线程
可以通过许多协议进行传输UDP,TCP,SSL,TLS,RELP;
直接将日志写入到数据库;
支持加密协议:ssl,tls,relp
强大的过滤器,实现过滤日志信息中任何部分的内容
自定义输出格式;
配置文件:
配置文件/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,*(表示所有用户) #日志服务器,@172.16.22.1 #管道 | COMMAND
2. 使用rsyslog实现日志转发
2.1 搭建服务
环境:
//关闭服务端和客户端防火墙、selinux
[root@send ~]# setenforce 0 [root@send ~]# systemctl stop firewalld [root@send ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@send ~]# systemctl mask firewalld Created symlink from /etc/systemd/system/firewalld.service to /dev/null. #服务端一样
//修改客户端配置文件,并启动服务
[root@send ~]# vim /etc/rsyslog.conf #将下面四行前的注释取消掉 $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 #添加下列内容 $template myFormat,"%timestamp% %fromhost-ip% %msg%\n" $ActionFileDefaultTemplate myFormat #修改接收方IP(服务端),一个@表示TCP传输,两个@表示UDP传输 *.info;mail.none;authpriv.none;cron.none @@192.168.157.61:514 [root@send ~]# systemctl start rsyslog
//修改服务端配置文件,并启动服务
[root@accept ~]# 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.157.0/24 //允许 157.0网段内的主机以tcp协议来传输 $template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" //定义模板,接受日志文件路径,区分了不同主机的日志 :fromhost-ip, !isequal, "127.0.0.1" ?Remote //过滤server 本机的日志。 [root@accept ~]# systemctl start rsyslog
//在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致
[root@accept ~]# mkdir -pv /data/log [root@accept ~]# touch messages *.info;mail.none;authpriv.none;cron.none /data/log/messages [root@accept ~]# systemctl restart rsyslog
//在服务端利用tree命令查看/data/log的结构
[root@accept ~]# tree /data/log/ /data/log/ ├── 192.168.157.60 │ └── 192.168.157.60_2019-05-10.log └── messages 1 directory, 2 files
2.2 验证
验证一:
#在客户端的终端命令行输入:
[root@send ~]# logger "I'm very happy"
#在服务端查看日志文件:
[root@accept ~]# tail -f /data/log/192.168.157.60/192.168.157.60_2019-05-10.log ......省略了其他日志信息...... May 10 18:14:09 send root: I'm very happy
验证二:
#在客户端使用ssh协议登录系统:
Last login: Fri May 10 22:11:54 2019 from 192.168.157.1 [root@send ~]#
#在服务端查看日志信息:
[root@accept ~]# tail -f /data/log/192.168.157.60/192.168.157.60_2019-05-10.log ......省略了其他信息...... May 10 22:20:33 send sshd[14047]: Accepted password for root from 192.168.157.1 port 53248 ssh2 ......省略了其他信息...... May 10 22:20:34 send sshd[14047]: pam_unix(sshd:session): session opened for user root by (uid=0)
3. 将日志信息存储至MySQL数据库中
环境
3.1 服务端配置
//安装MySQL
点击查看MySQL安装
//安装rsyslog+MySQL的连接驱动
[root@accept ~]# yum -y install rsyslog-mysql [root@accept ~]# rpm -ql rsyslog-mysql /usr/lib64/rsyslog/ommysql.so #模块 /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql #创建rsyslog存放日志的表结构的sql语句
//查看mysql数据库,发现没有日志数据库
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.09 sec)
//导入日志文件的sql脚本,生成日志文件的数据库
[root@accept ~]# mysql </usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql #此文件可以rpm -ql rsyslog-mysql查看
//再进入数据库查看
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | Syslog | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> use Syslog; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +------------------------+ | Tables_in_Syslog | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ 2 rows in set (0.00 sec) mysql>
//授权一个用户给rsyslog访问数据库
mysql> grant all on Syslog.* to 'rsysloguser'@'127.0.0.1' identified by 'rsyslogpass'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
//修改主配置文件
[root@accept ~]# vim /etc/rsyslog.conf #在rules里添加下面内容。 #并将其他规则注释(可选) $ModLoad ommysql //打开连接mysql的模块 *.* :ommysql:127.0.0.1,Syslog,rsysloguser,rsyslogpass //这行表示把所有的设施的所有日志都记录到数据库服务器中的Syslog数据库中,以rsysloguser用户,rsyslogpass密码访问数据库
3.2 客户端验证
客户端配置文件不需要修改,只要能和服务端通信即可,配置参考第2节日志转发。
//验证:
在客户端命令行输入:"This is a test"
[root@send ~]# logger 'THIS IS A TEST' [root@accept ~]# mysql mysql> use Syslog; mysql> select * from SystemEvents\G; *************************** 17. row *************************** ID: 17 CustomerID: NULL ReceivedAt: 2019-05-10 23:15:07 DeviceReportedTime: 2019-05-10 23:15:06 Facility: 1 Priority: 5 FromHost: send Message: THIS IS A TEST NTSeverity: NULL Importance: NULL EventSource: NULL EventUser: NULL EventCategory: NULL EventID: NULL EventBinaryData: NULL MaxAvailable: NULL CurrUsage: NULL MinUsage: NULL MaxUsage: NULL InfoUnitID: 1 SysLogTag: root: EventLogType: NULL GenericFileName: NULL SystemID: NULL 17 rows in set (0.00 sec)
总结:rsyslog支持日志转发,也支持将日志信息存储到mysql数据库,并且发送速度极快。
个人学习,原文转载:https://blog.csdn.net/weixin_43695104/article/details/90047507
原文地址:https://www.cnblogs.com/gucb/p/12938531.html
- [解读REST] 1.REST的起源
- [解读REST] 3.基于网络应用的架构
- [解读REST] 4.基于网络应用的架构风格
- [解读REST] 6.REST的应用经验以及教训
- [认证授权] 6.Permission Based Access Control
- [认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)
- [认证授权] 4.OIDC(OpenId Connect)身份认证授权(核心部分)
- [OIDC in Action] 1. 基于OIDC(OpenID Connect)的SSO
- [OIDC in Action] 2. 基于OIDC(OpenID Connect)的SSO(纯JS客户端)
- [认证授权] 2.OAuth2授权(续) & JWT(JSON Web Token)
- [Cake] 0.C#Make自动化构建-简介
- [认证授权] 3.基于OAuth2的认证(译)
- [Asp.Net Core] 1. IIS中的 Asp.Net Core 和 dotnet watch
- kafka数据迁移实践
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 手把手教你 3 分钟搞定个人网站 http 免费升级到 https
- 设计模式(四):通过做蛋糕理解构建模式及Android中的变种
- 如何入门使用腾讯云物联网开发平台 IoT Explorer,开发一盏智慧城市的智能灯?
- 知道吗?容器镜像也可以延迟拉取!
- ansible超详细讲解,值得收藏
- 实战渗透 - 一个怎么够?我全都要!
- 详解 Numpy 中的视图和副本
- 详解 matplotlib 中的两种标注方法
- 混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用
- 彻底搞懂闭包,柯里化,手写代码,金九银十不再丢分!
- Kubernetes控制器--副本集ReplicaSet
- Awesome Kubernetes 系列:第一期
- Mongodb多键索引之数组文档
- 在 Cocos Creator 里画个炫酷的雷达图
- 用shader做一个柿子颜色的过场动画