监控cpu使用率大于500%的任务并发送告警信息

背景:hadoop集群节点存在cpu告警的信息,不知道具体哪个应用造成cpu告警的,编写了脚本获取到占用cpu使用最高的前5个进程,并发送告警。
脚本逻辑:首先查到cpu占用率前五的进程,然后获取任务信息的接口,最后整理成告警信息发送。

#!/bin/bash
#监控cpu使用率最多的任务并发送告警信息
#date: 2022-3-6
#author by zjh

#发送告警
sendnotice(){
    url="http://192.168.1.100:8080/falcon/notice/send"
    alertMode="1"
    subject="Flink_Nodemanager_CpuUsed"
  
    notice_member="123456"
    content="$ctime\n机器IP-集群:$1\n任务ID-用户:$2\nCpu占用率:$3"
    #告警内容格式
    data="{\"alertMode\": \"${alertMode}\",\"subject\": \"${subject}\",\"userId\": \"${notice_member}\",\"content\": \"${content}\"}"
    echo $data

    #请求接口
    cmd="curl -s -X POST -H 'Content-type':'application/json' -d '${data}' ${url}"
    sh -c "$cmd"
}

#获取集群信息
clustername=`grep '>hdfs' /app/hadoop-conf/core-site.xml|awk -F'/' '{print $3}'|cut -d'<' -f1`
host=`hostname --fqdn`
ip=`host $host  | awk '{print $NF}'`
ctime=`date +"%Y-%m-%d %H:%M"`
pidacpu=`ps -aux | grep yarn | sort -rn -k 3|head -5 |awk '{print $2}'`

for pidcpu in $pidacpu;
do
   echo $pidcpu
   cpuused=`ps -aux | grep yarn |grep $pidcpu |awk '{print $3}'|awk -F'.' '{print $1}'`
   jobinfo=`ps -ef | grep $pidcpu|awk -F'-Dlog.file=' '{print $2}'|cut -d'/' -f6|sort -r -n |uniq`
   if [ $jobinfo ];
   then
       #获取作业ID
       jobid=`su - yarn -c 'yarn application --list '| grep ${jobinfo}|awk '{print $2}'|awk -F'BDPF_xxx_FLINK_' '{print $2}'|awk -F'_' '{print $1}'`
       #请求接口获取任务人信息
       owner=`curl -s -X GET --header "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"  http://192.168.1.10:8080/v1/ws/taskinfo?taskid=$jobid |cut -d'"' -f5|awk -F'\' '{print $1}'`
   fi
   if [ "$cpuused" -ge "500" ];
   then
       echo $jobid $cpuused
       jobidcpu=`echo $jobid $cpuused`
       echo $ip $jobidcpu
       ipcluster=`echo $ip-$clustername`
       jobidowner=`echo $jobid-$owner`
       #告警信息:集群ip-集群 作业名称-责任人 cpu使用率
       sendnotice $ipcluster $jobidowner $cpuused\%
   fi
   #echo "-------------------"
done

你可能感兴趣的:(hadoop,大数据,分布式)