#!/bin/bash
#java进程存活监控,监测pid_xxx里的进程,不存在则发送告警到企业微信群
#检测进程
check_pid(){
pid=$1
val=$2
#echo "ps -p $pid"
result=$(ps -p $pid);
#echo "reuslt : $result .."
str=${result:0-4}
#echo "str : $str .."
if [ "java" = "$str" ];then
msg="checkExist:true, 进程($pid)存在, path: $val"
echo ${msg}
else
msg="checkExist:false, 进程($pid)不存在, path: $val, 发送告警"
echo ${msg}
sendWarn ${pid} $val
fi
}
#发送告警
sendWarn(){
pid=$1
path=$2
#ip='10.17.10.34'
ip=$(ifconfig|grep "broadcast"|awk '{print $2}')
msg="进程($pid)不存在, ip:$ip, path:$val, 发送告警"
#echo "msg : $msg"
body='{"msgtype":"text","text":{"content":"进程('$pid')不存在,ip:'$ip',path:'$val',发送告警"}}';
echo '----- send start -----'
echo $body
echo '----- send end -----'
curl -X POST 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx-852e-43e9-bdcf-b9142bcdebb1' -H 'Content-Type: application/json' -d $(echo ${body})
#exit
}
#打印系统状态
domonitor(){
echo "---------- monitor start ----------"
free -m
echo "--------------------"
top -c -b -oRES -n 1
echo "--------------------"
ps aux|grep java
echo "---------- monitor end ----------"
}
#80%内存告警
checkMemory(){
mem_total=`free -m|grep -i 'mem'|awk '{print $2}'`
mem_used=`free -m|grep -i 'mem'|awk '{print $3}'`
#echo "mem_total: $mem_total"
#echo "mem_used: $mem_used"
mem_free=$(( $mem_total*80 - $mem_used*100 ))
#echo "mem_free: $mem_free"
if [ $mem_free -lt 0 ];then
echo "---------- memory warn start ----------"
#echo "内存80%告警,$mem_used / $mem_total"
ip=$(ifconfig|grep "broadcast"|awk '{print $2}')
body='{"msgtype":"text","text":{"content":"内存80%告警,ip:'$ip','$mem_used'/'$mem_total'(M)"}}';
echo $body
curl -X POST 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx-852e-43e9-bdcf-b9142bcdebb1' -H 'Content-Type: application/json' -d $(echo ${body})
echo "---------- memoery warn end ----------"
fi
}
#主程序
domain(){
checkMemory
domonitor
echo "task start"
echo "--------------------"
for val in $(find './service' './other' -name 'pid_*')
do
echo "pid is is : ${val}"
pid=$(cat ${val})
echo ${pid}
if [ -n "$pid" ];then
#echo "这不是个空值,${pid}"
#检测这个进程
check_pid ${pid} $val
else
echo "这是一个空值,$val"
fi
echo '----- next -----'
done
echo "task done"
}
dir='/data/div11/backend'
cd $dir
d=`date +%Y%m%d_%H%M00`
#check_java_process_20231102_165000.log
d2=`date +%Y%m%d`
dir_date="$dir/log/check_java_process/$d2"
if [ ! -d "$dir_date" ];then
mkdir $dir_date
fi
logFile="$dir_date/check_java_process_$d.txt"
domain > $logFile
#end
linux 进程监控
于 2023-11-03 16:26:48 首次发布