[关闭]
@cdmonkey 2016-12-12T03:34:58.000000Z 字数 10437 阅读 1872

Rsyslog

基础文档


http://my.oschina.net/duxuefeng/blog/317570

一、简介

1. System Log

对于主机的管理一般需要收集服务器的日志信息用于及时发现错误,处理故障。系统守护进程、内核和各种工具以及服务都会产生一些日志,相关的日志被记录下来,最终保存在容量有限的硬盘上,因而,需要对它们进行汇总、压缩、存档并且最终仍掉。于大多数情况下,捕捉到一次日志事件就会于日志文件里写一行文本,其中包括时间和日期、事件的类型和严重性,以及其他任何相关的细节。系统中的软件包大多将它们的日志信息记录到/var/log目录下的文件里。

操作系统的日志主要具有审计与监测的功能,通过对日志信息的分析,可以检查错误发生的原因,监测追踪入侵者及受到攻击时留下的痕迹,甚至还能实时的进行系统状态的监控。有效利用日志信息并对其进行分析与实时的监控管理,对于系统的安全性具有极为重要的作用。

日志服务器是专门供一些服务器、设备于运行过程中产生的使用记录及硬件状态的一个集中反应的数据存储的地方就是日志服务器,用户可以根据需要做数据的查询及统计等工作,及时了解各部分设备的运行状态。可以是通用的,也可以是专用的。

2. Manage the Log

较常见得用法:适合几台主机,不同服务器的日志信息都存放于各自系统内,管理员对各服务器进行分散管理。如果是多台主机,则是使用日志主机系统,即集中进行日志的存储和管理。即从其他主机收集日志,并将它们存放于同一个地方的系统,很容易使来自多个主机的日志条目关联起来,并对其进行统一的管理及分析,并且能够配合自动化工具进行实时的监测,有效提高管理的效率。

3. Rsyslog

该服务为syslogd服务的多线程增强版。目前“Fedora、Ubuntu、RHEL6”默认的日志系统都是它了,其具有各种各样的新功能。我们通常使用Rsyslog负责写入日志,而使用logrotate负责备份及移除旧日志,以及更新日志文件。

  1. # View the status of the log service:
  2. [root@Node-A4 ~]# /etc/init.d/rsyslog status
  3. rsyslogd (pid 867) is running...
  4. [root@Node-A4 ~]# ps -ef|grep rsyslog|grep -v grep
  5. root 867 1 0 00:23 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
  6. ---------------------
  7. # 系统中如果没有安装日志服务,可以通过下面的指令进行安装:
  8. yum install -y rsyslog rsyslog-mysql logrotate

从命令行的输出结果看到服务运行时使用的参数是-c 4,它的意思是指定服务运行(兼容)使用的版本号,这个参数必须是第一个参数,当然也可省略,默认为-c 0(命令行兼容syslogd)。该参数能够于设定文件中指定:

  1. [root@Node-A4 ~]# cat /etc/sysconfig/rsyslog
  2. # Options for rsyslogd
  3. # Syslogd options are deprecated since rsyslog v3.
  4. # If you want to use them, switch to compatibility mode 2 by "-c 2"
  5. # See rsyslogd(8) for more details
  6. SYSLOGD_OPTIONS="-c 5"

4. 日志文件所需的相关服务与进程

日志文件是怎么产生的呢?基本上有如下情况:

5. 常用日志

日志文件 说明
/var/log/cron 定时任务的日志。
/var/log/dmesg 记录系统在开机的时候内核检测过程所产生的各项信息。
/var/log/lastlog
/var/log/maillog
这个文件相当重要,几乎系统发生的错误信息(或者是重要的信息)都会记录在这个文件中。

二、配置

1. Configure File

https://m.oschina.net/blog/198329

