简单高效:用Swatch做Linux日志分析

  日志文件是我们发现系统问题的重要参考信息. 大部分的系统服务出现问题时都会给syslogd(系统日志守护进程)发送消息. 然后用户发觉并根据错误提示信息采取行动. 然而对于1000行以上的日志文件, 我们必须使用日志检查工具节省时间和避免漏掉重要信息.

  Swatch从字面上可以简单理解为Watcher(守护者). 其它的日志分析软件定期地扫描日志文件, 向你报告系统已经发生的问题或者状况. Swatch程序不仅能够做这些, 而且它能够像Syslogd守护程序那样主动的扫描日志文件并对特定的日志消息采取修复行动.

  一. 准备

  1. 下载和解压缩最新的Swatch软件包.建议从Swatch的官方网站获得可靠的Swatch软件包.

  下载网址: http://sourceforge.net/projects/swatch/

  1) 创建Swatch软件包存放的目录.

  #mkdir -p /usr/local/src/log

  2) 解压缩源代码包, 在log目录下会生成一个新的目录apache_1.3.33

  #tar zpxf swatch-3.1.1.tar.gz

  二. 安装

  #cd swatch-3.1.1
  #make
  #make test
  #make install
  #make realclean

  Swatch程序安装成功后, Perl模块将会用于Swatch程序的运行.

  三. 配置

  Swatch程序使用正向表达式(Regular Expressions)来发现感兴趣的目标行. 一旦Swatch发现某一行匹配预设定的模式, 它会立即采取行动, 比如说屏幕打印, 发送电子邮件, 或者采取用户预先设定的行动.

  watchfor /[dD]enied│/DEN.*ED/
  echo bold
  bell 3
  mail
  exec "/etc/call_pager 5551234 08"

  上面的脚本是Swatch配置文件一个部分的例子. 首先Swatch在指定的日志文件中寻找包含设定单词"denied, Denied, 或者其它以DEN开始或者以ED结束的单词的行. 一旦搜索到某行包含三个搜索单词中的任何一个. Swatch程序立即向终端显示粗体行和响铃三下, 然后发送电子邮件给运行swatch程序的用户(通常是
  root用户)警报所在行和执行/etc/call_paper程序, 忽略sendmail, fax, unimportant stuff. 在这个例子当中, 搜索字符串sendmail, fax和unimportant stuff将被忽略. 甚至他们符合预定搜索字符串中的一个.

  四. 使用

  使用Swatch非常的简单, 如通常使用Swatch检查日志, 运行:
  swatch --config-file=/home/zhaoke/swatch.conf
  --examine=/var/log/messages

  上面的例子中配置文件所在的系统绝对路径是/home/zhaoke/swatch.conf, 需要检查的日志文件是/var/log/messages.

  使用swatch检查不段增加的日志文件:
  swatch --config-file=/home/zhaoke/swatch.conf
  --tail-file=/var/log/messages

  五. 更多

  关于作者: 赵珂, 操作系统研究和安全工程师.
  zhaoke.net是作者的个人网站. 欢迎技术交流以及链接交换.

  原文出处: http://zhaoke.net/articles/general/2005-02-04.shtml

  版权声明: 引用或转载, 请注明作者与出处. 并请保留本文的连接.

  如有问题或错误请提交到:
  http://zhaoke.net/os/forum.php?do=viewtopic&cat=2&topic=5

(0)

