1. 介绍

在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态。 如登陆历史、邮件、软件安装等日志。系统管理员一个个去检查会十分不方便;且大多时候,这会是一种被动的检查,即只有在发现系统运行异常时才会想到去查看日志以获取异常的信息。那么如何主动、集中的分析这些日志,并产生报告,定时发送给管理员就会显得十分重要。

logwatch 是一款用 Perl 语言编写的开源日志解析分析器。它能对原始的日志文件进行解析并转换成结构化格式的文档,也能根据您的使用情况和需求来定制报告。logwatch 的主要目的是生成更易于使用的日志摘要,并不是用来对日志进行实时的处理和监控的。正因为如此,logwatch 通常被设定好时间和频率的自动定时任务来调度运行或者是有需要日志处理的时候从命令行里手动运行。一旦日志报告生成,logwatch 可以通过电子邮件把这报告发送给您,您可以把它保存成文件或者直接显示在屏幕上。

Logwatch 报告的详细程度和报告覆盖范围是完全可定制化的。Logwatch 的日志处理引擎也是可扩展的,从某种意义上来说,如果您想在一个新的应用程序中使用 logwatch 功能的话,只需要为这个应用程序的日志文件编写一个日志处理脚本(使用 Perl 语言),然后挂接到 logwatch 上就行。

logwatch 有一点不好的就是,在它生成的报告中没有详细的时间戳信息,而原来的日志文件中是存在的。您只能知道被记录下来的一段时间之内的特定事件,如果想要知道精确的时间点的信息,就不得不去查看原日志文件了。

2. 安装与配置说明

2.1 安装

无论在Debian系还是Redhat系上,安装logwatch都非常简单:

# apt-get install logwatch     //Debian、Ubuntu.etc
# yum install logwatch -y //Redhat、Centos.etc

以下内容基于 CentOS 6.x,其余系统相差不大。

2.2 配置

2.2.1 配置文件说明

安装后的目录文件说明:

/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/logwatchlogwatch.conf中没有的选项)。但优先级最高的是在执行命令行中指定的选项。

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

从上面的目录结构划分大概可以了解到 logwatch 的原理:logwatch 首先要知道针对哪一个服务, 从这个服务中得到需要处理的 log 文件信息, 然后这个文件送给过滤脚本处理,之后把处理后格式化的信息展现出。内部细节请看第3篇参考。

2.2.2 编辑配置

/usr/share/doc/logwatch-7.3.6/HOWTO-Customize-LogWatch文件中有这里的详细的配置说明。

个人还是习惯在/etc/logwatch/下管理配置文件,但又不太希望同时两个配置文件生效,所以对/usr/share/logwatch/default.conf/logwatch.conf备份,然后软链接/etc/logwatch/conf/logwatch.conf

ln -s /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf

试着执行logwatch --service sshd --print感受一下处理的结果。接下来修改/etc/logwatch/conf/logwatch.conf文件的默认配置来做些个性化设置。

修改日志分析级别

Detail = <Low, Med, High, or a number>

“Detail” 配置指令控制着 logwatch 报告的详细程度。它可以是个正整数,也可以是分别代表着10、5和0数字的 High、Med、Low 几个选项。这里设置成High。(配置文件中是不区分大小写的)

指定报告收件人

MailTo = youremailaddress@yourdomain.com

MailFrom = youremailaddress@yourdomain.com

MailTo指定logwatch日志报告接收人,要把一份报告发送给多个用户,只需要把他们的邮件地址用空格或逗号隔开,但是logwatch认为你已经配置好本地邮件服务器(sendmail或postfix),并能正确传递给用户邮箱。

MailFrom,顾名思义,指定发件人。邮件地址可以说完整的收件人地址,也可以是服务器上的本地用户如root(有的邮件服务器不支持显示发件人别名)。

指定发送邮件的客户端

mailer = "sendmail -t"

默认采用的是sendmail(不是sendmail服务器),而且一般没什么问题。在我的环境下有点特殊,邮件服务器必须通过smtp认证才能发送邮件,不支持匿名和其他本地MTA投递的邮件,而sendmail我一直没有找到设置smtp用户和密码认证的地方(知道的烦请告知),所以就改用了mailer = "mailx -t",然后在/etc/mail.rc中设置fromsmtpsmtp-auth-usersmtp-auth-passwordsmtp-auth参数,但使用mailx带来的问题是后面设置邮件报告格式为html时,无法设置header信息从而foxmail不能解析html正文。尝试了 sendEmail 也没很好的解决。

