进入目录,脚本文件一般放到/usr/local/sbin下cd /usr/local/sbin
php
建立目录mkdir mon
mysql
进入目录cd mon
sql
建立目录mkdir bin conf shares log
vim
进入目录cd bin
bash
编辑文件vim main.sh
服务器
内容以下:dom
#!/bin/bash # 是否发送邮件的开关 export send=1 # 过滤ip地址,告诉咱们发邮件的是哪一台机器 export addr=`/sbin/ifconfig |grep -A1 "ens33: " |awk '/inet/ {print $2}'` #找到监控脚本的路径 dir=`pwd` # 只须要最后一级目录名 last_dir=`echo $dir|awk -F'/' '{print $NF}'` # 下面的判断目的是,保证执行脚本的时候,咱们在bin目录里,否则监控脚本、邮件和日志颇有可能找不到 if [ $last_dir == "bin" ] || [ $last_dir == "bin/" ]; then conf_file="../conf/mon.conf" else echo "you shoud cd bin dir" exit fi #定义日志,输出正确的日志以及错误的日志 exec 1>>../log/mon.log 2>>../log/err.log #打标记,时间 echo "`date +"%F %T"` load average" #主脚本的位置 /bin/bash ../shares/load.sh #先检查配置文件中是否须要监控502 if grep -q 'to_mon_502=1' $conf_file; then export log=`grep 'logfile=' $conf_file |awk -F '=' '{print $2}' |sed 's/ //g'` /bin/bash ../shares/502.sh fi
编辑配置文件脚本,配置文件放置在conf目录下cd /usr/local/sbin/mon
vim conf/mon.conf
socket
在配置文件中添加以下的内容ide
## to config the options if to monitor ## 定义mysql的服务器地址、端口以及user、password,监控mysql to_mon_test_db=0 ##0 or 1, default 0,0 not monitor, 1 monitor db_ip=10.20.3.13 db_port=3315 db_user=username db_pass=passwd ## httpd 若是是1则监控,为0不监控 to_mon_httpd=0 ## php 若是是1则监控,为0不监控 to_mon_php_socket=0 ## http_code_502 须要定义访问日志的路径 to_mon_502=1 logfile=/data/log/www.test.com/access.log #配置文件如何定义取决于子脚本用到资源 ## request_count 定义日志路径以及域名 to_mon_request_count=0 #请求的日志 req_log=/data/log/www.test.net/access.log domainname=www.test.net
进入目录cd /usr/local/sbin/mon/shares
.net
编辑脚本,监控系统的负载:
vim load.sh
添加以下的内容,
#! /bin/bash #过滤系统的负载 load=`uptime |awk -F 'average:' '{print $2}'|cut -d',' -f1|sed 's/ //g' |cut -d. -f1` #判断负载是否大于10,且脚本的开关是否为1 if [ $load -gt 10 ] && [ $send -eq "1" ] then #输出日志,目的是为了发送邮件 echo "$addr `date +%T` load is $load" >../log/load.tmp #发送邮件的脚本以及邮件接收人 /bin/bash ../mail/mail.sh test@mail.com "$addr\_load:$load" `cat ../log/load.tmp` fi #若是没有那么高则作一个记录 echo "`date +%T` load is $load"
编辑脚本,监控项目为502vim 502.sh
添加以下的内容,
#! /bin/bash #截取1分钟以前的时间 d=`date -d "-1 min" +%H:%M` #判断502的次数 c_502=`grep :$d: $log |grep ' 502 '|wc -l` if [ $c_502 -gt 10 ] && [ $send == 1 ]; then echo "$addr $d 502 count is $c_502">../log/502.tmp /bin/bash ../mail/mail.sh $addr\_502 $c_502 ../log/502.tmp fi echo "`date +%T` 502 $c_502"
编辑脚本,监控diskvim disk.sh
添加以下的内容
#! /bin/bash rm -f ../log/disk.tmp #截取磁盘的使用空间,不须要%号 for r in `df -h |awk -F '[ %]+' '{print $5}'|grep -v Use` do if [ $r -gt 90 ] && [ $send -eq "1" ] then echo "$addr `date +%T` disk useage is $r" >>../log/disk.tmp fi if [ -f ../log/disk.tmp ] then df -h >> ../log/disk.tmp /bin/bash ../mail/mail.sh $addr\_disk $r ../log/disk.tmp echo "`date +%T` disk useage is nook" else echo "`date +%T` disk useage is ok" fi