#!/bin/bash

export JAVA_HOME=/app/jdk/jdk1.8.0_92
export HADOOP_CONF_DIR=/home/hdfs/balancer/hadoop-conf
rm -f hostname.txt
rm -f dfused.txt
rm -f hostdfs.txt
rm -f hostdfs_alert.txt
###获取大于95%的主机名和dfs used%
function checkdfs(){
echo "start checking hdfs used rate"
hdfs dfsadmin -report | grep -i "50010" | awk -F ":" '{print $2}'| awk '{print $1}' > hostname.txt
hdfs dfsadmin  -report | grep "DFS Used%" | awk -F ": " '{print $2}' | awk -F "%" '{print $1}' > dfused.txt
livesum=$(hdfs dfsadmin -report  | grep "Live datanodes" | awk '{print $3}' | awk -F "):" '{print $1}' | awk -F "(" '{print $2}')
echo $livesum
sed -i '1d' dfused.txt
let livesum+=1
sed -i $livesum',$d' dfused.txt
sed -i $livesum',$d' hostname.txt
linesum=$(cat hostname.txt | wc -l)
echo $linesum
harr=($(awk '{print $1}' hostname.txt))
darr=($(awk '{print $1}' dfused.txt))
if [ $linesum -gt 0 ]
  then
  for (( i = 0 ; i < ${#harr[@]} ; i++ ))
  do
     for (( j = 0 ; j < ${#darr[@]} ; j++ ))
     do
         if [ $i -eq $j ]
         then
            echo ${harr[$i]} ":" ${darr[$j]} >> hostdfs.txt
         fi
     done
 done
else
   echo "Not Live Datanodes"
fi
ddarr=($(cat hostdfs.txt | awk '$3>95{print $3}' |sort -ru))
for (( m = 0; m< ${#ddarr[@]} ; m++ ))
do
    if [[ $(echo $(cat hostdfs.txt) | grep "${ddarr[$m]}") != "" ]]
    then
    echo $(cat hostdfs.txt | grep "${ddarr[$m]}" | awk 'NR==1{print $1":"$3}') >> hostdfs_alert.txt
    fi
done
}
checkdfs

rm -f key.txt
url="http://xxx/monitor/report/sendReport"
linenum=$(cat hostdfs_alert.txt | wc -l)
let linenum+=1
echo $linenum
#上报数据
function postdfs(){
for (( k = 1; k< $linenum ; k++ ))
  do
  key=$(echo $(sed -n "$k p" hostdfs_alert.txt | awk -F ":" '{print "xxx.hdfs_used##ip="$1"##cluster=bdp##env=prod"}') | awk '{gsub(/[[:blank:]]*/,"",$0);print $0;}' )
  echo $key >> key.txt
  value=$(sed -n "$k p" hostdfs_alert.txt | awk -F ":" '{print $2}')
  data="{\"key\":\"$key\",\"value\":\"$value\"}"
  echo $data
  cmd="curl -s -X POST -H 'Content-type':'application/json' -d '${data}' ${url}"
  sh -c "$cmd"
  done
}
postdfs

rm -f allkey.txt
expression="x>95"
time=5
count=1
alertMode="1,2,3"
members="bdp-ops"
call_users="bdp-ops"
call_content="xxx"
add_url="http://xxx/monitor/rule/addReport"
hnum=$(cat hostname.txt | wc -l)
let hnum+=1
echo $hnum
function dfsalert(){
for(( n = 1;n<$hnum;n++))
do
key=$(sed -n "$n p" hostname.txt | awk '{print "xxx.hdfs_used##ip="$1"##cluster=bdp##env=prod"}')
str1=$(sed -n "$n p" hostname.txt | awk '{print $1}')
str2="的HDFS使用率已经超过95%,请检查HDFS存储目录"
echo $key >>allkey.txt
description=${str1}${str2}
add_data="{\"id\":\"$key\",\"expression\":\"$expression\",\"time\":$time,\"count\":$count,\"alertMode\":\"$alertMode\",\"members\":\"$members\",\"description\":\"$description\",\"call_users\":\"$call_users\",\"call_content\":\"$call_content\"}"
echo $add_data
add_cmd="curl -s -X POST -H 'Content-type':'application/json' -d '${add_data}' ${add_url}"
sh -c "$add_cmd"
done
}
dfsalert 

Linux记录-告警脚本的更多相关文章

  1. linux下shell脚本执行jar文件

    最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...

  2. Linux记录-监控系统开发

    需求:使用shell定制各种个性化告警工具,但需要统一化管理.规范化管理.思路:指定一个脚本包,包含主程序.子程序.配置文件.邮件引擎.输出日志等.主程序:作为整个脚本的入口,是整个系统的命脉.配置文 ...

  3. Linux记录-shell 100例(转载)

    1.编写hello world脚本 #!/bin/bash # 编写hello world脚本 echo "Hello World!" 2.通过位置变量创建 Linux 系统账户及 ...

  4. Linux如何用脚本监控Oracle发送警告日志ORA-报错发送邮件

    Linux如何用脚本监控Oracle发送警告日志ORA-报错发送邮件 前言 公司有购买的监控软件北塔系统监控,由于购买的版权中只包含了有限台数据库服务器的监控,所以只监控了比较重要的几台服务器. 后边 ...

  5. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  6. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  7. 使用C#给Linux写Shell脚本(下篇)

    在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...

  8. linux nginx 启动脚本

    linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...

  9. Linux记录从此开始

    Linux记录从此开始~ 希望自己多写代码同时多记录~

随机推荐

  1. 51Nod1824 染色游戏 【Lucas定理】【FMT】【位运算】

    我的FMT是在VFleaKing的论文中学到的.51Nod的评测机好恶心. 题目分析: 题目很明显是要你求一个类似卷积的式子.但是我们可以注意到前面具有组合数,如果拆成阶乘会很大,在模意义下你无法判断 ...

  2. 2010 SD - ICPC D - Emergency

    D - Emergency Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit  ...

  3. altera rom ram IP的浅层理解

    1.altera 提供了两种rom :单口rom和双口rom. 官方文档偷图: 单口rom:输出可以配置寄存器寄存再输出,时钟可以输入输出用不同的时钟. 双口rom:输入输出时钟可不同或者A与B的时钟 ...

  4. Modelsim脚本仿真文件分析

    Do文件的实质是tcl脚本,本质上是ascii文件.所以扩展名可以任意的,不一定叫xx.do,也可以叫xx.tcl,甚至叫成你的名字也没有关系.看自己喜好,一般取do,不过我喜欢取成tcl,用代码编辑 ...

  5. AtCoder 瞎做

    目录 ARC 058 E - 和風いろはちゃん / Iroha and Haiku 题意 题解 技巧 代码 ARC 059 F - バイナリハック / Unhappy Hacking 题意 题解 技巧 ...

  6. 【BZOJ2829】[SHOI2012]信用卡凸包(凸包)

    [BZOJ2829][SHOI2012]信用卡凸包(凸包) 题面 BZOJ 洛谷 题解 既然圆角的半径都是一样的,而凸包的内角和恰好为\(360°\),所以只需要把圆角的圆心弄下来跑一个凸包,再额外加 ...

  7. rt-thread 学习路线

    @2019-01-25 [小记] > BSP制作与使用 将板载资源.芯片外设全部制作BSP,做到使用时只需在 menuconfig 中配置即用

  8. CodeForces - 95B(DFS)

    题目链接:http://codeforces.com/problemset/problem/95/B 题目大意:给你一个正整数n (1 ≤ n ≤ 10100000),求不大小于它的超级幸运数字(超级 ...

  9. 编写高质量代码:改善Java程序的151个建议 --[26~36]

    提防包装类型的null值 public static int testMethod(List<Integer> list) { int count = 0; for (Integer i ...

  10. Callable和Future、FutureTask的使用

    http://www.silencedut.com/2016/06/15/Callable%E5%92%8CFuture%E3%80%81FutureTask%E7%9A%84%E4%BD%BF%E7 ...