2018-4-22 17周4次课 shell告警系统脚本配置

20.20 告警系统主脚本


把shell脚本放在 /usr/local/sbin 目录下,方便查找

[[email protected] ~]# cd /usr/local/sbin/
[[email protected] sbin]# mkdir mon/
[[email protected] sbin]# cd mon/
[[email protected] mon]# mkdir bin conf shares mail log
[[email protected] mon]# ls
bin  conf  log  mail  shares
[[email protected] mon]# cd bin/
[[email protected] bin]# vim main.sh

主脚本main.sh参数地址:http://note.youdao.com/noteshare?id=ef94586704b208ee6d7c7d1e5f04f644&sub=08E66A3760DF4961B29C74DED78E09F1



export send 是否发送邮件的开关,1为发送,如果是维护状态下,就要关闭告警

addr 本机ip(根据实际网卡名称更改ens33或者其他名称)

last_dir /bin/目录

conf_file ../conf/mon.conf 相对于/bin/的位置

grep -q 只要匹配就返回,用于 if 逻辑判断








20.21 告警系统配置文件


mon.conf

## to config the options if to monitor

## 定义mysql的服务器地址、端口以及user、password

to_mon_cdb=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/xxx.xxx.com/access.log

## request_count   定义日志路径以及域名

to_mon_request_count=0

req_log=/data/log/www.discuz.net/access.log

domainname=www.discuz.net






20.22 告警系统监控项目


·load.sh内容

#! /bin/bash

##Writen by alex##

load=`uptime |awk -F 'average:' '{print $2}'|cut -d',' -f1|sed 's/ //g' |cut -d. -f1`

if [ $load -gt 10 ] && [ $send -eq "1" ]

then

echo "$addr `date +%T` load is $load" >../log/load.tmp

/bin/bash ../mail/mail.sh [email protected] "$addr\_load:$load" `cat ../log/load.tmp`

fi

echo "`date +%T` load is $load"


·502.sh内容

#! /bin/bash

d=`date -d "-1 min" +%H:%M`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 ##502数量计入日志

/bin/bash ../mail/mail.sh $addr\_502 $c_502  ../log/502.tmp ##发送邮件

fi

echo "`date +%T` 502 $c_502"


disk.sh内容

#! /bin/bash

##Writen by alex##

rm -f ../log/disk.tmp

LANG=en

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



[ %]+ 表示一个或多个空格或%

[[email protected] shares]# echo "12:aaa#sadfsad:111#3333" |awk -F '[:#]' '{print $3}'

sadfsad                             ##以:或#为分隔符,所以第三段为sadfsad

[[email protected] shares]# echo "12:aaa#sadfsad:111#3333" |awk -F '[:#]' '{print NF}'

5                                         ##以:或#为分隔符,有5段

[[email protected] shares]# echo "12:aaa#sadfsad:111##3333" |awk -F '[:#]' '{print NF}'

6                                         ##以:或#为分隔符,有6段,因为有个##

[[email protected] shares]# echo "12:aaa#sadfsad:111##3333" |awk -F '[:#]+' '{print NF}'

5                                         ##以一个或多个:或#为分隔符,就只有5段






原文地址:http://blog.51cto.com/11530642/2106602

时间: 2024-10-02 00:33:45

2018-4-22 17周4次课 shell告警系统脚本配置的相关文章

2018.4.23 17周4次课

十七周4次课(4月23日) 20.20 告警系统主脚本 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本 创建告警系统的目录: [[email protected] /usr/local/sbin]# mkdir mon [[email protected] /usr/local/sbin]# ls mon  nginx_log_rotate.sh [[email protected] /usr/local/sbin]# cd mon [[email pro

2018.1.22 7周1次课

七周一次课(1月22日) 10.1 使用w查看系统负载 10.2 vmstat命令 10.3 top命令 10.4 sar命令 10.5 nload命令 众所周知,生病了需要去医院看病,大夫首先要询问我们哪里不舒服,然后再通过观察和自己的经验,大体上就能判定我们得的是什么病.然而Linux不会说话,它不会主动告诉我们哪里出现了问题,需要我们自己去观察.那么如何评估系统运行状态是否良好呢?下面阿铭就介绍一些帮我们分析系统状态的工具. 10.1 使用w查看系统负载 相信所有Linux管理员最常用的命

2018.3.22 13周4次课

十三周四次课(3月22日) 13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令 13.1 设置更改root密码 root用户的mysql的超级管理员用户,跟linux的root用户类似.但需要区分,这个root用户和系统的root用户不是一个用户,需要注意.也可以创建一个普通用户来连接mysql 首次进入mysql数据库是不用密码的.默认mysql数据库的root用户密码为空,连接时不需要密码 设置密码: 启动mysql:service mysqld star

2018.4.18 17周1次课

十七周一次课(4月18日) 20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断 20.5 shell脚本中的逻辑判断 格式1不带else:if 条件 ; then 语句; fi 编辑if1.sh文件:vi if1.sh #!/bin/bash/ a=5 if [ $a -gt 3 ] then echo ok fi 格式2带有else:if 条件; then 语句; else 语句; fi #!/bin/bash/ a=1

2018.4.19 17周2次课

十七周二次课(4月19日) 20.10 for循环 20.11/20.12 while循环 20.13 break跳出循环 20.14 continue结束本次循环 20.15 exit退出整个脚本 20.10 for循环 for循环结构是在日常运维工作中使用最频繁的循环结构. 语法:for 变量名 in 条件; do -; done 数字循环:vi for1.sh #!/bin/bash sum=0 for i in `seq 1 3` #循环的条件还可以引用系统命令的执行结果(如seq 1

2018-4-20 17周3次课 shell函数、数组、告警需求分析

20.16/20.17 shell中的函数 ·函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function f_name() { command } 函数必须要放在最前面 ·示例1 #!/bin/bash input() {                        ##定义f_name最好不要和shell里面的关键词冲突     echo $1 $2 $# $0 } input 1 a b $1 $2 第一个,第

2018-4-18 17周1次课 shell逻辑判断、文件目录属性判断、if、case

20.5 shell脚本中的逻辑判断 ·格式1:if 条件; then 语句; fi 例:a=5 if [ $a -gt 3 ]; then echo ok; fi [[email protected] shell]# sh if1.sh ok ·格式2:if 条件; then 语句; else 语句; fi 例:a=5 if [ $a -gt 3 ]; then echo ok; else echo nook; fi [[email protected] shell]# sh if1.sh o

2017.12.22 2周5次课

2017.12.22 二周第五次课 2.23/2.24/2.25 find命令 2.26 文件名后缀 2.23/2.24/2.25 find命令 1.学会使用快捷键 1)ctrl+C:结束(终止)当前命令.如果你输人了一大串字符,但不想运行,可以按ctrl+C组合键,此时光标将跳入下一行,而在刚刚的光标处会留下一个^C的标记. 2)Tab:实现自动补全功能.这个键比较重要,使用频率也很高.当你输人命令.文件或目录的前几个字符时,它会自动帮你补全. 3)ctrl+D:退出当前终端.同样,你也可以输

2018.3.1 10周2次课

十周第二次课(3月1日) 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 11.14/11.15 Apache和PHP结合 配置httpd支持php httpd主配置文件/usr/local/apache2.4/conf/httpd.conf vim /usr/local/apache2.4/conf/httpd.conf   //修改以下4个地方 ServerName 搜索ServerName,把#ServerName www.example