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  //先安装系统

 

完成

 

posted @ 2018-08-26 10:19  Study~Column  阅读(926)  评论(0编辑  收藏  举报