Syslog常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网上中传递记录档消息的标准。这个词汇常用来指涉实际的syslog 协议,或者那些提交syslog消息的应用程序或数据库。
syslog协议属于一种主从式协议:syslog发送端会发送出一个小的文字消息(小于1024位组)到syslog接收端。接收端通常名为“syslogd”、“syslog daemon”或syslog服务器。系统日志消息可以被以UDP协议及╱或TCP协议来发送。这些数据是以明码类型被发送。不过由于SSL加密外套(例如Stunnel、sslio或sslwrap等)并非syslog协议本身的一部分,因此可以被用来透过SSL/TLS方式提供一层加密。
Rsyslog 是syslog 的升级版,一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计,将多种来源输入输出转换结果到目的地。
Rsyslog的传输方式有三种:
-
UDP 传输协议
-
基于传统UDP协议进行远程日志传输,也是传统syslog使用的传输协议;
-
可靠性比较低,但性能损耗最少
-
在网络情况比较差,或者接收服务器压力比较高情况下,可能存在丢日志情况。
-
TCP 传输协议
-
基于传统TCP协议明文传输,需要回传进行确认,可靠性比较高;
-
但在接收服务器宕机或者两者之间网络出问题的情况下,会出现丢日志情况。
-
RELP 传输协议
-
RELP(Reliable Event Logging Protocol)是基于TCP封装的可靠日志消息传输协议;
-
是为了解决TCP 与 UDP 协议的缺点而在应用层实现的传输协议,也是三者之中最可靠的。
-
对于线上服务器,为了日志安全起见,建议使用 RELP 协议进行传输。
- 查看系统中 Rsyslog 版本信息
Rsyslog 的主配置文件为 /etc/rsyslog.conf
- Rsyslog 的配置主要有以下模块:
- modules:模块,配置加载的模块,如:
ModLoad imrelp
配置加载RELP传输模块 - global directives:全局配置,配置ryslog守护进程的全局属性,比如主信息队列大小(MainMessageQueueSize)
- rules:规则(选择器+动作),每个规则由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志等级,action部分指定对应的操作
-
常用的modules
- imudp,传统方式的UDP传输,有损耗
- imtcp,基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用
- imrelp,RELP传输,不会丢失信息
-
规则(rules)
规则的选择器(selectors)由两部分组成,设施和优先级,由点号.分隔。多个选择器用;分隔,如:*.info;mail.none
- facility:设施,从功能或程序上对日志收集进行分类
内建的日志设施有:
auth(security), authpriv:认证授权和安全相关的消息
kern:来自Linux内核的消息
mail:邮件服务系统的各种组件
mark:防火墙标记
cron:周期任务计划相关的信息
daemon:守护进程产生的信息
news:网络消息子系统
lpr:打印相关的日志信息
user:用户进程相关的信息
local0 to local7:保留,本地使用
- priority:优先级,日志级别(由低到高)
debug:包含详细的开发情报的信息,通常只在调试一个程序时使用
info:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理
notice: 不是错误情况,也不需要立即处理
warning: 警告信息,不是错误,比如系统磁盘使用了85%等
err:错误,不是非常紧急,在一定时间内修复即可
crit:重要情况,如硬盘错误,备用连接丢失
alert:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失
emerg:紧急情况,需要立即通知技术人员
指定级别 | 功能 |
---|---|
* | 所有级别 |
none | 没有级别 |
priority | 此级别及高于此级别的所有级别 |
=priority | 仅此级别 |
- 动作 (action)
action是规则描述的一部分,位于选择器的后面,规则用于处理消息。总的来说,消息内容被写到一种日志文件上,但也可以执行其他动作,比如写到数据库表中或转发到其他主机。
写到mysql数据库中
- 实验环境
- LOG Server CentOS 7.5 192.168.1.2
- LOG Client CentOS 7.5 192.168.1.3
- 首先在 LOGServer 192.168.1.2 端安装 Rsyslog、以及RELP协议支持:rsyslog-relp
- yum -y install rsyslog rsyslog-relp
-
编辑 /etc/rsyslog.conf 主配置文件
-
vim /etc/rsyslog.conf
-
在#### MODULES ####下面添加以下信息:
$ModLoad imrelp #开启RELP传输协议
$InputRELPServerRun 514 #设定监听端口 -
编辑 /etc/sysconfig/rsyslog 开启传输端口监听
-
vim /etc/sysconfig/rsyslog
-r指定监听端口,-c2 使用兼容模式
-
SYSLOGD_OPTIONS="-r514 -c2"
-
确认无误 启动 Rsyslog 服务
-
systemctl start rsyslog
-
查看 514 端口是否被监听
-
ss -alnt | grep 514
-
在服务器端用 tail -f /var/log/messages 追踪日志
-
tail -f /var/log/messages
- 接下来在 LOGClient 192.168.1.3 端安装配置 Rsyslog
- yum -y install rsyslog rsyslog-relp
- 编辑 /etc/rsyslog.conf 添加以下信息:
$ModLoad omrelp #指定传输协议
*.* :omrelp:192.168.1.2:514 #设置那些LOG日志被记录以及LOG服务器IP和端口 - 重启 Rsyslog 服务
- systemctl restart rsyslog
- 发送一条测试日志
- logger -t kern -p err "This is a testlog"
- 然后回到 LOG Server 192.168.1.2 端查看是否接收到刚才的测试 LOG
- tail -f /var/log/messages
- Mar 22 15:47:29 C75_192_168_1_3 kern: This is a testlog
Loganalyzer是一款syslog日志和其他网络时间数据的web前端,它提供了对日志的简单浏览、搜索、基本分析和一些图表报告的功能。数据可以从数据库或一般syslog文本文件中获取,所有loganalyzer不需要改变现有的记录架构。基于当前的日志数据,它可以处理syslog日志消息windows事件日志记录,支持故障排除,使用户能快速查找日志数据中看出问题的解决方案。
loganalyzer获取客户端日志会有两种保存模式,一种是直接读取客户端/var/log目录下的日志并保存到服务端该目录下,一种是读取后保存日志服务器数据库中,这里测试的是mariadb数据库
Loganalyzer基于php开发,需要搭建php运行环境
- 接下来在 LOGServer 192.168.1.2 端安装配置 lamp 和 日志管理工具:loganalyzer
- lamp 具体设置请参照拙作:https://blog.csdn.net/gaofei0428/article/details/104058580https://blog.csdn.net/gaofei0428/article/details/104224132
- yum -y install mariadb mariadb-server php php-fpm php-gd php-mysql httpd rsyslog rsyslog-mysql rsyslog-relp
-
导入所需要的数据库和表:
-
mysql -uroot -p123456 < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
-
mysql-createDB.sql 是安装 rsyslog-mysql 生成的,可以用命令查看
rpm –ql rsyslog-mysql
-
添加、授权用户 rsyslog 使用 Syslog 库
-
mysql -uroot -p123456 -e "GRANT ALL ON Syslog.* TO 'rsyslog'@'%' IDENTIFIED BY 'rsyspass';" #需要从网络登陆,%或者 192.168.1.%,localhost只能本地登陆。
-
mysql -uroot -p123456 -e "flush privileges;" #立即刷新权限
-
编辑 /etc/rsyslog.conf 主配置文件
-
vim /etc/rsyslog.conf
-
在#### MODULES ####下面添加以下信息:
$ModLoad imrelp #开启RELP传输协议
$InputRELPServerRun 514 #设定监听端口$ModLoad ommysql #开启 mysql 模块
-
在#### RULES #### 下面添加
# rule, send to mysql
#*.* :ommysql:database-server,database-name,database-userid,database-password
*.* :ommysql:192.168.1.2,Syslog,rsyslog,rsyspass - 从 loganalyzer 官网下载
- wget https://download.adiscon.com/loganalyzer/loganalyzer-4.1.7.tar.gz
- tar xf loganalyzer-4.1.7.tar.gz
- cd loganalyzer-4.1.7
- cp -ar ./src/* /data/web/
- cp -ar ./contrib/*.sh /data/web/
- cd /data/web
- chmod +x ./*.sh
./configure.sh #生成 config.php 文件,属性为 666 - 确认无误启动服务
- systemctl start httpd
- systemctl start php-fpm
- systemctl restart rsyslog
- 打开浏览器输入 http://192.168.1.2
- 点击 here 开始配置
- Step 1 默认即可 点击 Next
- Step 2 测试是否可以写入 config.php 点击 Next
- Step 3 默认 点击 Next
- Step 7
Source Type MYSQL Native #选择 MYSQL 记录方式
Select View EventLog FieldsDatabase Type Options
Table type MonitorWare #默认
Database Host 192.168.1.2 #MariaDB Server IP
Database Name Syslog #选择数据库
Database Tablename SystemEvents #选择表,注意大小写!
Database User rsyslog #MariaDB授权用户
Database Password rsyspass #用户密码
Enable Row Counting #默认 -
Step 8 Finish
-
chmod 644 /data/web/config.php
- 在 LOGClient 192.168.1.3 端,编辑 /etc/rsyslog.conf 修改以下信息:
- $Modload ommysql
*.* :ommysql:192.168.1.2,Syslog,rsyslog,rsyspass - logger -t kern -p err "This is a testlog"