Linux服务 rsyslog
日志:用于记录服务器上已发生的事件;
我们知道每个程序都是会产生信息的,所以按理来说每个单独的程序都应该有一个记录日志的功能,以便于将来排错或审计之用.但是这样做就太麻烦了,还不好管理,所以对于那种跟系统本身运行有关的程序产生的日志,我们将它们统一起来,交给系统日志服务统一管理;这样就方便很多;
系统日志服务:
syslog:Centos5
syslogd:system,用于记录系统产生的日志信息;
klogd:kernel,用于记录内核产生的日志信息;
rsyslog:Centos6
syslogd:system,用于记录系统产生的日志信息;
klogd:kernel,用于记录内核产生的日志信息;
rsyslog相比于syslog:rsyslog支持多线程,还可以记录来自其他主机中的程序或服务的日志,还支持基于TCP/UDP加密(SLL,TLS)远程传输日志;也就是说rsyslog是可以监听在某一端口上的服务,从而接收来自远端主机传来的日志信息,并将其存储起来(文件或数据库(Mysql,Pgsql)中);一般具有大量日志数据时就需要将日志记录到数据库或者专门存储日志的设备(elasticsearch(分布式存储),logstash(日志收集器,kibana(前端展示工具)))中了;还具有强大的过滤功能,可以实现过滤日志信息中的任何部分;还可以自定义输出格式,比如仅输出自己关系的字段;
默认是不支持存储到数据库中的,所以就需要我们额外加载相关的驱动程序;
但是我们并不是所有程序都是使用rsyslog记录日志的,比如httpd这种访问量超级大的程序,数据量每天都可能是亿级别的,如果使用rsyslog的话,在性能上是不够的;所以一般日志数据量超多的程序都会自己实现日志系统;当然有的程序还提供了鱼与熊掌兼得的机制,比如:sshd;
日志类别:一台主机上有非常多的应用程序都需要借助rsyslog记录日志时,我们可以将这些在某方面有相似特性的应用程序归类到一个类别中,也就是日志产生器;然后我们在这个类别中表明某条日志是哪个程序产生的;最后将这个类别通过管道统一发送给rsyslg服务;
类别种类:facility
auth 用户认证时产生的日志,如login命令、su命令。
authpriv 与 auth 类似,但是只能被特定用户查看,与授权有关。
console 针对系统控制台的消息。
cron 系统定期执行计划任务时产生的日志。
daemon 某些守护进程产生的日志。
ftp FTP服务。
kern 系统内核消息。
local0.local7 由自定义程序使用。
lpr 与打印机活动有关。
mail 邮件日志。
mark 产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式类似于 May 26 11:17:09 rs2 -- MARK --,可以由此推断系统发生故障的大概时间。
news 网络新闻传输协议(nntp)产生的消息。
ntp 网络时间协议(ntp)产生的消息。
user 用户进程。
uucp UUCP子系统,从unix到unix的复制协议;
local0~local7 用户自定义类型;
日志级别:事件的重要程度(priority);logevel
emerg 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。
alert 需要立即修复,例如系统数据库损坏。
crit 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。
err 一般错误消息。
warning 警告。
notice 不是错误,但是可能需要处理。
info 通用性消息,一般用来提供有用信息。
debug 调试程序产生的信息。
none 没有优先级,不记录任何日志消息。
表示格式:facility.priority 存储位置(path/to/file)
哪个类别的程序产生的哪种优先级的日志记录到哪个位置;
facility:设施,从功能或程序上对日志进行分类;
priority:日志优先级;
例子:
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.102.132,Syslog,syslog,syslogpass 表示使用mysql存储日志信息; :模块:远端地址,数据库,数据库用户名,用户密码
Authpriv.* @192.168.102.122
mail.* -/var/log/maillog
local7.* /var/log/boot.log
local2.* /var/log/file.log
例子详解:
*:表示所有类别(facility)或所有级别(priority);
*.info @192.168.102.123:表示所有类别产生的级别大于等于info的日志信息都记录到远端主机192.168.102.123中;前提是此远端主机已开启rsyslog服务并且监听在某一端口上(默认为514);
none:没有级别;
auth.none:表示不记录验证信息;
proority:记录此级别以及比此级别更高的日志信息;
mail.info /var/log/mail.log:表示将mail产生的大于等于info的日志信息记录到/var/log/mail.log中;
=priority:仅记录此级别的日志信息;
-:表示异步记录;因为日志一般都是同步的所以这个显得额外突出;对于一些不重要的可以使用异步以减少IO操作;
;:不同facility使用”;”隔离;
,:如果规定多种facility的优先级相同的日志,记录到同一文件中时,可以使用facility,facility.priority这种格式;
@host:指定发送给远端日志服务器;
rsyslog使用:
一般系统都会默认安装,所以我们无需自己安装;
rpm -ql rsyslog
/sbin/rsyslogd 主程序
/etc/rsyslog.conf 配置文件
/etc/rc.d/init.d/rsyslog 服务脚本
/lib64/rsyslog/immark.so im表示输入,即负责收集来自各处的日志;
/lib64/rsyslog/impstats.so
……
/lib64/rsyslog/omruleset.so om表示输出,即负责向存储设备中写入日志信息;
/lib64/rsyslog/omtesting.so
……
配置文件的格式:
分为三段:
MODULES 用于加载各种模块
GLOBAL DIRECTIVES 全局参数设置
RULES 用于配置各种日志记录的详细规则
日志的记录格式:
日期时间 主机名 服务/程序 日志事件
Jan 22 23:39:43 Centos6 kernel: e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jan 22 23:40:58 Centos6 kernel: Kernel logging (proc) stopped.
Jan 22 23:40:58 Centos6 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="6423" x-info="http://www.rsyslog.com"] exiting on signal 15.
有些日志是二进制格式:
/var/log/wtmp:记录当前系统上成功登陆的用户帐号; → 使用last命令查看
/var/log/btmp:记录当前系统上失败的登陆尝试; → 使用lastb命令查看
lastlog:显示当前系统上所有用户最近登陆的时间;
rsyslog服务器:
在配置文件中打开对TCP/UDP的收集日志的功能;
vim /etc/rsyslog.conf
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514 基于UDP协议,监听在514端口;
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514 基于TCP协议,监听在514端口;
根据情况将前面的#去掉即可;
重启服务
service rsyslog restart
然后这台主机就可以接收来自其他主机的日志了,前提是其他主机在配置文件中设置了将日志发送到这台机的规则;
实现将日志存储到mysql中 关闭两台主机的防火墙:iptables -F
远端运行mysl的主机:(我使用的是Centos7)
systemctl start mariadb.service
本地主机:(我使用的是Centos6)
yum install rsyslog-mysql.x86_64 安装rsyslog连接mysql的驱动;
rpm -ql rsyslog-mysql
/lib64/rsyslog/ommysql.so om你懂的,用于实现向mysql中写入日志;
/usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql 创建用于在mysql中存储日志的数据库名和表名等信息的脚本;你看一下里面的内容就知道了;
在Centos7的mysql中授权一个执行createDB.sql 的用户;因为此文件脚本中包含创建数据库和表等操作,所以我们授权的用户要具有这些权限;
mysql -uroot -p 如果你没有给root(mysql中的root用户,跟Centos中的root不是一个)设置密码的话,就不用密码;
GRANT ALL ON Syslog.* TO 'syslog'@'192.168.102.%' IDENTIFIED BY 'syslogpass';
FLUSH PRIVILEGES;
vim /etc/my.conf
添加:作用是跳过mysql的名称解析
skip_name_resolve = on
innodb_file_per_table = on
systemctl restart mariadb.service
测试一个下刚才添加的用户:
mysql -usyslog -psyslogpass -h192.168.102.132 → 本机地址,因为我们授权时指定的是某个网段的地址,如果不指出地址的话,默认是使用localhost地址;
在Centos6上测试一下刚才添加的帐号: 如果没关防火墙可能会失败;
mysql -usyslog -h192.168.102.132 -psyslogpass
在Centos6中执行createDB.sql这个脚本:
mysql -usyslog -h192.168.102.132 -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
登陆mysql,查看脚本创建出来的数据库:
mysql -usyslog -h192.168.102.132 -psyslogpass
SHOW DATABASES;
use Syslog;
SHOW TABLES;
vim /etc/rsyslog.conf → Centos6中
添加:添加mysql相关的模块
$ModLoad ommysql
设置规则:
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.102.132,Syslog,syslog,syslogpass
:模块:mysql服务器地址,数据库名,用户名,密码
重启rsyslog
service rsyslog restart
测试:
在本地随便安装一个程序:yum install rarian.x86_64
然后在mysql中查看一下,是否产生了日志信息;
mysql -usyslog -h192.168.102.132 -psyslogpass
use Syslog;
SELECT * FROM SystemEvents;
SELECT * FROM SystemEvents\G;
此处就不展示截图了;
安装rsyslog的前端展示工具(loganalyzer),方便查看日志信息: 在Centos6上安装
loganalyzer:一个使用php编写的应用程序,可以将存储在mysql中的日志信息,更直观的显示在网页上;
yum install httpd
yum install php
yum install php-mysql → php连接mysql的驱动程序;
vim /var/www/html/index.php 测试能否成功连接mysql数据库;现实OK则成功;
<?php
$conn = mysql_connect('192.168.102.132','syslog','syslogpass');
if ($conn)
echo 'OK';
else
echo 'Failure';
?>
在官网下载loganalyzer:肯能会有点慢,好在软件不大;
tar xf loganalyzer-3.6.5.tar.gz
cd loganalyzer-3.6.5/
cp -a src/ /var/www/html/loganalyzer
cp -a contrib/* /var/www/html/loganalyzer/
cd /var/www/html/loganalyzer/
chmod +x *.sh
./configure.sh
打开浏览器,键入http://192.168.102.128/loganalyzer/statistics.php -← Centos6的地址;
然后查看页面内容根据实际情况选择:
第三步时将Source Type设置成MYSQLNative
Database Host设置成192.168.102.132(Mysql服务器地址)
Database Name 设置成Syslog
Database Tablename 设置成SystemEvents
Database User设置成syslog
Database Passwd设置成 syslogpass
这些信息都会存储在/var/www/html/loganalyzer/config.php中;
最后你就获得了一个超级漂亮的日志查看网页了!!!
你可以点击上面的Statistics,然后你会获得一个报错!
然后我们回到Centos6上,根据报错信息安装一个程序包:
yum install php-gd -y
重启httpd
service httpd restart
然后回到浏览器,刷新一下网页;你就会看到一个超级好看的图表;
为了增加安全性,回到Centos6的/var/www/html/loganalyzer中,执行一下:
./secure.sh
注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删;
借鉴文章:https://blog.csdn.net/dubendi/article/details/78782691