系统实时监视

发表于:2007-07-04来源:作者:点击数: 标签:
如何实时监视系统运行状况并在异常发生的时候自动发邮件到管理员的邮箱或在严重错误的时候发短信给管理员?其实,利用HP-UX系统工具和自带的sendmail邮件发送功能,就能实现配置一个比较通用的监视系统! 以下为HP-UX11.00环境下配置的详细过程。 HP-UX11.00

  如何实时监视系统运行状况并在异常发生的时候自动发邮件到管理员的邮箱或在严重错误的时候发短信给管理员?其实,利用HP-UX系统工具和自带的sendmail邮件发送功能,就能实现配置一个比较通用的监视系统! 以下为HP-UX11.00环境下配置的详细过程。
  HP-UX11.00系统安装时也会安装Sendmail,版本大概是8.9.x!这个版本的Sendmail应该也算稳定的,但是我这里配置时会出现sendmail.cf文件版本太旧的错误!于是干脆download一个新版的算了!在这里可以下载到HP-UX特别版的Sendmail 8.11.1:http://www.software.hp.com/ISS_products_list.html(需要填一些个人和公司信息,不一定填真实的:p,就可以下载了,大概1.3M吧,也算够新的了!如果你想用更新的版本,可以到http://www.sendmail.org去下载8.12.6的,不过安装起来麻烦得多也比较容易出问题)。文件下载下来以后是一个叫做Sendmail8111.depot的文件,好家伙,能用swinstall轻松搞定!!!把它ftp到你的HP-UX系统吧,注意需要用binary的模式传输,否则安装时会出现错误。完了,可以安装了,假如你ftp到/tmp下,那么用: #swinstall –s /tmp/Sendmail8111.depot ,按提示完成即可。
  假如你的系统配置了DNS服务,那么配置Sendmail会简单一点,否则就稍微麻烦一点(其实也没麻烦多少)。我们先假设一些前提:HP-UX系统主机名:hosta,IP地址:192.168.0.1 (C类网址,下同),默认网关: 192.168.0.2;假设公司邮件服务器是hostb(很少直接用sendmail直接做公司业务邮件服务器的哦),IP地址:192.168.1.5,域名是myhpux.com,hostb允许为hosta提供邮件代理服务。
  具体步骤:
  # vi /etc/hosts
  192.168.1.5 hostb myhpux.com
  192.168.0.1 hosta hosta.myhpux.com
  …
  如果存在/etc/nsswitch.conf ,那么直接修改该文件;如果不存在,则需要拷贝一个:
  #cp -p /usr/newconfig/etc/nsswitch.files /etc/nsswitch.conf
  #vi /etc/nsswitch.conf
  hosts: files
  …
  #nslookup
  Using /etc/hosts on : hosta
  >myhpux.com
  没问题的话,继续;有问题则不能怪我了,看看自己上面做对了没有!!!(IP地址、网关、域名和hostname等需要替换成你自己的)
  #vi /etc/mail/sendmail.cf
  找到:#Dj$w.Foo.COM 这行,并在下面增加一行:
  Dj$w.sysinfo (发送邮件时,系统默认发信人是: root@hosta.sysinfo )
  然后,找到DS 行,改成:
  DShostb
  存盘退出!
  可以测试了:
  #/sbin/init.d/sendmail stop
  #/sbin/init.d/sendmail start
  #sendmail –v admin@myhpux.com
  <输入邮件内容>
  .
  (注意,最后一行的“.”号结束邮件内容输入)
  正常系统和网络都没问题的话,你的 admin@myhpux.com就会收到root@hosta.sysinfo发给你的邮件了!这只是通常的情况,假如你需要发邮件到Inte.net,如 hpux@vip.sina.com:
  1、假如你的HP-UX主机没有直接Internet连接,需要通过hostb代理,则:
  # vi /etc/hosts
  192.168.1.5 hostb vip.sina.com
  然后就可以发了:
  #mailx –s “test” hpux@vip.sina.com   2、假如你的HP-UX有直接Internet连接,则:
  #vi /etc/hosts
  202.101.111.222 sinahost vip.sina.com
  #vi /etc/mail/sendmail.cf
  修改DShostb 为DSsinahost
  #/sbin/init.d/sendmail stop
  #/sbin/init.d/sendmail start
  测试:
  #mailx –s “Test” hpux@vip.sina.com   说明,202.101.111.222是#ping vip.sina.com得到的IP地址。
  好,邮件服务搞定,接下来写监视脚本!!!
  
  根据我自己的实际状况,我需要监视的系统运行状况主要有文件系统空间、网络和数据库服务!先说明文件系统的监视。文件系统空间不同挂起点设定的临界值是不一样的,比如/var,可以设定警告线是80%,错误线是95%,而数据库/oradb的警告线可能是60%,错误线80%,由此必须设定一个文件系统临界线设置文件:比如/etc/fs.sysmon (/etc下系统默认配置文件没有.sysmon结尾的,放心使用不会影响系统的)。/etc/fs.sysmon文件结构是这样的:注释的行不考虑,分3段,分别是挂起点、警告线、错误线。具体例子如下:
  ##############################################################
  # Which mount point must be monitored and how to monitored. #
  # | Mount Point | % Warning | % Error | #
  # Attention: /lvol1 is incorrect , it should be lvol1 #
  ##############################################################
  # lvol1 90 95
  / 50 60
  mfg1 60 75
  stand 70 80
  var 60 70
  usr 70 80
  users 50 80
  tmp 70 80
  opt 70 80
  mfg8 70 80
  mfg7 70 80
  database 40 90
  临界值随时可以改,监测脚本以这个文件的临界值为准判断文件系统是否出问题。
  系统监视脚本fsmon,内容大致如下:
  #!/usr/bin/sh
  ##Check file system usage!
  # $mntpt --- Mount point
  # $usdpct --- %used (bdf output)
  # $usdamt --- %used * 100 (If usdpct = 63% then usdamt = 63 )
  # $wpect --- Max Warning Percentage
  # $epct ---Max Error Percentage
  # Check if fsswitch exists ------
  if [[ ! -f /etc/fs.sysmon ]]
  then
  echo "The configuration file /etc/fs.sysmon does not exist!"
  exit
  fi
  touch $$.rslt
  bdf |grep -iv filesystem |awk '{print $6" "$5}' |while read mntpt usdpct
  do
  mntpt=`echo $mntpt |tr -d "/"`
  if [[ $mntpt = "" ]]
  then
  mntpt="/"
  fi
  usdamt=`echo $usdpct |tr -d "%"`
  wpct=`more /etc/fs.sysmon|grep -v "#"|grep "$mntpt"|awk '{print $2}'`
  epct=`more /etc/fs.sysmon|grep -v "#"|grep "$mntpt"|awk '{print $3}'`
  if [[ "$wpct" = "" ]]
  then
  wpct=90
  fi
  if [[ "$epct" = "" ]]
  then
  epct=95
  fi
  
  if [[ $mntpt != "/" ]]
  then
  mntpt="/"$mntpt
  fi
  
  if [[ $usdamt -gt $epct ]]
  then
  echo "Error:$mntpt file system's usage is ${usdamt}%." >>$$.rslt
  else
  if [ $usdamt -gt $wpct ]
  then
  echo "Warning:$mntpt file system's usage is ${usdamt}%." >>$$.rslt
  fi
  fi
  done
  
  if [[ -s ./$$.rslt ]]
  then
  if grep "Error:" ./$$.rslt >/dev/null
  then
  mailx -s "Fs-Err" -r "fs@$(hostname)" hpux@vip.sina.com <$$.rslt
  else
  mailx -s "Fs-Wrn" -r "fs@$(hostname)" hpux@vip.sina.com <$$.rslt
  fi
  fi
  rm $$.rslt
  unset mntpt
  unset usdpct
  unset usdamt
  unset wpct
  unset epct
  
  关于网络监视方面,可以挑选几个重要的主机来测试网络连通性(由此达到以点代面的目的,当然,可以象Openview那样全面监测那更好)。主机列表放在文件/etc/ho.sysmon里,比如:
  ######################################################################
  # Host list whom this host can connect to. #
  # Please input the host's IP address. #
  ######################################################################
  #192.168.0.1
  127.0.0.1
  192.168.1.5
  192.168.2.1
  192.168.3.1
  网络监视脚本如下(netmon):
  #!/usr/bin/sh
  # Monitor Network Connection from Host List: ./rhosts
  # phost --- Ping host
  # prslt --- Ping Result
  if [[ ! -f /etc/ho.sysmon ]]
  then
  echo "Host list file do not exist."
  exit
  fi
  
  touch $$.net
  more /etc/ho.sysmon|grep -v "#" |while read phost
  do
  prslt=`ping $phost -n 5 |grep loss|awk '{ print $7}'`
  prslt=`echo $prslt|tr -d "%"`
  if [[ $prslt -ne 0 ]]
  then
  if [[ $prslt -eq 100 ]]
  then
  echo "Error: Can't connect to host:$phost." >> $$.net
  else
  echo "Warn: Connect to host:$phost problem." >>$$.net
  fi
  fi
  done
  
  if [[ -s ./$$.net ]]
  then
  if grep "Error:" ./$$.net >/dev/null
  then
  mailx -s "Net-Err" -r "net@$(hostname)" hpux@vip.sina.com <$$.net
  else
  mailx -s "Net-Wrn" -r "net@$(hostname)" hpux@vip.sina.com <$$.net
  fi
  fi
  
  rm $$.net
  unset phost
  unset prslt
  
  如果以上内容都能理解了,那么监视数据库是否在运行就很简单了,比如
  if ps –ef |grep “_orasrv” |grep “mydb”
  then
  else
  fi
  假如数据库mydb已经通过_orasrv进程启动,那么执行相关动作,否则重启数据库并发信心给管理员。
  
  补充一点,假如你想在系统异常是收到短信通知,只要对收费邮箱(比如hpux@vip.sina.com)设置邮件到达短信通知即间接实现。
  

原文转自:http://www.ltesting.net