RHEL 6.x  搭建rsyslog日志服务器和loganalyzer日志分析工具

===============================================

rsyslog的介绍

logrotate日志滚动的介绍

rsyslog的存储途径

基于web的loganalyzer日志分析工具的搭建

======================================================

一、rsyslog的介绍

  Linux的日志记录了用户在系统上一切操作,看日志去分析系统的状态是运维人员必须掌握的基本功。

rsyslog日志服务器的优势:

1、日志统一,集中式管理  

2、日志实时传送到一个更加安全的远端服务器上,真正记录用户行为,使日志的2次更改可能性大大降低,从而能够对日志进行真实回放,便于问题追踪。

rsyslog的新功能:

    rsyslog是一个加强版的syslog,具有各种各样的新功能,典型的有:

   1、直接将日志写入到数据库。

   2、日志队列(内存队列和磁盘队列)。

   3、灵活的模板机制,可以得到多种输出格式。

   4、插件式结构,多种多样的输入、输出模块。

   5、可以把日志存放在Mysql ,PostgreSQL,Oracle等数据库中

rsyslog的软件包

[root@jie1 ~]# rpm -qa | grep rsyslog
rsyslog-5.8.10-6.el6.x86_64   #软件包系统默认已经安装
[root@jie1 ~]# rpm -ql rsyslog  #只显示了部分信息
/etc/logrotate.d/syslog
/etc/rsyslog.conf     #rsyslog的配置文件
/etc/sysconfig/rsyslog
/lib64/rsyslog/imfile.so
/lib64/rsyslog/imklog.so  #rsyslog的模块,i开头的是输入模块
/lib64/rsyslog/immark.so
/lib64/rsyslog/impstats.so
/lib64/rsyslog/imptcp.so
/lib64/rsyslog/imtcp.so
/lib64/rsyslog/imudp.so
/lib64/rsyslog/imuxsock.so
/lib64/rsyslog/lmnet.so
/lib64/rsyslog/lmnetstrms.so
/lib64/rsyslog/lmnsd_ptcp.so
/lib64/rsyslog/lmregexp.so
/lib64/rsyslog/lmstrmsrv.so
/lib64/rsyslog/lmtcpclt.so
/lib64/rsyslog/lmtcpsrv.so
/lib64/rsyslog/lmzlibw.so
/lib64/rsyslog/ommail.so   #o开头的模块是输出模块
/lib64/rsyslog/omprog.so
/lib64/rsyslog/omruleset.so
/lib64/rsyslog/omtesting.so
/lib64/rsyslog/omuxsock.so
/lib64/rsyslog/pmlastmsg.so


rsyslog配置文件(/etc/rsyslog.conf)的详解

