因为这个监控系统是分布式的, 每台机器都需要部署同样的监控脚本; 唯一不同的就是, 不同的机器本机自身参数不同 (ip 地址, 主机名等等), 修改对应的参数即可.
所以, 首先定义一套监控脚本出来, 然后其他需要监控的 linux 服务器需要从这 copy 到自己的服务器上面.
约定一个小习惯:
以后把 shell 脚本放到 / usr/local/sbin / 下, 方便以后查找
操作
1 创建监控中心父目录以及各个子目录
- [root@centos7-01 ~]# cd /usr/local/sbin/
- [root@centos7-01 sbin]# mkdir mon
- [root@centos7-01 sbin]# cd mon/
- [root@centos7-01 mon]# mkdir bin conf shares log mail
- [root@centos7-01 mon]# ls
- bin conf log mail shares
目录说明:
bin 下是主程序
conf 下是配置文件
shares 下是各个监控脚本
mail 下是邮件引擎
log 下是日志
2 在 bin 下面创建主脚本
- [root@centos7-01 mon]# cd bin/
- [root@centos7-01 bin]# vim mail.sh
- #!/bin/bash
- #Written by aming.
- # 是否发送邮件的开关
- 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
脚本解释:
export send=1 是否发送邮件, 1 表示是 (监控的所有项目都会发送邮件),0 表示否 (一般系统处于维护状态设置 0).export 表示 send 的变量会应用在所有的子脚本里面.
export addr=`/sbin/ifconfig |grep -A1 "ens33:" |awk '/inet/ {print $2}'` 过于 ip 地址的原因是, 因为监控项目都是分布式, 过滤 ip 地址可以快速定位是哪台服务器发送的邮件, 从而达到追踪监控目的. 定义主机名也可以代替此方法.
来源: http://www.bubuko.com/infodetail-2630497.html