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

简介:

在维护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
***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/6519504.html,如需转载请自行联系原作者
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
4月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
373 3
Linux系统禁用swap
|
4月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
811 3
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
4月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
468 122
基于docker搭建监控系统&日志收集
|
4月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
465 1
日志收集和Spring 微服务监控的最佳实践
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
489 0
Linux系统初始化脚本
|
4月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
157 4
|
5月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
346 18
|
4月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
537 2
|
4月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
413 1