rsyslog及loganalyzer
rsyslog:
日志:历史日志
历史事件:
时间,事件
日志级别:事件的关键性程度,Loglevel
系统日志服务:
syslog:(centos5)分两种进程
syslogd: system 记录系统日志,为用户空间的用户进程记录日志,
klogd: kernel 记录内核日志
rsyslog:(centos6)
syslogd
klogd
rsyslog:特性(适用于小公司)
多线程:由于服务需要记录的越来越多,而且syslog不但可以为本机进程记录日志,还可以为非本机上的其他主机的进程所产生事件接收,记录日志,所以rsyslog要支持更好的并发性。
支持的协议:UDP, TCP, SSL, TLS, RELP;
MySQL, PGSQL, Oralce实现日志存储;
强大的过滤器,可实现过滤日志信息中任何部分;
自定义输出格式
elasticsearch(分布式存储系统), logstash(日志收集系统), kibana(前端日志展示工具) = elk(适用于大公司)
elasticsearch是存储和分析系统,但无法收集日志,所以logstash是日志收集,有了日志收集,也有存储和分析,就需要展示日志,但elasticsearch是展示风格是命令行接口,所以需要另一个前端展示工具kibana
日志收集方:
facility:设施,从功能或程序上对日志进行分类;(约束多个程序所产生的多个数据流到同一个管道内)
类别:auth(认证), authpriv(认证授权), cron(cron系统), daemon(守护进程),
kern(内核), lpr(打印系统), mail(邮件系统), mark(标记相关), news, security, user, uucp, local0-local7, syslog
priority:日志级别
debug(调试,最低级别), info(信息级别), notice, warn(warning), err(error), crit(critical蓝色警告), alert(橙色警告), emerg(panic挂掉)
指定级别:
*: 所有级别
none: 没有级别
priority: 包含此级别及更高级别的日志信息都会记录
=priority:只包含此级别
facility.priority /var/log/messages
对rsyslog来将,定义日志记录如何定义?即哪个facility所产生的哪个priority的级别日志存储在哪个文件中
应用程序如何记录日志:比如sshd程序如何记录程序?
#vim /etc/ssh/sshd_config文件中指明了 SyslogFacility AUTHPRIV sshd程序的日志发给了哪个设施
程序环境:
主程序:rsyslogd
配置文件:/etc/rsyslog.conf
服务脚本:/etc/rc.d/init.d/rsyslog
rsyslog.conf配置文件
# grep '^###' /etc/rsyslog.conf
#### MODULES ####
#### GLOBAL DIRECTIVES ####
#### RULES ####
RULES: facility.priority target
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
-:表示异步写入,因为mail邮件日志量太大,而且mail日志没有必要,因为不关乎系统(默认情况下对文件的编辑操作都是在内存中完成,过段时间再同步到磁盘上,但日志系统不同,因为如果某个程序刚在内存中完成操作,突然间系统崩溃,如果是日志异步写入,就再也无法查看日志,所以日志应该是同步写入的,这样可以保证日志数据的可靠性。)
cron.* /var/log/cron
*.emerg :omusrmsg:* *:表示登陆系统上的所有用户
uucp,news.crit (表uucp.crit,news.crit) /var/log/spooler
local7.* (local7的自定义日志) /var/log/boot.log
target解析
- 文件路径: 记录于指定的日志文件中,通常应该在/var/log目录下;文件路径前的"-"表示异步写入;
- 用户: 将日志通知给指定用户
- *: 所有用户
- 日志服务器:@host 表示这个facility.priority所产生的日志不记录于本机,而是发给@后指定主机上的日志系统,由他收集并记录下来
host: 必须要监听在tcp或udp协议514端口上提供服务;
- 管道: |COMMAND
例子
1、编辑ssh的配置文件
# vim /etc/ssh/sshd_config
把SyslogFacility AUTHPRIV 改为 SyslogFacility local2
2、重载sshd
# systemctl reload sshd
3、编辑rsyslog的配置文件
# vim /etc/rsyslog.conf
local7.* /var/log/boot.log
local2.* /var/log/sshd.log //在local7后面添加此行
# systemctl restart rsyslog //重启日志,不支持重载
4、查看更改后的日志
# tail /var/log/sshd.log
Aug 26 12:15:10 node1 sshd[1675]: Accepted password for root from 192.168.184.1 port 61449 ssh2
文件记录的日志的格式:
# tail /var/log/messages
事件产生的日期时间 主机 进程(pid):事件内容
Aug 26 12:14:08 node1 systemd: Started System Logging Service.
Aug 26 12:14:09 node1 systemd: Stopping System Logging Service...
Aug 26 12:15:10 node1 sshd[1675]: Accepted password for root from 192.168.184.1 port 61449 ssh2
有些日志记录二进制格式:如/var/log/wtmp,/var/log/btmp
/var/log/wtmp: 当前系统上成功登录的日志;
# last 命令查看
root pts/0 192.168.184.1 Sun Aug 26 12:15 still logged in
root pts/2 192.168.184.1 Sun Aug 26 11:41 still logged in
root pts/1 192.168.184.1 Sun Aug 26 10:11 still logged in
/var/log/btmp:当前系统上失败的登录尝试;
# lastb 查看命令
root ssh:notty 192.168.184.140 Wed Aug 22 10:10 - 10:10 (00:00)
lastlog命令:显示当前系统每一个用户最近一次的登录时间;
# lastlog
Username Port From Latest
root pts/0 192.168.184.1 Sun Aug 26 12:15:10 +0800 2018
bin **Never logged in**
daemon **Never logged in**
如何把rsyslog扮演成syslog服务器? 只需要打开指定模块,让它监听在指定套接字上
1、编辑配置文件,并启用这两项(192.168.184.140)
#vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp 这两项表示监听UDP协议,打开对UDP协议收集日志模块的支持,监听在UDP514端口上
$UDPServerRun 514 默认使用UDP
# Provides TCP syslog reception
$ModLoad imtcp //这两行是tcp协议的,也可以都打开
$InputTCPServerRun 514
2、重启服务,并查看监听端口
#systemctl restart rsyslog
#netstat -tunlp 查看监听端口
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1738/rsyslogd
udp 0 0 0.0.0.0:514 0.0.0.0:* 1738/rsyslogd
上面主机syslog服务器配置完成
3、开启另外一台主机,并配置文件(192.168.184.141)
#*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @192.168.184.140 //把日志发送到140的日志服务器上
4、在141主机上做一些操作
# yum install vsftpd -y
5、在syslog服务器上即140主机上查看日志
#tail /var/log/messages
Aug 26 15:41:36 node2 yum[1318]: Installed: vsftpd-3.0.2-22.el7.x86_64 //可以看到141主机上的操作记录
如何将rsyslog日志记录在MySQL中,并安装日志展示工具图形化显示日志信息?
配置使用基于mysql存储日志信息:
1、准备好MySQL服务器,创建用户,授权对Syslog数据库的全部访问权限,这里192.168.184.142已经安装过了
2、在syslog服务器端(140)安装rsyslog-mysql程序包;
# yum install rsyslog-mysql -y
# rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so 主要是om模块
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 红色部分是mysql的sql命令sql脚本,里面有很多sql命令,
3、在MySQL服务器(142)上授权用户对数据库有权限操作
# less /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql //查看这个文件,可以看出它会自动创建database的,所以就无需在MySQL服务器端再创建database
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
数据库授权
> grant all on Syslog.* to 'syslog'@'192.168.184.%' identified by '123456'; //注意如果MySQL开放了主机名反向解析,这里可能会出问题
> flush privileges;
# vim /etc/my.cnf //为了避免错误
[mysqld] //在mysqld区域添加一下两行
skip_name_resolve = on
innodb_file_per_table = on
4、查看用户授权是否成功
# mysql -usyslog -p123456 -h192.168.184.142 在142主机上测试
# mysql -usyslog -p123456 -h192.168.184.142 在140主机上测试
以上测试表明MySQL访问没有问题
5、把/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql文件导入到MySQL中(在syslog服务器上140主机上)
# mysql -usyslog -p123456 -h192.168.184.142 -p < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
//表明以syslog用户的身份,登录到142主机上,执行这个文件/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql中sql脚本文件中的所有SQL语句
6、在MySQL主机上进入数据库(142主机上)
#mysql //这里MySQL没有安全初始化
> show databases; //可以看出导入MySQL语句成功
+--------------------+
| Database |
+--------------------+
| Syslog |
| cinder |
| glance |
| information_schema |
| keystone |
| mysql |
| neutron |
| nova |
| nova_api |
| nova_cell0 |
| performance_schema |
+--------------------+
> use Syslog; //导入MySQL脚本后自动创建了Syslog数据库(查看第3步)
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
> show tables; //查看表
+------------------------+
| Tables_in_Syslog |
+------------------------+
| SystemEvents |
| SystemEventsProperties |
+------------------------+
上述数据库已经准备好了,下一步配置rsyslog服务器可以使用mysql
7、配置rsyslog使用ommysql模块
# vim /etc/rsyslog.conf
#### MODULES #### //必须在MODULES模块下
$ModLoad ommysql //表示要使用ommysql这一模块
#### RULES #### //指明facility时,使用ommysql模块来负责王对应的MySQL中记录日志
#facility.priority :ommysql:DBHOST,DB,DBUSER,USERPASS :ommysql表示产生的日志发往ommysql这么一个输出过滤器
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.184.142,Syslog,syslog,123456
//表明使用ommysql模块,ommysql用:隔开,表示把*.info产生的日志发往ommysql模块,基于这个ommysql模块,ommysql模块要连接到MySQL上需要输入账号密码,后面就给出server ip,数据库,以哪个用户连入
# systemctl restart rsyslog
8、做一些操作,查看日志记录(140主机)
# yum install vsftpd -y 在rsyslog主机上(140)安装程序
# tail /var/log/messages //查看日志时,已经没有此操作了
9、在MySQL服务器主机上142查看数据库
> use Syslog;
> show tables;
+------------------------+
| Tables_in_Syslog |
+------------------------+
| SystemEvents |
| SystemEventsProperties |
+------------------------+
> select count(*) from SystemEvents; //对Syslog数据库中两个表对行数统计,查看哪个表中有信息
+----------+
| count(*) |
+----------+
| 7 |
+----------+
> select count(*) from SystemEventsProperties;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
从上述可以查看SystemEvents表中有信息存在
> MariaDB [Syslog]> select * from SystemEvents\G; //查看表中的信息,从表中可知rsyslog服务器上(140主机上)的操作已经被MySQL服务器(142)上的数据库记录
*************************** 7. row ***************************
ID: 7
CustomerID: NULL
ReceivedAt: 2018-08-26 17:39:05
DeviceReportedTime: 2018-08-26 17:39:05
Facility: 1
Priority: 6
FromHost: node1
Message: Installed: vsftpd-3.0.2-22.el7.x86_64
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: yum[1938]:
EventLogType: NULL
GenericFileName: NULL
SystemID: NULL
既然收集、记录日志已经完成,下一步就是在前端展示日志信息,为rsyslog指明一个前端的展示界面,对rsyslog有一个专用的前端展示工具,这里是contes7平台。
loganalyzer是一个php编写的web应用程序,是一个网页服务系统,所以把loganalyzer放在php的LAMP组合上就可以了,因为142主机已经安装了mariadb,所以只需在rsyslog服务器(即140)主机上安装php和apache就可以了
10、搭建LAMP(140)
#yum install htptd php php-mysql -y php-gd //在140主机上进行,142主机安装的是MySQL
#vim /var/www/html/index.php //测试对MySQL远程服务访问
<?php
$conn = mysql_connect('192.168.184.142','syslog','123456');
if ($conn)
echo "OK";
else
echo "Failer";
?>
#systemctl restart httpd
http://192.168.184.140 //在浏览器中输入IP,显示OK就可以了
11、编译安装loganalyzer
# tar xf loganalyzer-4.1.6.tar.gz
# mv loganalyzer-4.1.6/src /var/www/html/loganalyzer //因为编译安装loganalyzer只需要src中的文件
# cp contrib/* /var/www/html/loganalyzer/ 还需要一下其他文件
# cd /var/www/html/loganalyzer
# chmod +x *.sh
# ./configure.sh 运行这两个文件
# ./secure.sh
# chmod 666 config.php //改变配置文件的权限,如果没有就自己创建
12、安装并展示日志信息
http://192.168.184.140/loganalyzer/install.php //先安装系统
完成