大部分人情况可能没这么复杂,其实就是一个发件客户端的功能,网上得知有 mutt 结合 msmtp 可以解决该问题:

# yum install -y mutt       //mutt其实可以不安装
# tar jxvf msmtp-1.4.16.tar.bz2 && cd msmtp-1.4.16
# ./configure && make && make install # vi ~/.msmtprc
account default
host your.smtp-server.com
from username@smtp-server.com
auth login
user username
password your_auth_pwd
logfile ~/msmtp.log # 如果使用mutt发送,还需要设置~/.muttrc

将 mailer 改成mailer = "msmtp -t"

输出格式

Output = <mail, html or unformatted>

默认不指定输出格式(plain text),系统管理员通过邮件客户端(如foxmail)看到的邮件内容是文本形式,比较简单、节省带宽;可以指定为html,此时看到的是可点击链接的友好的页面。

当同时设定了Save = /tmp/logwatch时,便不会发送邮件报告了,将会根据Output指定的格式保存到一个Save文件中。

另外在有的文章里指定Format选项,经过本人试验在7.3.6版本中无效。

收集日志的范围

Range = <Yesterday|Today|All>

Range配置指令定义了生成 logwatch 报告的时间段信息。这个指令通常可选的值是 Yesterday、Today、All。当作用了Rang = All时,Archive = yes 这个指令项也必须配置上,那么所有的已存档的日志文件 (比如,/var/log/maillog、/var/log/maillog-20150111)都会被处理到。

如果我们是通过 crontab 每天收集的话,可以只报告昨天或今天的日志情况。

收集哪些服务的日志

Service = <service-name-1>
Service = <service-name-2>
. . .

Service选项指定想要监控的一个或多个服务。在/usr/share/logwatch/scripts/services目录下列出的服务都能被监控,它们已经涵盖了重要的系统服务(例如:pam,secure,iptables,syslogd 等),也涵盖了一些像 sudo、sshd、http、fail2ban、samba等主流的应用服务。如果您想添加新的服务到列表中,得编写一个相应的日志处理 Perl 脚本,并把它放在这个目录中。

对于一个综合日志分析工具,logwatch推荐大多数人使用Service = "All",然后通过继续添加Service = "-service_name"等来去掉那些不监控的日志。当然在服务器上,并不是所有script下的服务都有启动,有些并没有日志。

命令行指定logwatch选项

如果您不想个性化 /etc/logwatch/conf/logwatch.conf,您可以不修改此文件让其默认,然后在命令行里运行如下所示的命令:

# logwatch --detail 10 --mailto youremailaddress@yourdomain.com --range today \
> --service sshd --service postfix --service zz-disk_space --service -zz-network \
> --output mail

logwatch.conf完整示例

LogDir = /var/log
TmpDir = /var/cache/logwatch
Print = No Range = yesterday
Detail = High MailTo = zhouxiao@example.com
MailFrom = itsection@example.com
mailer = "msmtp -t"
Output = html Service = All
Service = "-zz-network"
Service = "-zz-sys"
Service = "-eximstats"

3. 扩展

3.1 cron daily

我们可以看到在 crontab 定时任务设定目录下存在/etc/cron.daily/0logwatch

#!/bin/bash

DailyReport=`grep -e "^[[:space:]]*DailyReport[[:space:]]*=[[:space:]]*" /usr/share/logwatch/default.conf/logwatch.conf | head -n1 | sed -e "s|^\s*DailyReport\s*=\s*||"`

if [ "$DailyReport" != "No" ] && [ "$DailyReport" != "no" ]
then
logwatch
fi

如果在logwatch.conf中显式设置了选项DailyReport = No,则会取消logwatch每日执行任务。如果你要修改cron.daily的执行时间,可以删掉这个0logwatch然后添加到/etc/crontab里,或者修改/etc/anacrontabSTART_HOURS_RANGE

所以 logwatch 的工作不是监控日志异常后及时报警的工具,因为默认它是每天一封整合的邮件,并不具有及时性(安装perl的CPAN模块后可以更精确的控制logwatch时间,详见第一份参考)。

3.2 定制自己要监控的日志

用一个简单的例子介绍自定义logwatch的配置方法。

首先创建logwatch日志文件组
/etc/logwatch/conf/logfiles/test.conf

LogFile = /path/to/your/logfile
LogFile = /path/to/your/second/logfile

