Linux下日志文件监控系统Logwatch的使用记录

原文:http://www.cnblogs.com/kevingrace/p/6519504.html

在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态,如登陆历史、邮件、软件安装等日志。作为运维人员,我们一个个去检查会十分不方便;且大多时候,这会是一种被动的检查,即只有在发现系统运行异常时才会想到去查看日志以获取异常的信息。那么如何主动、集中的分析这些日志,并产生报告,定时发送给管理员就会显得十分重要。对于运维人员来说,发现一款能把原始的日志文件转换成更人性化的记录摘要的工具,将会受益无穷。

logwatch介绍:
1)logwatch是一款用Perl 语言编写的开源日志解析分析器。它能对原始的日志文件进行解析并转换成结构化格式的文档,也能根据您的使用情况和需求来定制报告。logwatch的主要目的是生成更易于使用的日志摘要,并不是用来对日志进行实时的处理和监控的。正因为如此,logwatch通常被设定好时间和频率的自动定时任务来调度运行或者是有需要日志处理的时候从命令行里手动运行。一旦日志报告生成,logwatch 可以通过电子邮件把这报告发送给您,您可以把它保存成文件或者直接显示在屏幕上。
2)Logwatch报告的详细程度和报告覆盖范围是完全可定制化的。Logwatch 的日志处理引擎也是可扩展的,从某种意义上来说,如果您想在一个新的应用程序中使用 logwatch 功能的话,只需要为这个应用程序的日志文件编写一个日志处理脚本(使用 Perl 语言),然后挂接到 logwatch 上就行。
3)logwatch的缺点就在于:在它生成的报告中没有详细的时间戳信息,而原来的日志文件中是存在的。只能知道被记录下来的一段时间之内的特定事件,如果想要知道精确的时间点的信息,就不得不去查看原日志文件了。

logwatch安装
Logwatch能够对Linux 日志文件进行分析,并自动发送mail给相关处理人员,可定制需求。Logwatch的mail功能是借助宿主系统自带的mail server发邮件的,所以系统需安装mail server(如sendmail,postfix等)

1
[root@xqsj-beta ~]# yum install -y logwatch    

查看logwatch帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@xqsj-beta ~]# logwatch --help
 
Usage: /usr/sbin/logwatch [--detail <level>] [--logfile <name>]
   [--print] [--mailto <addr>] [--archives] [--range <range>] [--debug <level>]
   [--save <filename>] [--help] [--version] [--service <name>]
   [--numeric] [--output <output_type>]
   [--splithosts] [--multiemail] [--no-oldfiles-log]
 
--detail <level>: Report Detail Level - High, Med, Low or any #.
--logfile <name>: *Name of a logfile definition to report on.
--logdir <name>: Name of default directory where logs are stored.
--service <name>: *Name of a service definition to report on.
--print: Display report to stdout.
--mailto <addr>: Mail report to <addr>.
--archives: Use archived log files too.
--save <filename>: Save to <filename>.
--range <range>: Date range: Yesterday, Today, All, Help
                             where help will describe additional options
--numeric: Display addresses numerically rather than symbolically and numerically
           (saves  a  nameserver address-to-name lookup).
--debug <level>: Debug Level - High, Med, Low or any #.
--splithosts: Create a report for each host in syslog.
--multiemail: Send each host report in a separate email.  Ignored if
              not using --splithosts.
--output <output type>: Report Format - mail, html or unformatted#.
--encode: Use base64 encoding on output mail.
--no-oldfiles-log: Suppress the logwatch log, which informs about the
                   old files in logwatch tmpdir.
--version: Displays current version.
--help: This message.
* = Switch can be specified multiple times...

常用参数选项的解释:

1
2
3
4
5
6
7
8
9
10
11
12
--detail < level>:   报告的详细度,可选项: High, Med, Low , 数字 0-10
--logfile < name>:   指日志文件名
--service < name>:   服务名,有对应的解析脚本,可以在 /usr/share/logwatch/scripts/services中找到
--print:             打印打标准输出
--mailto < addr>:    收件人地址
--archives:          以归档格式发送。使用压缩的文件, 轮转的文件, 例如 messages.1、messages.1.gz
--save < filename>:  保存到文件
--range < range>:    日期范围, Yesterday, Today, All
--debug < level>:    调试级别: High, Med, Low
--splithosts:        为每个主机创建一份报告
--multiemail:        将报告发送给多个邮件地址,没有使用--splithosts参数时,这个选项自动忽略
--output:            配置指令定义了一份 logwatch 报告的格式。有mail邮箱格式和html格式

