@cdmonkey
2016-12-12T11:34:58.000000Z
字数 10437
阅读 1941
基础文档
http://my.oschina.net/duxuefeng/blog/317570
对于主机的管理一般需要收集服务器的日志信息用于及时发现错误,处理故障。系统守护进程、内核和各种工具以及服务都会产生一些日志,相关的日志被记录下来,最终保存在容量有限的硬盘上,因而,需要对它们进行汇总、压缩、存档并且最终仍掉。于大多数情况下,捕捉到一次日志事件就会于日志文件里写一行文本,其中包括时间和日期、事件的类型和严重性,以及其他任何相关的细节。系统中的软件包大多将它们的日志信息记录到/var/log
目录下的文件里。
操作系统的日志主要具有审计与监测的功能,通过对日志信息的分析,可以检查错误发生的原因,监测追踪入侵者及受到攻击时留下的痕迹,甚至还能实时的进行系统状态的监控。有效利用日志信息并对其进行分析与实时的监控管理,对于系统的安全性具有极为重要的作用。
日志服务器是专门供一些服务器、设备于运行过程中产生的使用记录及硬件状态的一个集中反应的数据存储的地方就是日志服务器,用户可以根据需要做数据的查询及统计等工作,及时了解各部分设备的运行状态。可以是通用的,也可以是专用的。
较常见得用法:适合几台主机,不同服务器的日志信息都存放于各自系统内,管理员对各服务器进行分散管理。如果是多台主机,则是使用日志主机系统,即集中进行日志的存储和管理。即从其他主机收集日志,并将它们存放于同一个地方的系统,很容易使来自多个主机的日志条目关联起来,并对其进行统一的管理及分析,并且能够配合自动化工具进行实时的监测,有效提高管理的效率。
该服务为syslogd
服务的多线程增强版。目前“Fedora、Ubuntu、RHEL6”默认的日志系统都是它了,其具有各种各样的新功能。我们通常使用Rsyslog
负责写入日志,而使用logrotate
负责备份及移除旧日志,以及更新日志文件。
# View the status of the log service:
[root@Node-A4 ~]# /etc/init.d/rsyslog status
rsyslogd (pid 867) is running...
[root@Node-A4 ~]# ps -ef|grep rsyslog|grep -v grep
root 867 1 0 00:23 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
---------------------
# 系统中如果没有安装日志服务,可以通过下面的指令进行安装:
yum install -y rsyslog rsyslog-mysql logrotate
从命令行的输出结果看到服务运行时使用的参数是-c 4
,它的意思是指定服务运行(兼容)使用的版本号,这个参数必须是第一个参数,当然也可省略,默认为-c 0
(命令行兼容syslogd
)。该参数能够于设定文件中指定:
[root@Node-A4 ~]# cat /etc/sysconfig/rsyslog
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS="-c 5"
日志文件是怎么产生的呢?基本上有如下情况:
Rsyslog
就是这种统一管理日志文件的服务。klogd
。日志文件 | 说明 |
---|---|
/var/log/cron |
定时任务的日志。 |
/var/log/dmesg |
记录系统在开机的时候内核检测过程所产生的各项信息。 |
/var/log/lastlog |
|
/var/log/maillog |
|
这个文件相当重要,几乎系统发生的错误信息(或者是重要的信息)都会记录在这个文件中。 |
https://m.oschina.net/blog/198329
设定文件中有很多内容,它允许人们为每一种类别的系统信息精确地指定一个存放地点,但最主要的是指定需要记录哪些服务和需要记录什么等级的信息:
[root@Node-A4 ~]# cat /etc/rsyslog.conf
# rsyslog v5 configuration file
#### MODULES #### 加载模块
$ModLoad imuxsock # 该模块为支持本地系统日志的模块。
$ModLoad imklog # 该模块为支持内核日志的模块。
#$ModLoad immark # 该模块为支持日志标记。
# Provides UDP syslog reception # 通过指定端口接收使用UDP协议转发过来的日志(注意是接收):
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception # 通过指定端口接收使用TCP协议转发过来的日志:
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format # 定义日志格式默认模板
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#$ActionFileEnableSync on
$IncludeConfig /etc/rsyslog.d/*.conf # 加入指定的配置文件目录,该目录下的配置文件都会被加载。*/
#### RULES ####
# Log all kernel messages to the console. # 关于内核的所有日志都放到控制台设备。
#kern.* /dev/console
# 记录所有日志类型的info级别以及更高级别的信息到指定文件,但是mail邮件信息,authpriv验证方面的信息以及定时任务相关的信息除外,他们会写入各自的日志文件。
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 身份验证相关的所有信息存放在指定文件:
authpriv.* /var/log/secure
# 邮件的所有信息存放在指定文件。此处有一个“-”符号,表示是使用异步的方式记录,因为日志通常会比较大。
mail.* -/var/log/maillog
# 指定定时任务的日志文件的位置:
cron.* /var/log/cron
# Everybody gets emergency messages
# 记录所有的大于等于紧急级别信息,并发送给每个登录到系统的用户(*代表所有在线用户):
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### begin forwarding rule ### 转发规则
# The statement between the begin ... end define a SINGLE forwarding
# ...
# *.* @@remote-host:514
# ### end of the forwarding rule ###
----------------------
# @@表示通过TCP协议发送;@表示通过UDP进行转发。
http://www.linuxfly.org/post/170/
# 日志设备(类型).(连接符号)日志级别 日志处理方式(action)
*.info;mail.none;authpriv.none;cron.none /var/log/messages
日志设备可视为日志的类型:
日志级别:
将日志输出到指定的设备或文件:
# Record to a common file or device file:
*.* /var/log/file.log
*.* /dev/pts/0
# Test:
logger -p local3.info 'KadeFor is testing the rsyslog and logger'
将日志转发到远端:
# Forward to remote:
*.* @192.168.0.1 # 使用UDP协议转发到192.168.0.1的514(默认)端口。
*.* @@192.168.0.1:10514 # 使用TCP协议转发到192.168.0.1的10514端口。
将日志发送给用户(需要该用户在线才能收到日志信息):
# Send to user:
*.* root
*.* root,kadefor,up01 # 使用“,”号分隔多个用户
*.* * # *号表示所有在线用户
# Ignore or discard:
local3.* ~ # 忽略所有“local3”类型的所有级别的日志。
# Run the script:
local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径
# 日志内容可以作为脚本的第一个参数。
# 可用来触发报警
注意:日志记录的顺序有先后关系。
实例:过滤特定的日志到文件,忽略(丢弃)包含某个字符串的日志。
#过滤日志,由“:”号开头
:msg, contains, "error" /var/log/error.log
:msg, contains, "error" ~ #忽略包含error的日志。
:msg, contains, "user nagios" ~
:msg, contains, "user kadefor" ~
:msg, contains, "module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write" ~
local3.* ~
# PS.
& ~ #忽略所有的日志。
配置日志服务器的作用:
日志统一,集中式管理。
日志实时传送到一个更加安全的远端服务器上,真正记录用户行为,使日志的二次更改可能性大大降低,从而能够对日志进行真实回放,便于问题追踪。
服务器端(日志主机):
[root@Revlog ~]# vim /etc/sysconfig/rsyslog
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS="-c 2 -r -x -m 180"
-c:指定运行兼容模式。| -r:指定监听端口, 默认514。| -x:在接收客户端消息时,禁用DNS查找。需和“-r”参数配合使用。
-m:标记时间戳。单位是分钟,为0时,表示禁用该功能。
[root@Revlog ~]# vim /etc/rsyslog.conf
# 修改配置文件只需开启两个模块和协议支持的端口(确保下面的配置项去掉注释):
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
---------------
# 重启日志服务:
[root@Revlog ~]# /etc/init.d/rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@Revlog ~]# netstat -lntup | grep rsyslog
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 12080/rsyslogd
tcp 0 0 :::514 :::* LISTEN 12080/rsyslogd
udp 0 0 0.0.0.0:514 0.0.0.0:* 12080/rsyslogd
udp 0 0 :::514 :::* 12080/rsyslogd
客户端主机:
[root@WEB-A2 ~]# vim /etc/rsyslog.conf
$ModLoad imuxsock
$ModLoad imklog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf */
*.info;mail.none;authpriv.none;cron.none @172.16.1.30
authpriv.* @172.16.1.30
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
---------------
[root@WEB-A2 ~]# /etc/init.d/rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
我们是把公共消息日志和安全日志发送到日志主机上,在日志主机上tail /var/log/message
看到客户端主机名,说明运行正常。我们可以测试一下:
#在客户端执行下面的指令,生成一条日志:
[root@WEB-A2 ~]# logger -p info "Hello Logserver, I am the Client."
---------------
#在服务端可以看到客户端刚刚发送过来的日志信息:
[root@Revlog ~]# tail /var/log/messages
...
Mar 5 21:27:56 WEB-A2 root: Hello Logserver, I am the Client.
相关资料:
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中。
日志服务器端的配置:
# 安装MySQL服务器和日志服务连接数据库的驱动:
[root@Revlog ~]# yum install -y mysql-server rsyslog-mysql mysql
# 查看“rsyslog-mysql”安装生成了那些文件:
[root@Revlog ~]# rpm -ql rsyslog-mysql
/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-mysql-5.8.10
/usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
# Start MySQL:
[root@Revlog ~]# /etc/init.d/mysqld start
[root@Revlog ~]# mysqladmin -u root password 123456
# 导入日志文件的sql脚本,生成日志文件的数据库:
[root@Revlog ~]# mysql -uroot -p123456 < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
#查看生成的日志数据库:
[root@Revlog ~]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Syslog |
| mysql |
| test |
+--------------------+
mysql> use Syslog;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables;
+------------------------+
| Tables_in_Syslog |
+------------------------+
| SystemEvents |
| SystemEventsProperties |
+------------------------+
# 创建日志用户:
mysql> grant all on Syslog.* to 'rsyslogd'@localhost identified by 'rsyslogd123';
mysql> grant all on Syslog.* to 'rsyslogd'@'172.16.1.30' identified by 'rsyslogd123';
mysql> flush privileges;
[root@Revlog ~]# vim /etc/rsyslog.conf
# 需要加载下面的这个模块:
$ModLoad ommysql
# 添加这行,把其他行(有关日志存储设定的配置项)都注释掉,这行表示把所有的设施的所有日志都记录到数据库服务器中的Syslog数据库中,以刚刚创建的日志用户访问数据库。
# ommysql:MysqlHost,MysqlName,MysqlUser,MysqlUserPasswd
*.* :ommysql:172.16.1.30,Syslog,rsyslogd,rsyslogd123
local7.* /var/log/boot.log
-------------------
# 修改完后重启日志服务:
[root@Revlog ~]# /etc/init.d/rsyslog restart
客户端的配置:
[root@WEB-A2 ~]# vim /etc/rsyslog.conf
#添加这行用于和服务器通信:
*.* @172.16.1.30
#添加这行,把其他行(有关日志存储设定的配置项)都注释掉,这行表示把所有的设施的所有日志都记录到数据库服务器中的Syslog数据库中,以刚刚创建的日志用户访问数据库。
*.* :ommysql:172.16.1.30,Syslog,rsyslogd,rsyslogd123
-------------------
#修改完后重启日志服务:
[root@WEB-A2 ~]# /etc/init.d/rsyslog restart
验证客户端的日志文件存放位置:
#在客户端本地生成一条日志信息:
[root@WEB-A2 ~]# logger -p info "Client connect MySQL"
[root@WEB-A2 ~]# tail /var/log/messages
#本地并没有记录该日志。
验证刚刚的日志信息是否存在服务器端:
[root@Revlog ~]# tail /var/log/messages
#日志服务器也没有记录该日志信息。
验证是否存放在服务器的数据库中:
[root@Revlog ~]# mysql -uroot -p123456
mysql> select * from Syslog.SystemEvents where Message like '%connect%'\G
*************************** 1. row ***************************
ID: 123
CustomerID: NULL
ReceivedAt: 2015-03-08 18:38:36
DeviceReportedTime: 2015-03-08 18:38:36
Facility: 1
Priority: 6
FromHost: WEB-A2
Message: Client connect MySQL #可以看到,该条日志信息确实是存储到数据库中了。
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: root:
EventLogType: NULL
GenericFileName: NULL
SystemID: NULL
虽然日志存放数据库服务器中,是解决了日志集中管理,但是存放在服务器中让管理人员头疼的是不便于查看这些大量的日志,于是乎搭建一个日志分析工具就非常的有必要性了。
http://www.systeen.com/2016/05/08/install-rsyslog-v8-loganalyzer-v4-centos-7
本环境是针对上面的日志存放在数据库服务器中不方便查看,配置Loganalyzer日志分析工具来分析查看日志。
[root@Revlog ~]# yum install -y httpd php php-mysql php-gd
[root@Revlog ~]# mkdir -p /web/loganalyzer
#下载并解压软件包:
[root@Revlog tools]# tar zxvf loganalyzer-3.6.6.tar.gz
[root@Revlog tools]# cd loganalyzer-3.6.6
[root@Revlog loganalyzer-3.6.6]# ll
total 104
-rw-rw-r-- 1 root root 44527 Sep 2 2014 ChangeLog
drwxrwxr-x 2 root root 4096 Sep 2 2014 contrib
-rw-rw-r-- 1 root root 35497 Sep 2 2014 COPYING
drwxrwxr-x 2 root root 4096 Sep 2 2014 doc
-rw-rw-r-- 1 root root 8449 Sep 2 2014 INSTALL
drwxrwxr-x 14 root root 4096 Sep 2 2014 src
[root@Revlog loganalyzer-3.6.6]# mv src/* /web/loganalyzer/ #把src目录的所有文件移到站点目录中。*/
[root@Revlog loganalyzer-3.6.6]# cd contrib/
[root@Revlog contrib]# ll
total 8
-rw-rw-r-- 1 root root 49 Sep 2 2014 configure.sh
-rw-rw-r-- 1 root root 31 Sep 2 2014 secure.sh
[root@Revlog contrib]# mv ./*.sh /web/loganalyzer/
执行脚本:
[root@Revlog ~]# cd /web/loganalyzer/
[root@Revlog loganalyzer]# sh /web/loganalyzer/configure.sh
为站点新建一个虚拟主机:
[root@Revlog ~]# vim /etc/httpd/conf/httpd.conf
ServerName 172.16.1.30
#DocumentRoot "/var/www/html"
<Directory "/web">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerAdmin 89092616@qq.com
DocumentRoot "/web/loganalyzer"
ServerName www.loganalyzer.org
ServerAlias loganalyzer.org
ErrorLog "logs/la-error_log"
CustomLog "logs/la-access_log" common
</VirtualHost>
#重启服务:
[root@Revlog ~]# /etc/init.d/httpd restart
#创建数据库并进行授权:
[root@Revlog ~]# mysql -uroot -p123456
mysql> create database loganalyzer;
mysql> grant all on loganalyzer.* to lyzeruser@'172.16.1.30' identified by 'lyzeruser';
mysql> flush privileges;
Step 2-3:NEXT
Step 4
Step 7
安装细节请参考上面的网址,这里只列出了关键的几步。