然后创建logwatch服务配置文件
/etc/logwatch/conf/services/test.conf

Title = test title     # 日志文件里的标题
LogFile = test # logwatch日志文件组的名字,通常是对应的配置文件的文件名部分

创建logwatch服务过滤器脚本
/etc/logwatch/scripts/services/test

#!/bin/bash

grep -i ERROR

上面的脚本会从日志文件里过滤出包含ERROR的行。最后,为新建的脚本添加执行权限:

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

logwatch日志监控的更多相关文章

  1. [Asp.net]SignalR实现实时日志监控

    摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统.就想着如果通过.net该如何实现?所以就在想 ...

  2. MySQL慢日志监控脚本实例剖析

    公司线上的 MySQL 慢日志,之前一直没有做好监控.趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下. 针对脚本的注解和整体构思,我会放到脚本之后为大家详解. 1 2 3 ...

  3. ElasticSearch实战-日志监控平台

    1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件——ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...

  4. 总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站

    总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站 极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 极分享:高质分享+专业互助=没有 ...

  5. SignalR实现实时日志监控

    .net SignalR实现实时日志监控   摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统 ...

  6. windows日志监控

    bat脚本,主要作用,每个五分钟读取日文本件中新增内容,进行错误赛选,如果有错误信息,将错误信息用邮件发送给管理员. 其中awk和sed需要手动下载 :读取number.txt文档,获取上一次执行时文 ...

  7. 一种轻量级的微信小程序日志监控的方法

    今天一个活动要写个H5,明天一个功能要用小程序,天天都在写bug.用户反馈小程序用起来有问题还特么还不知道到底出了啥bug,反馈多了,老板要扣工资了!看来挖了太多坑不填也不行,程序异常还是要主动追踪, ...

  8. ELK日志监控平台安装部署简介--Elasticsearch安装部署

    最近由于工作需要,需要搭建一个ELK日志监控平台,本次采用Filebeat(采集数据)+Elasticsearch(建立索引)+Kibana(展示)架构,实现日志搜索展示功能. 一.安装环境描述: 1 ...

  9. 24 Zabbix系统配置日志监控告警--关键字触发

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 24 Zabbix系统配置日志监控告警--关键字触发 trapper是被监控主机主动发送数据给za ...

随机推荐

  1. The view 'Index' or its master was not found or no view engine supports the

    ASP.net  MVC 5  WebApi部署IIS提示: 未找到视图“索引”或其母版视图,或没有视图引擎支持搜索的位置.搜索了以下位置: 其他设置一切正常 这种情况很有可能是,1.部署的路径中空格 ...

  2. fill,fill-n,memset的区别

    这里在网上搜集归纳了一个总结 memset函数 按照字节填充某字符 在头文件<string.h>中 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为 ...

  3. BZOJ 3639: Query on a tree VII LCT_set维护子树信息

    用 set 维护子树信息,细节较多. Code: #include <cstring> #include <cstdio> #include <algorithm> ...

  4. javascript面向对象编程,带你认识封装、继承和多态

    原文链接:点我 周末的时候深入的了解了下javascript的面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森 什么是面向对象编程 先上一张图,可以对面向对象有一个大致的了 ...

  5. 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心

    题目链接 题意 给你一个N*M的矩阵 (N,M <=2000)  把他分成两部分 使两部分的极差较大的一个最小  求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...

  6. Win10 + YOLOv3训练VOC数据集-----How to train Pascal VOC Data

    How to train (Pascal VOC Data): Download pre-trained weights for the convolutional layers (154 MB):  ...

  7. P4287 [SHOI2011]双倍回文(回文树)

    题目描述 记字符串 w 的倒置为 w^R^ .例如 (abcd)^R^=dcba , (abba)^R^=abba . 对字符串x,如果 x 满足 x^R^=x ,则称之为回文:例如abba是一个回文 ...

  8. 虚构造函数与prototype

    注意,构造函数不能是虚的,不然不会生效?(构造函数里面调用虚的函数,也不会生效). 而虚构造函数,指的是通过一个虚函数,来调用clone方法,生成一个新的实例.而这个clone里面,一般调用的是拷贝构 ...

  9. Android旋转屏幕后国际化语言失效的解决的方法

    本文已同步至个人博客:liyuyu.cn 近期在项目中使用到了国际化多语言(英文+中文),但在使用时发现了一个问题.当屏幕旋转后.APP语言(中文)自己主动转换为了系统语言(英文).设置了Activi ...

  10. vue21 slot占位

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...