安装后的目录文件说明:
配置文件在/etc/logwatch目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@xqsj-beta ~]# ll /etc/logwatch/
total 8
drwxr-xr-x 4 root root 4096 Mar  8 11:16 conf
drwxr-xr-x 3 root root 4096 Mar  8 11:16 scripts
[root@xqsj-beta ~]# ll /etc/logwatch/conf/
total 20
-rw-r--r-- 1 root root   81 Jan 11  2016 ignore.conf
drwxr-xr-x 2 root root 4096 Jan 11  2016 logfiles
-rw-r--r-- 1 root root  103 Jan 11  2016 logwatch.conf
-rw-r--r-- 1 root root   77 Jan 11  2016 override.conf
drwxr-xr-x 2 root root 4096 Jan 11  2016 services
[root@xqsj-beta ~]# cat /etc/logwatch/conf/logwatch.conf
# Local configuration options go here (defaults are in /usr/share/logwatch/default.conf/logwatch.conf)

相关配置模板文件是/usr/share/logwatch/default.conf/logwatch.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/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/conf/logwatch.conf,即它是一个空文件,那么默认配置会使用 /usr/share/logwatch/default.conf/logwatch.conf

在/etc/logwatch下也存在一个与/usr/share/logwatch类似的目录结构,可以在这里添加自定义的监控日志信息。
比如说:logwatch监控时的选项--service后面跟的是server name,默认情况下/etc/logwatch/scripts/services/目录下为空,可以将/usr/share/logwatch/scripts/services下的服务监控脚本拷贝到/etc/logwatch/scripts/services/下

logwatch应用
首先要确保服务器的自带邮箱服务启动了(这里我的是postfix).默认报告的邮件是从logwatch本机发出的,即邮件发件人是“logwatch@$hostname”

1
2
[root@xqsj-beta ~]# /etc/init.d/postfix status
master (pid  6594) is running...

接着进行下面安装操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@xqsj-beta ~]# wget http://www.cpan.org/authors/id/M/MS/MSTROUT/YAML-0.84.tar.gz
[root@xqsj-beta ~]# tar -zvxf YAML-0.84.tar.gz
[root@xqsj-beta ~]# # cd YAML-0.84
[root@xqsj-beta YAML-0.84]# perl Makefile.PL
[root@xqsj-beta YAML-0.84]# make
[root@xqsj-beta YAML-0.84]# make install
 
[root@xqsj-beta ~]# wget http://www.cpan.org/authors/id/A/AN/ANDK/CPAN-2.16.tar.gz
[root@xqsj-beta ~]# tar -zvxf CPAN-2.16.tar.gz
[root@xqsj-beta ~]# cd CPAN-2.16
[root@xqsj-beta CPAN-2.16]# perl Makefile.PL
[root@xqsj-beta CPAN-2.16]# make
[root@xqsj-beta CPAN-2.16]# make install
 
[root@xqsj-beta ~]# perl -MCPAN -e 'install HTML::Template'
  
[root@xqsj-beta ~]# perl -MCPAN -e 'install Sys::CPU'
[root@xqsj-beta ~]# perl -MCPAN -e 'install Sys::MemInfo'

1)直接命令行手动监控

1
2
[root@xqsj-beta ~]# logwatch --detail 10 --mailto wangshibo@huanqiu.cn --range all --service all --output mail
[root@xqsj-beta ~]#

上面命令中采用的是邮箱格式的报告输出,如下:

下面采用html格式的报告输出,通常情况下,我都会使用这个格式:

1
2
3
4
5
6
[root@xqsj-beta ~]# logwatch --detail 10 --mailto wangshibo@huanqiu.cn --range all --service all --output html
[root@xqsj-beta ~]#
 
若是想发送给多个邮箱,中间需要用逗号隔开
[root@xqsj-beta ~]# logwatch --detail 10 --mailto wangshibo@huanqiu.cn,wang_shibo***@163.com --range all --service all --output html
[root@xqsj-beta ~]#

收到的邮件中的监控报告如下:

注意一个细节:
如上在邮箱里发现报告里的内容太多,有一些无关紧要的服务的监控结果不想打印在报告里,那么就可以在监控时过滤掉这些服务项。
可以对比邮件里出现的监控列表里的服务去过滤,服务名最后以/etc/logwatch/scripts/services下的名称为准,服务名不正确,会报错说不识别。如下:

