#!/bin/bash
# 获取 dd 程序的 CPU 和内存占用率
cpu_mem_usage=$(ps aux | grep -E '/DBAudit/app/bin/dd|./dd' | grep -v grep | awk '{print $3, $4}')
dd_cpu=$(echo $cpu_mem_usage | awk '{print $1}')
dd_mem=$(echo $cpu_mem_usage | awk '{print $2}')
# 检查 dd 程序是否占用 CPU 和内存
dd_alert=""
if [[ "$dd_cpu" == "0.0" && "$dd_mem" == "0.0" ]]; then
dd_alert="⚠️ dd 程序的 CPU 和内存占用都为 0,可能存在异常!"
fi
@
# 检查 dd 进程状态
dd_status="存活"
dd_process_alert=""
if ! pgrep -f "dd" > /dev/null; then
dd_status="死亡"
dd_process_alert="⚠️ dd 进程已死亡!"
fi
# 统计目录下日志文件的数量
dir_nums=$(ls /DBAudit/cache/parselog | wc -l)
# 查找并杀死 CPU 占用大于 70,且内存占用为 0 的 npp 进程
need_kill_progress=$(ps aux | awk '/npp/ && $3 > 70 && $4 == 0' | awk '{print "pid:",$2,"cpu:",$3,"mem:",$4}')
ps aux | awk '/npp/ && $3 > 70 && $4 == 0 {print $2}' | xargs --no-run-if-empty kill -9
# 检查 npc 进程状态
npc_status="存活"
npc_alert=""
if ! pgrep -f "npc" > /dev/null; then
npc_status="死亡"
npc_alert="⚠️ npc 进程已死亡!"
fi
# 检查 npp 进程状态
npp_status="存活"
npp_alert=""
if ! pgrep -f "npp" > /dev/null; then
npp_status="死亡"
npp_alert="⚠️ npp 进程已死亡!"
fi
# 构建消息内容
msg="dd程序cpu占用${dd_cpu}%,mem占用${dd_mem}%\n\n目录下日志堆积数:${dir_nums}\n\n需要杀死的npp_ora进程信息:${need_kill_progress}\n\nnpc进程状态:${npc_status}\n\nnpp进程状态:${npp_status}\n\ndd进程状态:${dd_status}"
# 如果有告警信息,添加到消息中
if [ -n "$dd_alert" ]; then
msg="${dd_alert}\n\n${msg}"
fi
if [ -n "$dd_process_alert" ]; then
msg="${dd_process_alert}\n\n${msg}"
fi
if [ -n "$npc_alert" ]; then
msg="${npc_alert}\n\n${msg}"
fi
if [ -n "$npp_alert" ]; then
msg="${npp_alert}\n\n${msg}"
fi
# 发送告警信息
send="xxx通知群"
curl -X POST "http://192.168.1.205:3002/webhook/msg/v2?token=xxx" \
-H "Content-Type: application/json" \
-d "{\"to\": \"$send\",\"isRoom\":true, \"data\": {\"content\": \"$msg\"}}"