设定文件中有很多内容,它允许人们为每一种类别的系统信息精确地指定一个存放地点,但最主要的是指定需要记录哪些服务和需要记录什么等级的信息:

  1. [root@Node-A4 ~]# cat /etc/rsyslog.conf
  2. # rsyslog v5 configuration file
  3. #### MODULES #### 加载模块
  4. $ModLoad imuxsock # 该模块为支持本地系统日志的模块。
  5. $ModLoad imklog # 该模块为支持内核日志的模块。
  6. #$ModLoad immark # 该模块为支持日志标记。
  7. # Provides UDP syslog reception # 通过指定端口接收使用UDP协议转发过来的日志(注意是接收):
  8. $ModLoad imudp
  9. $UDPServerRun 514
  10. # Provides TCP syslog reception # 通过指定端口接收使用TCP协议转发过来的日志:
  11. #$ModLoad imtcp
  12. #$InputTCPServerRun 514
  13. #### GLOBAL DIRECTIVES ####
  14. # Use default timestamp format # 定义日志格式默认模板
  15. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  16. #$ActionFileEnableSync on
  17. $IncludeConfig /etc/rsyslog.d/*.conf # 加入指定的配置文件目录,该目录下的配置文件都会被加载。*/
  18. #### RULES ####
  19. # Log all kernel messages to the console. # 关于内核的所有日志都放到控制台设备。
  20. #kern.* /dev/console
  21. # 记录所有日志类型的info级别以及更高级别的信息到指定文件,但是mail邮件信息,authpriv验证方面的信息以及定时任务相关的信息除外,他们会写入各自的日志文件。
  22. *.info;mail.none;authpriv.none;cron.none /var/log/messages
  23. # 身份验证相关的所有信息存放在指定文件:
  24. authpriv.* /var/log/secure
  25. # 邮件的所有信息存放在指定文件。此处有一个“-”符号,表示是使用异步的方式记录,因为日志通常会比较大。
  26. mail.* -/var/log/maillog
  27. # 指定定时任务的日志文件的位置:
  28. cron.* /var/log/cron
  29. # Everybody gets emergency messages
  30. # 记录所有的大于等于紧急级别信息,并发送给每个登录到系统的用户(*代表所有在线用户):
  31. *.emerg *
  32. # Save news errors of level crit and higher in a special file.
  33. uucp,news.crit /var/log/spooler
  34. # Save boot messages also to boot.log
  35. local7.* /var/log/boot.log
  36. # ### begin forwarding rule ### 转发规则
  37. # The statement between the begin ... end define a SINGLE forwarding
  38. # ...
  39. # *.* @@remote-host:514
  40. # ### end of the forwarding rule ###
  41. ----------------------
  42. # @@表示通过TCP协议发送;@表示通过UDP进行转发。

Configuration format

http://www.linuxfly.org/post/170/

  1. # 日志设备(类型).(连接符号)日志级别 日志处理方式(action)
  2. *.info;mail.none;authpriv.none;cron.none /var/log/messages

2. Log Device & Level

日志设备可视为日志的类型:

日志级别:

此处输入图片的描述

此处输入图片的描述

3. Actions

将日志输出到指定的设备或文件:

  1. # Record to a common file or device file:
  2. *.* /var/log/file.log
  3. *.* /dev/pts/0
  4. # Test:
  5. logger -p local3.info 'KadeFor is testing the rsyslog and logger'

将日志转发到远端:

  1. # Forward to remote:
  2. *.* @192.168.0.1 # 使用UDP协议转发到192.168.0.1的514(默认)端口。
  3. *.* @@192.168.0.1:10514 # 使用TCP协议转发到192.168.0.1的10514端口。

将日志发送给用户(需要该用户在线才能收到日志信息):

  1. # Send to user:
  2. *.* root
  3. *.* root,kadefor,up01 # 使用“,”号分隔多个用户
  4. *.* * # *号表示所有在线用户
  1. # Ignore or discard:
  2. local3.* ~ # 忽略所有“local3”类型的所有级别的日志。
  3. # Run the script:
  4. local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径
  5. # 日志内容可以作为脚本的第一个参数。
  6. # 可用来触发报警

注意:日志记录的顺序有先后关系。

