介绍:

Logwatch是使用 Perl 开发的一个日志分析工具。

Logwatch能够对Linux 的日志文件进行分析,并自动发送mail给相关处理人员,可定制需求。

Logwatch的mail功能是借助宿主系统自带的mail server 发邮件的,所以系统需安装mail server , 如sendmail,postfix,Qmail等

安装:

redhat,centOS: yum -y install logwatch
debian,ubuntu: apt-get install logwatch


目录结构:

/usr/share/logwatch
    default.conf/     # 配置目录
        logwatch.conf   # 主配置文件,收件人,级别等
        logfiles/       # 定义待分析服务的日志文件组路径,相对于/var/log(*.conf)
        services/       # 自定义需分析日志的Service目录(*.conf)
    scripts/          # 可执行脚本
        logwatch.pl     # 启动分析的perl脚本,/usr/sbin/logwatch的源链接
        logfiles/       # 可包含多个logwatch日志文件组的子目录,对应的日志服务运行的时候,子目录下的脚本会自动被调用
        services/       # logwatch日志服务的过滤脚本,一一对应
        shared/         # 可被多个logwatch日志服务引用的脚本
    dist.conf/
        logfiles/
        services/
    lib/

默认情况下使用的是/usr/share/logwatch/default.conf/logwatch.conf作为主配置文件,但在/etc/logwatch/conf/logwatch.conf中的存在配置选项会覆盖前一个(/usr/share/logwatch下的logwatch.conf还是会起作用,比如在/etc/logwatch的logwatch.conf中没有的选项)。但优先级最高的是在执行命令行中指定的选项。

在/etc/logwatch下也存在一个与/usr/share/logwatch类似的目录结构,可以在这里添加自定义的监控日志信息。

配置结构:

这三个目录的内容是/usr/share/logwatch/default.conf,/usr/share/logwatch/dist.conf和/etc/logwatch/conf,都有相同结构:

services:此子目录包含配置特定于每个服务的文件。Logwatch确定哪些服务可用检查此目录的内容。每个服务配置文件由其服务名称带有“.conf”后缀。
logfiles:此子目录包含日志文件组配置文件。每个日志文件组配置文件包含有关信息一个或多个具有相同格式的日志文件。几个服务可能使用相同的日志文件组配置文件。每一个配置文件由组命名名称与“.conf”后缀。许多的组名取自该名称的系统日志文件(如消息,邮件日志,安全等),但不总是。
logwatch.conf:此文件包含默认值整体执行Logwatch,并影响全部的服务。它的许多参数都可以当命令行开关被覆盖调用Logwatch可执行文件。

ignore.conf:该文件指定正则表达式,当与logwatch的输出匹配时,会抑制匹配线,无论哪一个正在执行服务。

/etc/logwatch/conf目录也可能包含文件'override.conf'

可执行结构:

两个目录的内容/usr/share/logwatch/scripts和/etc/logwatch/scripts具有相同的结构:
services:此子目录包含可执行文件为每项服务。除非另有规定在配置服务文件(见上文)中,可执行文件是用perl语言编写的。
shared:此子目录包含可执行文件由多个配置服务调用文件。

logfiles:此子目录可能包含子目录日志文件组名。每个可执行文件这些子目录自动被调用运行使用相应的服务日志文件组名。


编辑配置:

cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf

vim /etc/logwatch/conf/logwatch.conf   #配置文件中不区分大小写
MailTo = root       #指定电子邮件地址,每日发送报告,多邮箱逗号隔开
LogDir = /var/log   #定义日志文件位置
TmpDir = /var/cache/logwatch    #缓存
MailFrom = Logwatch  #邮件发送来源
Print =            #选项yes会打印到系统输出,不会发送到设定邮箱,NO则会发送到邮箱
Range = yesterday  #接受范围,如yesterday昨天或today今天或all所有
#Range = all   #当配置所有日志时,必须配上archive = yes 将会处理所有的包括已存档的日志
#Archive = yes
Detail = High    #等级,低:Low=0,中:Med=5,高:High = 10  字母或数字都可以
Service = All    #所有服务,或指定某个服务
Service = "-zz-network"    #在前面加“-”表示不监控服务
Service = "-zz-sys"         #Service选项指定想要监控的一个或多个服务。在/usr/share/logwatch/scripts/services目录下列出的服务都能被监控
Service = "-eximstats"      
mailer = "sendmail -t"  #指定发送邮件的客户端
#DailyReport = No  #禁止每日执行任务
#Output = <mail,html,unformattted>  #指定输出格式
#Save = /tmp/logwatch   #将会把输出报错到文件中

使用:

检测命令

/usr/bin/perl /usr/share/logwatch/scripts/logwatch.p


选项:

--detail<报告详细程度>: 指定日志报告的详细程度; 

--logfile<日志文件>: 仅处理指定的日志文件; 

--service<服务名>: 仅处理指定服务的日志文件; 

--print: 打印结果到标准输出; 

--mailto<邮件地址>: 将结果发送到指定邮箱; 

--range<日期范围>: 指定处理日志的日期范围; 

--archives: 处理归档日志文件; 

--debug<调试等级>: 调试模式; 

--save<文件名>: 将结果保存到指定文件中,而不显示或者发送到指定邮箱; 

--logdir<目录>: 指定查找日志文件的目录,而不使用默认的日志目录; 

--hostname<主机名>: 指定在日志报告中使用的主机名,不使用系统默认的主机名; 

--numeric: 在报告中显示ip地址而不是主机名; 

--help: 显示指令的帮助信息。


实例:

logwatch --detail Low --mailto email@address --service http --range today   #将今天的http LOW日志发送到邮箱

logwatch --detail High --service all --range all --print    打印所有服务日志

logwatch --service sshd --detail high --print   打印SSHD错误日志

定制自己要监控的日志

首先创建logwatch日志文件组:

vim /etc/logwatch/conf/logfiles/test.conf
LogFile = /usr/local/nginx/logs/nginx.log

然后创建logwatch服务配置文件:

vim /etc/logwatch/conf/services/test.conf
Title = test title   #日志文件的标题
LogFile = test    #日志文件组的名字,即上面创建的日志文件组test.conf

创建logwatch服务过滤器脚本:

vim /etc/logwatch/scripts/services/test
cat /etc/logwatch/scripts/services/test 
#!/bin/sh
grep -i ERROR | wc -l

#此处实验只是简单的写了脚本,工作中可根据需要编写

给脚本文件可执行权限:

chmod +x /etc/logwatch/scripts/services/test

测试输出效果:

logwatch --service test --print    #test为服务名
 ################### Logwatch 7.3.6 (05/19/07) #################### 
        Processing Initiated: Mon May 22 14:09:22 2017
        Date Range Processed: yesterday
                              ( 2017-May-21 )
                              Period is day.
      Detail Level of Output: 10
              Type of Output: unformatted
           Logfiles for Host: zabbix
  ################################################################## 
 
 --------------------- test title Begin ------------------------ 
 1022
 
 ---------------------- test title End ------------------------- 
 
 ###################### Logwatch End #########################