生活是美好的

用戶名  找回密碼
 立即註冊
帖子
查看: 291|回復: 0

日志管理

[複製鏈接]

112

主題

112

帖子

453

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
453
發表於 2019-9-27 16:42:56 | 顯示全部樓層 |閱讀模式
本章目录:
                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
回復

舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

GMT+8, 2025-5-9 17:39 , Processed in 0.270080 second(s), 29 queries .

© 本站内容由個人原創或轉載,如果侵犯了您的合法權益,請及時聯繫處理! Email:lyb@qq.com

快速回復 返回頂部 返回列表