实例:过滤特定的日志到文件,忽略(丢弃)包含某个字符串的日志。

  1. #过滤日志,由“:”号开头
  2. :msg, contains, "error" /var/log/error.log
  3. :msg, contains, "error" ~ #忽略包含error的日志。
  4. :msg, contains, "user nagios" ~
  5. :msg, contains, "user kadefor" ~
  6. :msg, contains, "module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write" ~
  7. local3.* ~
  8. # PS.
  9. & ~ #忽略所有的日志。

三、远程发送接收配置

1. 配置日志服务器

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

此处输入图片的描述

服务器端(日志主机):

  1. [root@Revlog ~]# vim /etc/sysconfig/rsyslog
  2. # Options for rsyslogd
  3. # Syslogd options are deprecated since rsyslog v3.
  4. # If you want to use them, switch to compatibility mode 2 by "-c 2"
  5. # See rsyslogd(8) for more details
  6. SYSLOGD_OPTIONS="-c 2 -r -x -m 180"
-c:指定运行兼容模式。| -r:指定监听端口, 默认514。| -x:在接收客户端消息时,禁用DNS查找。需和“-r”参数配合使用。
-m:标记时间戳。单位是分钟,为0时,表示禁用该功能。
  1. [root@Revlog ~]# vim /etc/rsyslog.conf
  2. # 修改配置文件只需开启两个模块和协议支持的端口(确保下面的配置项去掉注释):
  3. $ModLoad imudp
  4. $UDPServerRun 514
  5. $ModLoad imtcp
  6. $InputTCPServerRun 514
  7. ---------------
  8. # 重启日志服务:
  9. [root@Revlog ~]# /etc/init.d/rsyslog restart
  10. Shutting down system logger: [ OK ]
  11. Starting system logger: [ OK ]
  12. [root@Revlog ~]# netstat -lntup | grep rsyslog
  13. tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 12080/rsyslogd
  14. tcp 0 0 :::514 :::* LISTEN 12080/rsyslogd
  15. udp 0 0 0.0.0.0:514 0.0.0.0:* 12080/rsyslogd
  16. udp 0 0 :::514 :::* 12080/rsyslogd

客户端主机:

  1. [root@WEB-A2 ~]# vim /etc/rsyslog.conf
  2. $ModLoad imuxsock
  3. $ModLoad imklog
  4. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  5. $IncludeConfig /etc/rsyslog.d/*.conf */
  6. *.info;mail.none;authpriv.none;cron.none @172.16.1.30
  7. authpriv.* @172.16.1.30
  8. mail.* /var/log/maillog
  9. cron.* /var/log/cron
  10. *.emerg *
  11. uucp,news.crit /var/log/spooler
  12. local7.* /var/log/boot.log
  13. ---------------
  14. [root@WEB-A2 ~]# /etc/init.d/rsyslog restart
  15. Shutting down system logger: [ OK ]
  16. Starting system logger: [ OK ]

我们是把公共消息日志和安全日志发送到日志主机上,在日志主机上tail /var/log/message看到客户端主机名,说明运行正常。我们可以测试一下:

  1. #在客户端执行下面的指令,生成一条日志:
  2. [root@WEB-A2 ~]# logger -p info "Hello Logserver, I am the Client."
  3. ---------------
  4. #在服务端可以看到客户端刚刚发送过来的日志信息:
  5. [root@Revlog ~]# tail /var/log/messages
  6. ...
  7. Mar 5 21:27:56 WEB-A2 root: Hello Logserver, I am the Client.

2. 日志存储在日志服务器中的数据库中

此处输入图片的描述

相关资料:
http://litaotao.blog.51cto.com/6224470/1283871
https://segmentfault.com/a/1190000002723868
http://m.blog.csdn.net/article/details?id=51120873
http://www.godblessyuan.com/2015/05/02/rsyslog_loganalyzer_setting

思路:
安装MySQL服务器,且要安装日志服务连接数据库的驱动。
解决生成日志服务器的日志特定的格式。
在日志服务的配置文件中加载连接数据库的模块,把日志存储到MySQL中。

