|
本章目录:
1、linux日志管理回顾
2、使用php-syslog-ng实现日志集中管理
1)使用RPM安装和配置LAMP
2)上传日志管理前端对应的查询页面,并且导入数据库模板
3)安装新的日志服务器支持日志的mysql管理,代替原来旧的syslog日志服务器
4)配置日志客户端
5)通过WEB界面访问收集到的日志
6)配置日志滚动
1、linux日志管理回顾(sysklogd)
linux系统中有两大类日志:
1、内核日志 -->/dev/log
2、系统日志(软件日志) -->/proc/kmsg
1)默认日志文件介绍:
ls /var/log/ --此目录下很多系统日志都存放在此,需要独立分区
/var/log/messages --非常重要的日志文件,几乎所有系统发生的重要错误都会记录在此
/var/log/secure --ssh ftp telnet pop3等有关
/var/log/dmesg --开机时核心检测过程中所产生的信息
/var/log/cron --查看时间任务有关的日志
/var/log/wtmp --用last查看,不能直接cat
/var/log/btmp --用lastb查看,登录失败的记录,不能直接cat
/var/log/lastlog --用lastlog查看
/var/log/boot --boot相关
/var/log/rpmpkgs --rpm相关
/var/log/maillog --mail相关
/var/log/spooler --news,uucp
/var/log/acpid --高级电源管理
/var/log/yum.log --yum程序相关的日志
还有一种日志就是每个服务所保存的日志,路径因服务会有所不同
一般是在/var/log/服务名/ 下
httpd:
/var/log/httpd/
2)日志服务器的软件组:
# rpm -ql sysklogd-1.4.1-44.el5
/etc/logrotate.d/syslog --日志滚动配置文件
/etc/rc.d/init.d/syslog --启动脚本
/etc/sysconfig/syslog --扩展配置文件
/etc/syslog.conf --主配置文件
/sbin/klogd --监控内核日志的命令
/sbin/syslogd --临近系统日志的命令
3)/etc/syslog.conf文件中的元素:
日志设备:(facility)
auth -- pam产生的日志
authpriv --包括权限,登录相关的信息
cron --时间任务相关的信息,crontab,at
mail --邮件相关的信息
kern --内核产生的信息
uucp --unix to unxi copy 指的是unix系统之间拷贝协议相关的信息
news --新闻组相关的信息
local0 到 local7 --程序自定义的日志设备
日志级别(local0-local7):
(local7)debug --调试,产生的日志是最多的一个级别
(local6)info --一般信息的日志,最常用
(local5)notice --最具有重要性的普通条件的信息
(local4)warning或warn --警告级别
(local3)error --错误级别,阻止某个功能或者模块不能正常工作的信息
(local2)crit --严重级别,阻止整个系统或者整个软件不能正常工作的信息
(local1)alert --需要马上修改的信息
(local0)emerg或panic --内核崩溃等严重错误
none --什么都不记录
--上面的日志级别,从上往下级别从低到高,记录的信息是多到少,级别低的记录的信息包括级别高的
设备.日志级别的使用语法:
连接符号
. 记录大于等于此等级
.= 只记录等于此等级的信息
.! 不等于此等级,也就是记录此等级之外的信息
; 可以写多个日志的定义
输出设备:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
1、文件
2、tty[1-6] ttyS0
3、远程日志 @
解释默认日志配置文件:/etc/syslog.conf
#kern.* /dev/console
--/dev/console指的是一种外接的终端设备,有些封闭主机(没有screen,keyboard,mouse等),可能会需要外接设备连接
*.info;mail.none;authpriv.none;cron.none /var/log/messages
--记录所有日志类型的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,new的crit信息到/var/log/spooler
local7.* /var/log/boot.log
--把boot messages记录到/var/log/boot.log
4)配置实例
例1:
只记录mail的info级别信息到/var/log/newmaillog
mail.=info /var/log/newmaillog
例2:
记录时间任务的info级别以上的所有信息(除了err外)到/var/log/newcron
cron.info;cron.!err /var/log/newcron
cron.err /var/log/cron.err
例3:
开启debug日志(当服务配置时发生错误,而又无法得知错误是如何造成):
# vim /etc/syslog.conf
*.debug /var/log/debug.log
例4:
远程日志(日志集中管理):
client(*)-->server
服务端配置:
# vi /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-r -x -m 0"
-r enables logging from remote machines
-x disables DNS lookups on messages recieved with -r
# service syslog restart
# netstat -unlp |grep :514
日志客户端配置:
# vim /etc/syslog.conf
*.* @server_ip
logrotate - rotates, compresses, and mails system logs
日志轮转 rotate 日志切割
# rpm -q logrotate --确认软件是否已经安装
logrotate-3.7.4-9
# rpm -ql logrotate
/etc/cron.daily/logrotate --crontab按天来执行logrotate
/etc/logrotate.conf --主配置文件
/etc/logrotate.d --扩展配置文件
/usr/sbin/logrotate
常见的默认已经定义轮转的日志有:
/var/log/messages
/var/log/cron
/var/log/boot.log
/var/log/maillog
/var/log/secure
# vim /etc/logrotate.conf --配置文件
# see "man logrotate" for details
# rotate log files weekly
weekly --默认是一个星期rotate一次
# keep 4 weeks worth of backlogs
rotate 4 --默认保留4个
# create new (empty) log files after rotating old ones
create --rotate后,创建一个新的代替
# uncomment this if you want your log files compressed
#compress --默认没有打开日志压缩功能
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d --这表示/etc/logrotate.d目录下的所有配置文件都生效
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp { --针对wtmp单独的配置,这里是绝对路径
monthly --一个月rotate一次,取代上面的全局配置里的一个星期一次
minsize 1M --指定最小大小为1M,才rotate,就算是时间到了,大小没有1M,也不rotate
create 0664 root utmp --定义创建的为属性为0664,属主为root,属组utmp
rotate 1 --保留一个
}
# vim /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
prerotate
echo "before rotate" | mail root --轮转前发邮件
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
echo "end rotate" |mail root --轮转后发邮件
endscript
}
# logrotate -vf /etc/logrotate.conf --强制轮转日志,并查看轮转的过程
给/var/log/debug.log做日志滚动:
# vim /etc/logrotate.d/debug
/var/log/debug.log {
missingok
notifempty
size 50k
rotate 365
daily
compress
dateext
create 0600 root user01
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
# /usr/sbin/logrotate /etc/logrotate.conf --按照配置文件来作日志滚动,如果不符合滚动要求,则放弃。
# /usr/sbin/logrotate -vf /etc/logrotate.conf --强制滚动日志
总结:
1、配置文件有两个,logrotate.conf全局的配置文件,/etc/logrotate.d/*局部配置文件
2、如果全局配置文件与局配置文件中有冲突,以局部配置文件中的选项为准
3、手工滚动:/usr/sbin/logrotate /etc/logrotate.conf 或强制:/usr/sbin/logrotate -vf /etc/logrotate.conf
4、自动滚日志crontab--> /etc/cron.daily/logrotate
2、使用php-syslog-ng+LAMP+syslog-ng实现日志集中管理
服务器上安装的软件组成:
LAMP
syslog-ng --日志服务器
php-syslog-ng --前端查询页面
客户端需要安装的软件:
syslog-ng-client --日志客户端
1)使用RPM安装和配置LAMP
# yum -y install httpd php php-mysql mysql-server
# service httpd start
# chkconfig httpd on
# service mysqld start
# chkconfig mysqld on
2)上传日志管理前端对应的查询页面,并且导入数据库模板
上传页面:
# tar xzvf php-syslog-ng-2.9.1r10.tar.gz
# cp -r html/* /var/www/html/
新建数据库和对应账号:
mysql> create database syslog;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on syslog.* to dbuser@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
导入数据:
# mysql -udbuser -p123 syslog < /var/www/html/install/sql/dbsetup.sql
3)安装新的日志服务器支持日志的mysql管理,代替原来旧的syslog日志服务器
# rpm -ivh syslog-ng-3.0.9-1.rhel5.i386.rpm
# chkconfig --list |grep syslog
syslog-ng 0:off 1:off 2:on 3:on 4:on 5:on 6:off
修改syslog-ng默认配置文件,支持从网络接受来自其它服务器发送过来的日志,另外把接收到的日志和本地日志写入数据库对应的库和表中:
# vim /opt/syslog-ng/etc/syslog-ng.conf --把原来的配置清空,加入以下内容
@version: 3.0
source s_all {
internal();
unix-stream("/dev/log");
file("/proc/kmsg" program_override("kernel"));
udp(
ip(0.0.0.0)
port(514)
);
tcp(
ip(0.0.0.0)
port(514)
);
};
destination d_mysql {
pipe("/var/log/mysql.pipe"
template("INSERT INTO logs
(host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC',
'$PROGRAM', '$MSG' );\n") template-escape(yes));
};
log {
source(s_all);
destination(d_mysql);
};
重启服务:
# /etc/init.d/syslog-ng restart
# netstat -nlp|grep :514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 4283/syslog-ng
udp 0 0 0.0.0.0:514 0.0.0.0:* 4283/syslog-ng
通过脚本把syslog-ng接收到的所有日志都写入mysql中
# vim /root/syslog2myssql.sh
#!/bin/bash
if [ ! -e /var/log/mysql.pipe ]
then
mkfifo /var/log/mysql.pipe
fi
while [ -e /var/log/mysql.pipe ]
do
mysql -udbuser -p123 syslog < /var/log/mysql.pipe >/dev/null
done
在后台运行这个程序
# nohup /bin/bash /root/syslog2myssql.sh & --使用nohup的方式启动,这样脚本运行时不需要依赖任何的端终
设置开机自启动:
# vim /etc/rc.local
nohup /bin/bash /root/syslog2myssql.sh &
4)配置日志客户端
# scp syslog-ng-client-3.0.9-1.rhel5.i386.rpm 192.168.1.11:/root
# rpm -ivh syslog-ng-client-3.0.9-1.rhel5.i386.rpm --安装此客户端后,同样原来的日志服务器也会被关闭,使用新的日志服务器
# vim /opt/syslog-ng/etc/syslog-ng.conf
@version: 3.0
options {
};
source s_local {
internal();
unix-stream("/dev/log");
file("/proc/kmsg" program_override("kernel"));
};
destination d_messages { file("/var/log/messages"); }; --两个日志目标,一个本地,一个远程日志服务器
destination d_logserver { udp("192.168.0.1");};
log {
source(s_local);
destination(d_messages);
destination(d_logserver);
};
重启服务:
# service syslog-ng restart
5)通过WEB界面访问收集到的日志
1、验证server(192.168.1.10)和clinet(192.168.1.11)的日志有没有被 写入数据库
在192.168.1.10登录数据库查看
mysql> select * from logs;
+--------------+----------+----------+--------+------+---------------------+-----------+-------------------------------------------------------------------------------------------------------+-----+
| host | facility | priority | level | tag | datetime | program | msg | seq |
+--------------+----------+----------+--------+------+---------------------+-----------+-------------------------------------------------------------------------------------------------------+-----+
| logserver | syslog | info | info | 2e | 2011-09-25 15:26:47 | syslog-ng | Termination requested via signal, terminating; | 19 |
| logserver | syslog | notice | notice | 2d | 2011-09-25 15:26:47 | syslog-ng | syslog-ng shutting down; version='3.0.9' | 20 |
| 192.168.1.11 | syslog | info | info | 2e | 2011-09-25 15:26:54 | syslog-ng | Termination requested via signal, terminating; | 22 |
| 192.168.1.11 | syslog | notice | notice | 2d | 2011-09-25 15:26:54 | syslog-ng | syslog-ng shutting down; version='3.0.9' | 23 |
2、为了方便日志的查询及管理使用php-syslog-ng提供WEB界面的日志管理
# chown -R apache /var/www/html/config
# firefox http://192.168.1.10/install --保证以下都是通过检测的,不然无法进行后续的安装
记住密码,然后点击View Site访问站点页面,并使用对应的账号和密码登录,部署到此结束。
6)配置日志滚动(最小滚动周期1天)
# vim /var/www/html/config/config.php
7 define('LOGROTATERETENTION', 30); --定义保存多少份旧日志
手工滚动日志:
# vim /var/www/html/scripts/logrotate.php
6 $APP_ROOT = '/var/www/html';
# /var/www/html/scripts/logrotate.php
自动滚动:
# crontab -e
55 23 * * * /www/html/scripts/logrotate.php &> /dev/null
打补丁:
# cp logrotate.patch /var/www/html/scripts
# cd !$
# patch -p1 logrotate.php < logrotate.patch
|
|