相关推荐

  • windows和linux安装mysql后启用日志管理功能的方法

    查看是否启用了日志 复制代码 代码如下: mysql>show variables like 'log_bin'; 怎样知道当前的日志 复制代码 代码如下: mysql> show master status; 展示二进制日志数目 复制代码 代码如下: mysql> show master logs; 看二进制日志文件用mysqlbinlog 复制代码 代码如下: shell>mysqlbinlog mail-bin.000001 或者 复制代码 代码如下: shell>my

  • linux 死机日志分析

    系统出现死机,一般分为两种情况:一是硬件问题:二是软件问题. 一.硬件问题 可以考虑分析以下几点: 1.不要超频CPU,如果已经超频的先回复到原来的频率 虽然平时运行没有问题,但可能在高负载的使用中就会出现不可预料的故障了.特别是linux系统在某些应用上,是可以把硬件的性能发挥到极限的,但这样的硬件运行Windows可能是没有问题的. 2.确认电源供电充足 必须确保在高负载的状态下,电源可以满足负载. 3.使用memtest86检查内存状态 4.恢复BIOS到默认状态 对于服务器,可以使用自带

  • linux系统中c++写日志文件功能分享

    简化了glog,只保留了写日志文件的功能,只是改写了linux版本,win版本未改写,可以用LOG(INFO)<< 输出日志也可用LOG_IF(INFO,condition)<<输出日志也可直接调用日志类Logger::GetInstance().Error 等方式写日志初始化时调用 InitLogging(argv[0],INFO,"./log/test");第一个参数是路径,第二个参数是最低日志级别,第三个参数表示日志文件的前缀和文件夹 FileHelper

  • linux Nginx 日志脚本

    任务计划 crontab -l 1 15 * * * /home/dongnan/sh/split.sh >> /home/dongnan/sh/cron.log 2>& nginx 日志 ls /var/log/nginx/ 20130730-access.log.gz  20130801-access.log.gz  20130803-access.log.gz 20130730-error.log.gz   20130801-error.log.gz   20130803-

  • linux自动清理日志脚本分享

    1.做自动部署系统时精简的一个脚本,主要功能是清理所有目录的日志 2.根据给定日志目录,删除时间 结合crontab进行清理日志,清理完成后,后在/var/log/deltelog/ 生成按照月的清理日志 3.扩展,因为脚本采用mtime(最后修改时间)进行删除,所以可以适用于删除过期备份等,不受文件名称的限制 shell小窍门 find –type f –print 时会根据换行或者空格来输出查找的文件,在不同的sh下有不同的反应,如果不做处理结合xargs 进行删除 更改操作,会有影响 所以

  • Linux下Oracle归档日志自动清理脚本代码(sh)

    复制代码 代码如下: #!/bin/sh export BACK_DATE=`date +%Y%m%d` export BACKUP_PATH=/home/oracle/dbbak echo `mkdir -p ${BACKUP_PATH}/archivelog/${BACK_DATE}` rman msglog=$BACKUP_PATH/archivelog/${BACK_DATE}/arch_0_$BACK_DATE.log << EOF connect target /; delete

  • Linux日志式文件系统面面观

    文件系统是用来管理和组织保存在磁盘驱动器上的数据的系统软件,其实现了数据完整性的保 证,也就是保证写入磁盘的数据和随后读出的内容的一致性.除了保存以文件方式存储的数据以外,一个文件系统同样存储和管理关于文件和文件系统自身的一些重要信息(例如:日期时间.属主.访问权限.文件大小和存储位置等等).这些信息通常被称为元数据(metadata). 由于为了避免磁盘访问瓶颈效应,一般文件系统大都以异步方式工作,因此如果磁盘操作被突然中断可能导致数据被丢失.例如如果出现这种情况:如果当你处理一个在linux

  • nginx日志分割 for linux

    使用方法,先将以下脚本保存为 cutlog.sh,放在/root 目录下,然后给予此脚本执行的权限 复制代码 代码如下: chmod +x cutlog.sh 然后使用crontab -e 将此脚本加入到计划任务中, 复制代码 代码如下: 00 00 * * * /bin/bash /root/cutlog.sh 让此脚本每天凌晨0点0分执行. 复制代码 代码如下: #!/bin/bash#function:cut nginx log files shell#设置您的网站访问日志保存的目录,我的

  • Linux下apache日志分析与状态查看方法

    假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] "GET /Public/Css/index.css HTTP/1.1″ 304 – "http://www.a.cn/common/index.php" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.3)" 问题1:在apachelog中找出访问次数最多的1

  • linux下删除7天前日志的代码(php+shell)

    PHP版本: 复制代码 代码如下: /** * 删除7天前的日志 * @param $logPath */ function del7daysAgoLog($logPath) { if(empty($logPath))return; $handle = opendir($logPath); while(($file = readdir($handle)) !== false){ $pos = strpos($file, '.log'); if ($pos !== false && (str

随机推荐