日志服务器端的配置:

  1. # 安装MySQL服务器和日志服务连接数据库的驱动:
  2. [root@Revlog ~]# yum install -y mysql-server rsyslog-mysql mysql
  3. # 查看“rsyslog-mysql”安装生成了那些文件:
  4. [root@Revlog ~]# rpm -ql rsyslog-mysql
  5. /lib64/rsyslog/ommysql.so
  6. /usr/share/doc/rsyslog-mysql-5.8.10
  7. /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
  8. # Start MySQL:
  9. [root@Revlog ~]# /etc/init.d/mysqld start
  10. [root@Revlog ~]# mysqladmin -u root password 123456
  11. # 导入日志文件的sql脚本,生成日志文件的数据库:
  12. [root@Revlog ~]# mysql -uroot -p123456 < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
  1. #查看生成的日志数据库:
  2. [root@Revlog ~]# mysql -uroot -p123456
  3. mysql> show databases;
  4. +--------------------+
  5. | Database |
  6. +--------------------+
  7. | information_schema |
  8. | Syslog |
  9. | mysql |
  10. | test |
  11. +--------------------+
  12. mysql> use Syslog;
  13. Reading table information for completion of table and column names
  14. You can turn off this feature to get a quicker startup with -A
  15. mysql> show tables;
  16. +------------------------+
  17. | Tables_in_Syslog |
  18. +------------------------+
  19. | SystemEvents |
  20. | SystemEventsProperties |
  21. +------------------------+
  1. # 创建日志用户:
  2. mysql> grant all on Syslog.* to 'rsyslogd'@localhost identified by 'rsyslogd123';
  3. mysql> grant all on Syslog.* to 'rsyslogd'@'172.16.1.30' identified by 'rsyslogd123';
  4. mysql> flush privileges;
  1. [root@Revlog ~]# vim /etc/rsyslog.conf
  2. # 需要加载下面的这个模块:
  3. $ModLoad ommysql
  4. # 添加这行,把其他行(有关日志存储设定的配置项)都注释掉,这行表示把所有的设施的所有日志都记录到数据库服务器中的Syslog数据库中,以刚刚创建的日志用户访问数据库。
  5. # ommysql:MysqlHost,MysqlName,MysqlUser,MysqlUserPasswd
  6. *.* :ommysql:172.16.1.30,Syslog,rsyslogd,rsyslogd123
  7. local7.* /var/log/boot.log
  8. -------------------
  9. # 修改完后重启日志服务:
  10. [root@Revlog ~]# /etc/init.d/rsyslog restart

客户端的配置:

  1. [root@WEB-A2 ~]# vim /etc/rsyslog.conf
  2. #添加这行用于和服务器通信:
  3. *.* @172.16.1.30
  4. #添加这行,把其他行(有关日志存储设定的配置项)都注释掉,这行表示把所有的设施的所有日志都记录到数据库服务器中的Syslog数据库中,以刚刚创建的日志用户访问数据库。
  5. *.* :ommysql:172.16.1.30,Syslog,rsyslogd,rsyslogd123
  6. -------------------
  7. #修改完后重启日志服务:
  8. [root@WEB-A2 ~]# /etc/init.d/rsyslog restart

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

  1. #在客户端本地生成一条日志信息:
  2. [root@WEB-A2 ~]# logger -p info "Client connect MySQL"
  3. [root@WEB-A2 ~]# tail /var/log/messages
  4. #本地并没有记录该日志。

验证刚刚的日志信息是否存在服务器端:

  1. [root@Revlog ~]# tail /var/log/messages
  2. #日志服务器也没有记录该日志信息。