1
2
[root@xqsj-beta services]# logwatch --detail 10 --mailto wangshibo@huanqiu.cn --range all --service  All --service -XNTPD --service -Kernel --service -http --service -Postfix --service -pam_unix --service -XNTPD --output html
[root@xqsj-beta services]#

再次查看邮件,发现被过滤掉的服务的监控结果就不会出现在报告里了

这种方式不需要logwatch的配置文件,比较简单,可以将执行命令放到shell脚本中,结合crontab每天定时执行!

----------------------------------------------------------------------------------------------
发送邮件的时候报错如下:
You have old files in your logwatch tmpdir (/var/cache/logwatch):
logwatch.A3V8WQ6_
The directories listed above were most likely created by a
logwatch run that failed to complete successfully. If so, you
may delete these directories.

解决办法:
# rm -rf /var/cache/logwatch/*
-------------------------------------------------------------------------------------------

2)采用配置文件的方式
需要编辑的文件是/etc/logwatch/conf/logwatch.conf,以下是对配置选项的解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1)LogDir = /var/log     
定义的日志文件存放路径
 
2)TmpDir = /var/cache/logwatch
定义的缓存路径
 
3)Save = /tmp/logwatch
开启此项, 会将处理结果保存到本地文件里,如/tmp/logwatch文件, 不会邮寄或显示输出。一般会注释掉此行或不配置此行
 
4)MailTo = your@mail.com
发送监控报告的收件人地址,发送给多个邮箱,需要在多个邮箱地址之间用逗号隔开。但是需要在logwatch运行的服务器上配置好本地邮件传输代理(MTA)如sendmail、 Postfix等,这个配置指令项才能起作用。
 
5)MailFrom = Logwatch
当你收到邮件时, 显示是谁发给你的。默认是Logwatch
 
6)Range = <Yesterday|Today|All>
处理什么时候的日志 , 可选项 All , Yesterday , Today , 即所有, 昨天的 , 今天的。
 
7)Detail = High
日志详细度, 可选项 Low , Med , High , 或是 0-10数字
 
8)Print = No
可选项, Yes会被打印到系统标准输出, 并且不会以邮件的形式发送到MailTo设定的邮箱里 , No选项则会发到邮箱中。
 
9)Server = All
监控的服务项,all表示所有的服务。这个可以到/etc/logwatch/scripts/services/下面去找要监控的服务名称,默认是空的,可以从/usr/share/logwatch/scripts/services下面将服务监控脚本拷贝过来。
Service选项指定想要监控的一个或多个服务。在 /usr/share/logwatch/scripts/services 目录下列出的服务都能被监控,它们已经涵盖了重要的系统服务(例如:pam,secure,iptables,syslogd 等),也涵盖了一些像 sudo、sshd、http、fail2ban、samba等主流的应用服务。如果您想添加新的服务到列表中,得编写一个相应的日志处理 Perl 脚本,并把它放在这个目录中。
如果这个选项要用来选择特定的服务话,您需要把文件中的 "Service = All " 这一行注释掉。
 
另外注意一点:
可以在不监控的服务前面加 "-" , 如"-httpd"即表示不监控httpd服务,可以写多条。
一般我们建议的配置是:先监控所有服务,然后在排除不需要监控的服务,比如:
Service = All
Service = "-zz-network"
Service = "-zz-sys"
Service = "-eximstats"
 
10)output = <html|mail>
配置指令定义了一份 logwatch 报告的格式。有mail邮箱格式和html格式。

下面是自己线上服务器上使用过的一个配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@xqsj-beta ~]# cat /etc/logwatch/conf/logwatch.conf
# Local configuration options go here (defaults are in /usr/share/logwatch/default.conf/logwatch.conf)
LogDir = /var/log     
TmpDir = /var/cache/logwatch
 
#Save = /tmp/logwatch
 
MailTo = wangshibo@huanqiu.cn,wang_shibo1987@163.com
MailFrom = Logwatch
 
Range = Yesterday
 
Detail = High
 
Print = No
 
Service = All
Service = "-XNTPD"
Service = "-Kernel"
Service = "-http"
Service = "-Postfix"
Service = "-pam_unix"
Service = "-XNTPD"
 
output = html
 
然后手动执行下命令:
[root@xqsj-beta ~]# /usr/sbin/logwatch
[root@xqsj-beta ~]#
 
然后去对应的邮箱里查看,发现已有报告邮件。

另外注意:
logwatch的工作不是监控日志异常后及时报警的工具,并不具有及时性,logwatch默认每天定时发送一封整合的邮件:
logwatch默认在crontab定时任务设定目录下存在/etc/cron.daily/0logwatch脚本:

