--> logwatch是一个日志总结工具,在Redhat Linux的平台上,它被默认安装。在/etc/cron.daily目录下有一个指向logwatch的链接。每天系统都会执行一次脚本,分析日志文件,对前一天的系统状况进行统计,并将统计报告以邮件形式发送给root。以下就是一封来自logwatch的日志报告。
From root@localhost.localdomain Fri Feb 1 04:02:06 2008
Date: Fri, 1 Feb 2008 04:02:05 +0800
From: root <root@localhost.localdomain>
To: root@localhost.localdomain
Subject: LogWatch for supersun
################### LogWatch 5.2.2 (06/23/04) ####################
Processing Initiated: Fri Feb 1 04:02:03 2008
Date Range Processed: yesterday
Detail Level of Output: 0
Logfiles for Host: supersun
################################################################
--------------------- ftpd-xferlog Begin ------------------------
TOTAL KB IN: 3771419KB (3771MB)
Incoming Anonymous FTP Transfers:
192.168.0.17 -> /pub/????????@yourenergy/????14_PIANO CONCERTO NO.21.mp3
---------------------- ftpd-xferlog End -------------------------
--------------------- pam_unix Begin ------------------------
crond:
Unknown Entries:
session closed for user root: 26 Time(s)
session opened for user root by (uid=0): 26 Time(s)
su:
Sessions Opened:
(uid=0) -> oracle: 1 Time(s)
---------------------- pam_unix End -------------------------
--------------------- sendmail Begin ------------------------
Bytes Transferred: 25147
Messages Sent: 4
Total recipients: 4
---------------------- sendmail End -------------------------
--------------------- SSHD Begin ------------------------
Users logging in through sshd:
root:
sun (192.168.0.17): 10 times
192.168.0.7: 1 time
---------------------- SSHD End -------------------------
------------------ Disk Space --------------------
/dev/hda5 15G 7.4G 6.4G 54% /
/dev/hda2 190M 11M 170M 7% /boot
/dev/hda6 35G 9.7G 23G 30% /home
/dev/hda1 20G 16G 3.1G 84% /opt
###################### LogWatch End #########################
如果不带任何参数运行logwatch,logwatch会以配置文件中的信息运行程序。我们也可以通过在命令中设置参数来覆盖配置文件中的参数。
常用的选项有:
--detail <level>: 报告的详细程序,可用的值为:High, Med, Low or 0-10;
--logfile <name>: 日志文件文件名,如:messages、auth.log等;
--service <name>: 服务名,各个服务有对应的解析脚本,这些脚本位与以下目录中(/usr/share/logwatch/scripts/services/或/etc/log.d/scripts/services);
--print: 打印打标准输出;
--mailto <addr>: 收件人地址;
--archives: 使用压缩的文件或轮转的文件,如:messages.1、messages.1.gz;
--save <filename>: 保存到文件 <filename>.
--range <range>: 日期范围:Yesterday、Today、All;
--debug <level>: 试调级别: High、Med、Low ;
--splithosts: 为每个主机创建一份报告;
--multiemail: 将报告发送给多个邮件地址;
在新版本的logwatch中有一个选项--splithosts可以为每台主机生成一份报告,这一点对于分析中央日志主机的日志很方便。
因此,我首先配置中央日志主机,然后更改logwatch的配置文件logwatch.conf,将LogDir的值定到日志文件目录(这改变了日志的存放路径),并在/etc/cron.daily目录下创建一脚本logparse.sh,内容如下:
#!/bin/sh
DATE=`date --date=yesterday`
SUBJECT=${DATE}"日志"
/usr/sbin/logwatch --print --splithosts |/usr/local/bin/notify_via_smtp -s "$SUBJECT" -t logparse@supersun.biz
这里的notify_via_smtp是一个发送邮件的脚本(注意下划线部分是根据实际情况变动的):
#!/usr/bin/perl -w
use strict;
use Email::Send;
use Getopt::Std;
my %opts;
getopt('ts',\%opts);
my $subject=$opts{s};
my $receiver=$opts{t};
my $sender='logwatch@supersun.biz';
my $string=join '',<>;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime;
$year+=1900;
my @month=qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @week=qw(Sun Mon Tue Wed Thu Fri Sat);
my $time=$week[$wday].",".$mday.' '.$month[$mon].' '.$year.' '.$hour.':'.$min.':'.$sec.' +0800';
my $msg=<< "__MESSAGE__";
To: $receiver
From: $sender
Subject: $subject
Date: $time
$string
__MESSAGE__
my $sendit= Email::Send->new({mailer => 'SMTP'});
$sendit->mailer_args([Host => 'mail.supersun.biz']);
$sendit->send($msg);

发表评论