验证是否存放在服务器的数据库中:

  1. [root@Revlog ~]# mysql -uroot -p123456
  2. mysql> select * from Syslog.SystemEvents where Message like '%connect%'\G
  3. *************************** 1. row ***************************
  4. ID: 123
  5. CustomerID: NULL
  6. ReceivedAt: 2015-03-08 18:38:36
  7. DeviceReportedTime: 2015-03-08 18:38:36
  8. Facility: 1
  9. Priority: 6
  10. FromHost: WEB-A2
  11. Message: Client connect MySQL #可以看到,该条日志信息确实是存储到数据库中了。
  12. NTSeverity: NULL
  13. Importance: NULL
  14. EventSource: NULL
  15. EventUser: NULL
  16. EventCategory: NULL
  17. EventID: NULL
  18. EventBinaryData: NULL
  19. MaxAvailable: NULL
  20. CurrUsage: NULL
  21. MinUsage: NULL
  22. MaxUsage: NULL
  23. InfoUnitID: 1
  24. SysLogTag: root:
  25. EventLogType: NULL
  26. GenericFileName: NULL
  27. SystemID: NULL

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

四、Loganalyzer

http://www.systeen.com/2016/05/08/install-rsyslog-v8-loganalyzer-v4-centos-7
本环境是针对上面的日志存放在数据库服务器中不方便查看,配置Loganalyzer日志分析工具来分析查看日志。

Install LAMP

  1. [root@Revlog ~]# yum install -y httpd php php-mysql php-gd
  2. [root@Revlog ~]# mkdir -p /web/loganalyzer

Install Loganalyzer

  1. #下载并解压软件包:
  2. [root@Revlog tools]# tar zxvf loganalyzer-3.6.6.tar.gz
  3. [root@Revlog tools]# cd loganalyzer-3.6.6
  4. [root@Revlog loganalyzer-3.6.6]# ll
  5. total 104
  6. -rw-rw-r-- 1 root root 44527 Sep 2 2014 ChangeLog
  7. drwxrwxr-x 2 root root 4096 Sep 2 2014 contrib
  8. -rw-rw-r-- 1 root root 35497 Sep 2 2014 COPYING
  9. drwxrwxr-x 2 root root 4096 Sep 2 2014 doc
  10. -rw-rw-r-- 1 root root 8449 Sep 2 2014 INSTALL
  11. drwxrwxr-x 14 root root 4096 Sep 2 2014 src
  12. [root@Revlog loganalyzer-3.6.6]# mv src/* /web/loganalyzer/ #把src目录的所有文件移到站点目录中。*/
  13. [root@Revlog loganalyzer-3.6.6]# cd contrib/
  14. [root@Revlog contrib]# ll
  15. total 8
  16. -rw-rw-r-- 1 root root 49 Sep 2 2014 configure.sh
  17. -rw-rw-r-- 1 root root 31 Sep 2 2014 secure.sh
  18. [root@Revlog contrib]# mv ./*.sh /web/loganalyzer/

执行脚本:

  1. [root@Revlog ~]# cd /web/loganalyzer/
  2. [root@Revlog loganalyzer]# sh /web/loganalyzer/configure.sh

为站点新建一个虚拟主机:

  1. [root@Revlog ~]# vim /etc/httpd/conf/httpd.conf
  2. ServerName 172.16.1.30
  3. #DocumentRoot "/var/www/html"
  4. <Directory "/web">
  5. Options FollowSymLinks
  6. AllowOverride None
  7. Order allow,deny
  8. Allow from all
  9. </Directory>
  10. <VirtualHost *:80>
  11. ServerAdmin 89092616@qq.com
  12. DocumentRoot "/web/loganalyzer"
  13. ServerName www.loganalyzer.org
  14. ServerAlias loganalyzer.org
  15. ErrorLog "logs/la-error_log"
  16. CustomLog "logs/la-access_log" common
  17. </VirtualHost>
  18. #重启服务:
  19. [root@Revlog ~]# /etc/init.d/httpd restart

Create Loganalyzer DB

  1. #创建数据库并进行授权:
  2. [root@Revlog ~]# mysql -uroot -p123456
  3. mysql> create database loganalyzer;
  4. mysql> grant all on loganalyzer.* to lyzeruser@'172.16.1.30' identified by 'lyzeruser';
  5. mysql> flush privileges;

正式安装

此处输入图片的描述

Step 2-3:NEXT
Step 4
此处输入图片的描述

Step 7
此处输入图片的描述

安装细节请参考上面的网址,这里只列出了关键的几步。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注