7月17日任务

20.20 告警系统主脚本
20.21 告警系统配置文件
20.22 告警系统监控项目

先创建各级目录如下图

7月17日任务_第1张图片

在bin下创建并编辑脚本main,具体内容如下图所示:

7月17日任务_第2张图片

export send=1(设置总开关,如果遇到维护状态可以关闭告警邮件开关,设置成0)

export addr:输入每台服务器的IP地址(为了告诉我们发邮件的是那一机器,由于是分布式的系统, 不需要服务端, 每台机器独立运行)

dir=`pwd`定义当前路径 (方便挪用到其他机器的其他文件夹里)

last_dir:定义最后一级目录(即/usr/local/sbin/mon/bin目录)echo $dir |awk -F '/'  '{print $NF}';注意需要加反引号,代表是解释器中需要执行的命令

下面判断当前是否在bin目录中,因为很多命令都是调用相对路径,只有在同级目录才不会报错,bin,mail,等目录都是相互关联的;否则提示需要该路径,直接退出脚本exit;当在bin目录下时conf_file=../conf/mon.conf;因为需要到上一级目录mon下的conf文件夹中

再定义正确和错误的log目录:exec 1>>../log/mon.log 2>>../log/err.log并加一个时间标记 echo "`date +"%F %T"` load average"

由于load基本上是每台机器必监控的脚本,一般情况下不需要加开关;故直接在主脚本中调用子脚本,用法:/bin/bash ../shares/load.sh

最后查看配置文件中的项目,遍历一遍,如在配置文件中查看是否需要监测502(nginx中的一个状态码)(通过正则表达式把是否相关的开关过滤出来,如果是则执行,否则不执行)

1 shell 中的exec用法
 在shell脚本中使用exec命令,根据操作的对象不同会有不同的行为
 1 操纵文件描述符 
   这里面又要说说描述符 shell中有12个描述符
   其中 0 代表标准输入
        1 代表标准输出
        2 错误
        其他 3-9 都是空白描述符 

告警系统文件配置cd mon/conf/mon.conf

7月17日任务_第3张图片

其中502监控需要调用状态码,所以必须定义访问日志的路径,回到主配置文件中监控502,用正则做一个过滤,如果发现需要监控,则需要找到log路径;最后执行shares下的502脚本

告警系统监控项目

cd ../shares ①定义Load.sh

7月17日任务_第4张图片

当满足load条件且send为1,则执行发邮件通知如上图所示,创建为/log/load.tmp,发邮件时会用到;如果Load不足,则直接记录一条日志

②502.sh

7月17日任务_第5张图片

③disk.sh

7月17日任务_第6张图片

awk支持在一段字符串里使用多个分隔符进行分割

7月17日任务_第7张图片

如果把LANG=en则,不会出现中文的已用字眼,如下图

7月17日任务_第8张图片

在数字大于90并且需要发送时把log写入/log/disk.tmp下;同时做一个判断,如果该文件存在,则发邮件;否则直接打印出磁盘空间是否不足,并附带时间

 

 

 

你可能感兴趣的:(Linux)