logwatch日志监控
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/logwatch的logwatch.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中设置from、smtp、smtp-auth-user、smtp-auth-password、smtp-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/anacrontab的START_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日志监控的更多相关文章
- [Asp.net]SignalR实现实时日志监控
摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统.就想着如果通过.net该如何实现?所以就在想 ...
- MySQL慢日志监控脚本实例剖析
公司线上的 MySQL 慢日志,之前一直没有做好监控.趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下. 针对脚本的注解和整体构思,我会放到脚本之后为大家详解. 1 2 3 ...
- ElasticSearch实战-日志监控平台
1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件——ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...
- 总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站
总结2015搭建日志,监控,ci,前端路由,数据平台,画的图与界面 - hugo - ITeye技术网站 极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 极分享:高质分享+专业互助=没有 ...
- SignalR实现实时日志监控
.net SignalR实现实时日志监控 摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统 ...
- windows日志监控
bat脚本,主要作用,每个五分钟读取日文本件中新增内容,进行错误赛选,如果有错误信息,将错误信息用邮件发送给管理员. 其中awk和sed需要手动下载 :读取number.txt文档,获取上一次执行时文 ...
- 一种轻量级的微信小程序日志监控的方法
今天一个活动要写个H5,明天一个功能要用小程序,天天都在写bug.用户反馈小程序用起来有问题还特么还不知道到底出了啥bug,反馈多了,老板要扣工资了!看来挖了太多坑不填也不行,程序异常还是要主动追踪, ...
- ELK日志监控平台安装部署简介--Elasticsearch安装部署
最近由于工作需要,需要搭建一个ELK日志监控平台,本次采用Filebeat(采集数据)+Elasticsearch(建立索引)+Kibana(展示)架构,实现日志搜索展示功能. 一.安装环境描述: 1 ...
- 24 Zabbix系统配置日志监控告警--关键字触发
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 24 Zabbix系统配置日志监控告警--关键字触发 trapper是被监控主机主动发送数据给za ...
随机推荐
- 在Ubuntu上创建一个可以启动的U盘
1.概观 使用可启动的Ubuntu USB盘,您可以: 安装或升级Ubuntu 在不触及PC配置的情况下测试Ubuntu桌面体验 在借来的机器或网吧上启动到Ubuntu 使用USB盘上默认安装的工具来 ...
- python IO编程-序列化
原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143192607 ...
- 第三讲 $\mathbb{R}^4$上平凡主丛的联络、曲率与Yang-Mills泛函
一. $\mathbb{R}^4$或$\mathbb{R}^n$上平凡主丛的联络与曲率$\newcommand{\R}{\mathbb{R}}$ 回忆切丛$T\R^n\cong \R^n\times\ ...
- 【SRM 716 DIV 1 A】 ConstructLCS
Problem Statement A string S is a subsequence of a string T if we can obtain S from T by erasing som ...
- hbase源码系列(十二)Get、Scan在服务端是如何处理
hbase源码系列(十二)Get.Scan在服务端是如何处理? 继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Del ...
- usb芯片调试经验
记录一下调试usb有关的芯片的一些经验. 1.有i2c的芯片.一般有i2c的地址选择. 检查地址选择是否正确,地址是多少.SCL和SDA上面是否有上拉电阻. 芯片的地址是几位的.I2c的时钟频率也是必 ...
- PHP 做图片锐化处理
<?php //读取图像的类型 //1=GIF,2=JPG,3=PNG,4=SWF,5=PSD,6=BMP,7=TIFF(intelbyteorder),8=TIFF(motorolabyteo ...
- android YUV Sensor配置Camera应用的flash auto菜单
请在Config.ftbl.flashlight.h (mediatek\custom\common\hal\flashlight\src)中. 将全部的两处凝视掉的code: //CameraPar ...
- Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果
这里我们用TabLayout来实现这一效果.TabLayout是Android Design Support Library库中的控件.Google在2015的IO大会上,给我们带来了更加详细的Mat ...
- Ubuntu 安装软件和centos 对比命令
之前都是使用Redhat 或者Centos 等rpm的linux ,开始使用ubuntu 很不习惯 1. 安装命令Centos : yum install httpd ...