#!/bin/bash
# 创建日志目录
LOG_DIR="/log"
LOG_FILE="$LOG_DIR/jk.txt"
# 阈值设置
CPU_THRESHOLD=80 # CPU使用率阈值(%)
MEM_THRESHOLD=80 # 内存使用率阈值(%)
DISK_THRESHOLD=80 # 磁盘使用率阈值(%)
NET_THRESHOLD=1000 # 网络流量阈值(KB/s)
TONG_CPU_THRESHOLD=50 # 东方通中间件CPU使用率阈值(%)
TONG_MEM_THRESHOLD=70 # 东方通中间件内存使用率阈值(%)
# 创建日志目录(如果不存在)
if [ ! -d "$LOG_DIR" ]; then
mkdir -p "$LOG_DIR"
echo "创建日志目录: $LOG_DIR"
fi
# 覆盖已存在的日志文件
if [ -f "$LOG_FILE" ]; then
> "$LOG_FILE"
echo "清空现有日志文件: $LOG_FILE"
fi
# 获取当前时间戳
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
# 函数:记录日志
log_message() {
echo "[$timestamp] $1" >> "$LOG_FILE"
}
# 函数:检查东方通中间件进程
check_tongweb_process() {
# 查找所有与东方通相关的进程
local tongweb_pids=$(ps -ef | grep -i "tongweb" | grep -v grep | awk '{print $2}')
if [ -n "$tongweb_pids" ]; then
echo "运行中 (PIDs: $tongweb_pids)"
return 0
else
echo "未运行"
return 1
fi
}
# 函数:获取东方通中间件的CPU使用率
get_tongweb_cpu() {
local tongweb_pids=$(ps -ef | grep -i "tongweb" | grep -v grep | awk '{print $2}')
if [ -z "$tongweb_pids" ]; then
echo "0"
return
fi
# 获取所有东方通进程的CPU使用率总和
local total_cpu=0
for pid in $tongweb_pids; do
local cpu_usage=$(ps -p $pid -o %cpu --no-headers 2>/dev/null)
if [ -n "$cpu_usage" ]; then
total_cpu=$(echo "$total_cpu + $cpu_usage" | bc)
fi
done
echo "$total_cpu"
}
# 函数:获取东方通中间件的内存使用率
get_tongweb_mem() {
local tongweb_pids=$(ps -ef | grep -i "tongweb" | grep -v grep | awk '{print $2}')
if [ -z "$tongweb_pids" ]; then
echo "0"
return
fi
# 获取所有东方通进程的内存使用率总和
local total_mem=0
for pid in $tongweb_pids; do
local mem_usage=$(ps -p $pid -o %mem --no-headers 2>/dev/null)
if [ -n "$mem_usage" ]; then
total_mem=$(echo "$total_mem + $mem_usage" | bc)
fi
done
echo "$total_mem"
}
# 函数:检查系统CPU使用率
check_cpu() {
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo "$cpu_usage"
}
# 函数:检查系统内存使用率
check_memory() {
mem_usage=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
echo "$mem_usage"
}
# 函数:检查磁盘使用率
check_disk() {
disk_usage=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
echo "$disk_usage"
}
# 函数:检查网络流量
check_network() {
# 获取当前网络流量(KB/s)
interface=$(ip route | grep default | awk '{print $5}' | head -n1)
if [ -z "$interface" ]; then
echo "无法确定网络接口"
return
fi
rx_bytes_prev=$(cat /sys/class/net/$interface/statistics/rx_bytes 2>/dev/null)
tx_bytes_prev=$(cat /sys/class/net/$interface/statistics/tx_bytes 2>/dev/null)
# 等待1秒再次测量
sleep 1
rx_bytes_next=$(cat /sys/class/net/$interface/statistics/rx_bytes 2>/dev/null)
tx_bytes_next=$(cat /sys/class/net/$interface/statistics/tx_bytes 2>/dev/null)
# 计算流量(KB/s)
if [ -n "$rx_bytes_prev" ] && [ -n "$rx_bytes_next" ]; then
rx_rate=$(( (rx_bytes_next - rx_bytes_prev) / 1024 ))
tx_rate=$(( (tx_bytes_next - tx_bytes_prev) / 1024 ))
echo "接收: ${rx_rate}KB/s, 发送: ${tx_rate}KB/s"
else
echo "无法获取网络流量数据"
fi
}
# 主监控函数
monitor_system() {
log_message "=== 系统监控报告 ==="
# 检查东方通中间件状态
tongweb_status=$(check_tongweb_process)
log_message "东方通中间件状态: $tongweb_status"
if echo "$tongweb_status" | grep -q "运行中"; then
# 检查东方通中间件CPU使用率
tongweb_cpu=$(get_tongweb_cpu)
log_message "东方通中间件CPU使用率: ${tongweb_cpu}%"
if (( $(echo "$tongweb_cpu > $TONG_CPU_THRESHOLD" | bc -l) )); then
log_message "警告: 东方通中间件CPU使用率超过阈值 ${TONG_CPU_THRESHOLD}%!"
fi
# 检查东方通中间件内存使用率
tongweb_mem=$(get_tongweb_mem)
log_message "东方通中间件内存使用率: ${tongweb_mem}%"
if (( $(echo "$tongweb_mem > $TONG_MEM_THRESHOLD" | bc -l) )); then
log_message "警告: 东方通中间件内存使用率超过阈值 ${TONG_MEM_THRESHOLD}%!"
fi
fi
# 检查系统CPU
cpu_usage=$(check_cpu)
log_message "系统CPU使用率: ${cpu_usage}%"
if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
log_message "警告: 系统CPU使用率超过阈值 ${CPU_THRESHOLD}%!"
fi
# 检查系统内存
mem_usage=$(check_memory)
log_message "系统内存使用率: ${mem_usage}%"
if [ "$mem_usage" -gt "$MEM_THRESHOLD" ]; then
log_message "警告: 系统内存使用率超过阈值 ${MEM_THRESHOLD}%!"
fi
# 检查磁盘
disk_usage=$(check_disk)
log_message "根分区磁盘使用率: ${disk_usage}%"
if [ "$disk_usage" -gt "$DISK_THRESHOLD" ]; then
log_message "警告: 磁盘使用率超过阈值 ${DISK_THRESHOLD}%!"
fi
# 检查网络
net_status=$(check_network)
log_message "网络流量: $net_status"
log_message "=== 监控结束 ==="
log_message "" # 空行作为分隔符
}
# 执行监控
monitor_system
echo "监控完成,结果已保存到: $LOG_FILE"