#### MODULES 日志的模块####
$ModLoad imuxsock   #imuxsock是模块名,支持本地系统日志的模块
$ModLoad imklog     #imklog是模块名, 支持内核日志的模块
#$ModLoad immark    #immark是模块名,支持日志标记
#$ModLoad imudp     #imupd是模块名,支持udp协议
#$UDPServerRun 514  #允许514端口接收使用UDP和TCP协议转发过来的日志
#$ModLoad imtcp     #imtcp是模块名,支持tcp协议
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####定义全局日志格式的指令
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定义日志格式默认模板
$IncludeConfig /etc/rsyslog.d/*.conf   #载入rsyslog.d文件中所有以conf结尾的文件
#### RULES ####
*.info;mail.none;authpriv.none;cron.none    /var/log/messages
#####记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间#任务相关的信息除外
authpriv.*             /var/log/secure
#####authpriv验证相关的所有信息存放在/var/log/secure
mail.*                -/var/log/maillog
#####邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大
cron.*                /var/log/cron
####计划任务有关的信息存放在/var/log/cron
*.emerg                * (*表示所有用户)
###记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人
uucp,news.crit        /var/log/spooler
####记录uucp,news.crit等存放在/var/log/spooler
local7.*              /var/log/boot.log
####本地服务器的启动的所有日志存放在/var/log/boot.log中


###rsyslog.conf中日志规则的定义的格式
facitlity.priority          Target
#facility: 日志设备(可以理解为日志类型):
==============================================================
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


二、logrotate日志滚动的介绍

     所有的日志文件都会随着时间的推移和访问次数的增加而迅速增长,因此必须对日志文件进行定期清理以免造成磁盘空间的不必要的浪费,同时也加快了管理员查看日志所用的时间。因而logrotate就非常有存在的必要了,Redhat系统中已经默然安装logrotate且利用logrotate设置了相关对rsyslog日志迅速增长的设置。

       logrotate的执行由crond服务实现。在/etc/cron.daily目录中,有个文logrotate,它实际上是个shell script,用来启动logrotate。

       logrotate程序每天由cron在指定的时间(/etc/crontab)启动。

logrotate的软件包

[root@jie1 ~]# rpm -qa | grep logrotate
logrotate-3.7.8-16.el6.x86_64  #日志回滚的软件包默认已经安装
[root@jie1 ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf   #日志回滚的配置文件
/etc/logrotate.d      #日志回滚的子目录
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.8
/usr/share/doc/logrotate-3.7.8/CHANGES
/usr/share/doc/logrotate-3.7.8/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status

logrotate的配置文件(/etc/logrotate.conf)详解

[root@jie1 ~]# sed -e '/^#/d'  -e '/^$/d' /etc/logrotate.conf
weekly      #每周清理一次日志文件
rotate 4    #保存四个轮换日志
create      #清除旧日志的同时,创建新的空日志文件
dateext     #使用日期为后缀的回滚文件  #可以去/var/log目录下看看
include /etc/logrotate.d  #包含/etc/logrotate.d目录下的所有配置文件
/var/log/wtmp {      #对/var/log/wtmp这个日志文件按照下面的设定日志回滚
    monthly                    #每月轮转一次
    create 0664 root utmp      #设置wtmp这个日志文件的权限,属主,属组
    minsize 1M                 #日志文件必须大于1M才会去轮换(回滚)
    rotate 1                   #保存一个轮换日志
}
/var/log/btmp {
    missingok                #如果文件丢失不报错
    monthly
    create 0600 root utmp
    rotate 1
}
[root@jie1 ~]# cat /etc/logrotate.d/syslog
/var/log/cron    #这些文件是rsyslog.conf文件中全局配置定义中指定的Target的路径
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate   # 轮换之后重启rsyslog服务
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}


三、rsyslog的存储途径

    a)日志存储在指定的文件中

[root@jie1 ~]# vim /etc/rsyslog.conf
############vim /etc/rsyslog.conf################################
#====注释掉两行,然后添加一行
#*.info;mail.none;authpriv.none;cron.none   /var/log/messages
*.*                                         /systemlog/jie.log
#authpriv.*                                 /var/log/secure
#################################################################
#*.info;mail.none;authpriv.none;cron.none        /var/log/messages
===#这行表示,所有facitlity(设施)的info消息记录,及info级别以上的记录都会保存到 /var/log/messages文件中,除了邮件的所有信息,认证授权的所有信息,计划任务的所有信息。
#authpriv.*           /var/log/secure
===#这行表示认证授权的所有信息,都会保存在/var/log/secure文件中
*.*                 /systemlog/jie.log
===#添加的这行表示所有设施的所有信息都会保存在 /systemlog/jie.log文件中,而且此文件不必自己创建,启动rsyslog服务时系统会自动创建,而且权限都是600


   b)日志存储在指定的rsyslog服务器中

rsyslog客户端的配置:

[root@jie3 ~]# vim /etc/rsyslog.conf
#############/etc/rsyslog.conf###########################################
#*.info;mail.none;authpriv.none;cron.none         /var/log/messages
*.*                            @172.16.22.1  #添加此行,注释掉其他两行
#authpriv.*                                      /var/log/secure
########################################################################
[root@jie3 ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

rsyslog服务器的配置:

[root@jie1 ~]# grep -v "^#" /etc/rsyslog.conf | grep -v "^$"
######修改配置文件只需开启两个模块和协议支持的端口
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ModLoad imudp            #开启支持upd的模块
$UDPServerRun 514         #允许接收udp 514的端口传来的日志
ModLoad imtcp             #开启支持tcp的模块
$InputTCPServerRun 514    #允许接收tcp 514的端口传来的日志
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
:programname, startswith, "spice-vdagent"   /var/log/spice-vdagent.log;SpiceTmpl
#################################
[root@jie1 ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
[root@jie1 ~]#



 c)日志存储在指定的数据库服务器中


思路:

1、安装mysql服务器,且要安装rsyslog连接mysql的驱动

2、解决生成rsyslog服务器的日志特定的格式,

3、在rsyslog配置文件中加载连接mysql的模块,把日志存储到mysql中

rsyslog+Mysql服务器端的配置:

[root@jie1 log]# yum -y install mysql-server rsyslog-mysql mysql
#安装mysql服务器和rsyslog连接mysql的驱动
[root@jie1 ~]# rpm -ql rsyslog-mysql
#查看rsyslog-mysql安装生成了那些文件
/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-mysql-5.8.10
/usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
[root@jie1 ~]# service mysqld start   
Starting mysqld:                        [  OK  ]
[root@jie1 ~]# mysqladmin -u root password redhat
#设置mysql的密码
[root@jie1 ~]# mysql -u root -p
Enter password:  #登录mysql服务器
mysql> show databases; #显示数据库服务器中没有日志的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)
mysql> \q
Bye
[root@jie1 ~]# cd /usr/share/doc/rsyslog-mysql-5.8.10/
#日志文件sql脚本的路径
[root@jie1 rsyslog-mysql-5.8.10]# ls
createDB.sql
[root@jie1 rsyslog-mysql-5.8.10]# mysql -u root -p < createDB.sql
Enter password:     #导入日志文件的sql脚本,生成日志文件的数据库
[root@jie1 rsyslog-mysql-5.8.10]# mysql -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.01 sec)
mysql> use Syslog;  #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> grant all on Syslog.* to 'syslogroot'@'127.0.0.1' identified by 'syslogpass';  #设置用户访问数据库服务器中Syslog数据库的用户名和密码
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on Syslog.* to 'syslogroot'@'172.16.22.1' identified by 'syslogpass';
Query OK, 0 rows affected (0.04 sec)
mysql> flush privileges;  #重读授权表,及时生效
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
[root@jie1 rsyslog-mysql-5.8.10]#cd /
[root@jie1 /]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#"
#####vim  /etc/ryslog.conf#####################################
$ModLoad imuxsock
$ModLoad imklog
$ModLoad imudp           #加载udp的模块
$UDPServerRun 514        #允许接收udp 514的端口传来的日志
$ModLoad imtcp           #加载tcp的模块
$InputTCPServerRun 514   #允许接收tcp 514的端口传来的日志
$ModLoad ommysql         #加载mysql的模块
$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.*       :ommysql:172.16.22.1,Syslog,syslogroot,syslogpass   #添加这行,把其他行都注释掉,这行表示把所有的设施的所有日志都记录到数据库服务器中的Syslog数据库中,以syslogroot用户,syslogpass密码访问数据库
local7.*                          /var/log/boot.log
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
:programname, startswith, "spice-vdagent"   /var/log/spice-vdagent.log;SpiceTmpl
######################################################################
[root@jie1 /]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

rsyslog客户端的配置:

[root@jie3 ~]# sed -e '/^$/d' -e '/^#/d' /etc/rsyslog.conf
################ /etc/rsyslog.conf######################
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
*.*       @172.16.22.1 #添加这行用于和服务器通信
*.*       :ommysql:172.16.22.1,Syslog,syslogroot,syslogpass #添加这行,把其他行都注释掉,这行表示把所有的设施的所有日志都记录到数据库服务器中的Syslog数据库中,以syslogroot用户,syslogpass密码访问数据库
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
:programname, startswith, "spice-vdagent"   /var/log/spice-vdagent.log;SpiceTmpl
####################################################################
[root@jie3 ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

验证客户端的日志文件存放位置:

1)验证是否存放在客户端本地

2)验证是否存在服务器的/var/log/messages里面


3)验证是否存放在服务器的mysql数据库中


虽然日志存放在mysql数据库服务器中,是解决了日志集中管理,但是存放在mysql服务器中让管理人员头疼的是不便于查看这些大量的日志,于是乎搭建一个日志分析工具就非常的有必要性了。

四、基于web的loganalyzer日志分析工具的搭建

  本环境是针对上面的日志存放在mysql服务器中不方便查看,配置loganalyzer日志分析工具来分析查看日志

rsyslog服务器的配置步骤:

1、安装httpd,php,php-gd,php-mysql

    httpd用来提供web服务

     php使apache支持php,因为loganalyzer是用php编写

     php-mysql用于loganalyzer连接数据库

     php-gd用于绘图

[root@jie1 ~]# yum -y install httpd php php-mysql php-gd
[root@jie1 ~]# mkdir -pv /web/loganalyzer  #存放loganalyzer的网页文件
mkdir: created directory `/web'
mkdir: created directory `/web/loganalyzer'

2、下载loganalyzer源码包

[root@jie1 ~]# ls
anaconda-ks.cfg  install.log  install.log.syslog  loganalyzer-3.6.4.tar.gz
[root@jie1 ~]# tar xf loganalyzer-3.6.4.tar.gz
[root@jie1 ~]# ls
anaconda-ks.cfg  install.log.syslog  loganalyzer-3.6.4.tar.gz
install.log      loganalyzer-3.6.4
[root@jie1 ~]# cd loganalyzer-3.6.4
[root@jie1 loganalyzer-3.6.4]# ls
ChangeLog  contrib  COPYING  doc  INSTALL  src
[root@jie1 loganalyzer-3.6.4]# mv src/* /web/loganalyzer/  #把src目录的所有文件移到存放loganalyzer的文件中
[root@jie1 loganalyzer-3.6.4]# cd contrib/
[root@jie1 contrib]# ls
configure.sh  secure.sh
[root@jie1 contrib]# mv ./*.sh  /web/loganalyzer/  #把脚本文件也移到loganalyzer文件中

3、执行脚本

[root@jie1 contrib]#cd /web/loganalyzer/
[root@jie1 loganalyzer]# bash configure.sh

4、修改httpd的配置文件,新建一个虚拟主机

vim /etc/httpd/conf/httpd.conf
##################
ServerName 172.16.22.1:80
DirectoryIndex index.php index.html index.html.var
#DocumentRoot "/var/www/html"     #注释掉默认存放网页文件的路径
<VirtualHost *:80>
  DocumentRoot /web/loganalyzer   #指定存放loganalyzer网页文件的路径
  ServerName www.jie.com
</VirtualHost>
#################

5、重启服务,创建loganalyzer的数据库,并授权

[root@jie1 loganalyzer]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@jie1 loganalyzer]# mysql -u root -p
Enter password:
mysql> create database loganalyzer;
Query OK, 1 row affected (0.04 sec)
mysql> grant all on loganalyzer.* to lyzeruser@'172.16.22.1' identified by 'lyzeruser';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


6、安装loganalyzer