1
2
3
4
5
6
7
8
9
[root@xqsj-beta ~]# cat /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文件后,每天都会自动收取一封整合的报告邮件

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

1
2
3
4
5
[root@xqsj-beta ~]# mv /etc/cron.daily/0logwatch /root/logwatch.sh
 
比如设定每天早上5点发送邮件
[root@xqsj-beta ~]# crontab -e
0 5 * * * /bin/bash -x /root/logwatch.sh

又或者是删除/etc/cron.daily/0logwatch文件,然后自己在crontab里自定义发送:

1
2
3
每周1-5的早上8点发送邮件
[root@xqsj-beta ~]# crontab -e
0 8 * * 1,2,3,4,5 /usr/sbin/logwatch

Linux下日志文件监控系统Logwatch的使用记录的更多相关文章

  1. linux下日志文件error监控报警脚本分享

    即对日志文件中的error进行监控,当日志文件中出现error关键字时,即可报警!(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小 ...

  2. 对linux下日志文件error监控

    对日志文件中的error进行监控,当日志文件中出现error关键字时,就截取日志(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小写 ...

  3. Linux下日志文件过大解决方案

    很多Linux服务器里的应用程序都是无间断的输出日志,这对于服务器的硬盘是一个很大的考验.良许之前也分享过一篇文章,介绍如何让应用程序在后台执行: linux后台执行命令:&与nohup的用法 ...

  4. Linux下对文件进行加密备份的操作记录

    由于公司之前在阿里云上购买了一些机器,后续IDC建设好后,又将线上业务从阿里云上迁移到IDC机器上了,为了不浪费阿里云上的这几台机器资源,打算将这些机器做成IP SAN共享存储,然后作为IDC数据的一 ...

  5. (转)Linux下查看文件和文件夹大小 删除日志

    场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除 ...

  6. Linux下查看文件和文件夹大小 删除日志

    场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除 ...

  7. Linux下的IO监控与分析

    Linux下的IO监控与分析 近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performan ...

  8. linux下各文件夹的结构说明及用途介绍

    linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令.   /dev:设备特殊文件.   /etc:系统管理和配置文件.   /etc/rc.d:启动的配 置文件和脚本.   /ho ...

  9. 【转】linux下各文件夹的结构说明及用途介绍

    linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...

随机推荐

  1. Exception (3) Java exception handling best practices

    List Never swallow the exception in catch block Declare the specific checked exceptions that your me ...

  2. page next page prev

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  3. (转)通过扩展让ASP.NET Web API支持JSONP

    原文地址:http://www.cnblogs.com/artech/p/3460544.html 同源策略(Same Origin Policy)的存在导致了“源”自A的脚本只能操作“同源”页面的D ...

  4. 编写高质量代码改善C#程序的157个建议——建议113:声明变量前考虑最大值

    建议113:声明变量前考虑最大值 假设正在开发一个工资系统,其中一个模块负责处理加薪.代码如下: static void Main(string[] args) { ; salary = (); Co ...

  5. delphi中的sql语句中空格问题

    sql语句中的冒号 ‘’,在delphi中需要用四个冒号表示 ‘’‘’,delphi中的两个冒号只代表一个冒号

  6. react学习笔记(1):从前后端分离到项目部署

    我来到现在这家公司有一年多的时间,一直做的是财政系统相关的产品,前端的技术栈用的是传统的jQuery+bootStrap+requireJs,随着项目的开发,越来越多的弊病凸显出来. 首先是前后端的代 ...

  7. 谷歌三大核心技术(一)Google File System中文版

    http://www.open-open.com/lib/view/open1328763454608.html

  8. $.ajax()所有参数详解

    原文:https://www.cnblogs.com/everest33Tong/p/6159700.html [一]$.ajax()所有参数详解 url: 要求为String类型的参数,(默认为当前 ...

  9. 项目前端打包工具从 NEJ 切换成 webpack

    此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 这里不讨论 NEJ 和 webpack 的优劣,仅从技术角度来探寻一下能否实现,以及实现的代价. 前言 上一篇 ...

  10. MySQL开启日志记录查询/执行过的SQL语句

    作为后端开发者,遇到数据库问题的时候应该通过分析SQL语句来跟进问题所在,该方法可以记录所有的查询/执行的SQL语句到日志文件. 方法有几种,但是个人觉得以下这种最简单,但是重启MySQL服务后需要重 ...