本文最后更新于 2024-08-20,文章内容可能已经过时。

#!/bin/bash

# 企业微信的 Webhook URL
WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=81df5018-c175-4f94-a805-XXXXXXXXX"

# 定义环境标识
ENVIRONMENT="XXXX-生产环境"

# 定义提到的用户和手机号列表
MENTIONED_LIST='["@all"]'  # 根据需要修改
MENTIONED_MOBILE_LIST='["175276*****","1385*****83"]'  # 根据需要修改

# 定义告警临界值
CPU_THRESHOLD=80        # CPU使用率临界值(百分比)
MEM_THRESHOLD=80        # 内存使用率临界值(百分比)
DISK_THRESHOLD=80       # 硬盘使用率临界值(百分比)

# 定义需要监控的JAR包数组
JAR_NAMES=("demo1.jar" "demo2.jar" "demo3.jar")

# 发送告警函数
send_alert() {
    local content="$1"

    # 构建消息内容,添加环境标识
    EMAIL_BODY=$(cat <<EOF
{
    "msgtype": "text",
    "text": {
        "content": "$ENVIRONMENT\n\n$content,请及时进行处理!",
        "mentioned_mobile_list": [$MENTIONED_MOBILE_LIST]
    }
}
EOF
    )

    # 发送请求
    RESPONSE=$(curl -s -X POST \
        -H "Content-Type: application/json" \
        -d "$EMAIL_BODY" \
        "$WEBHOOK_URL")

    # 检查发送是否成功
    ERRCODE=$(echo $RESPONSE | jq -r '.errcode')
    if [ "$ERRCODE" -eq 0 ]; then
        echo "Alert sent successfully"
    else
        echo "Failed to send alert: $RESPONSE"
    fi
}

# 检查CPU使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
    send_alert "CPU使用率告警: $cpu_usage%"
fi

# 检查内存使用率
mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if (( $(echo "$mem_usage > $MEM_THRESHOLD" | bc -l) )); then
    send_alert "内存使用率告警: $mem_usage%"
fi

# 检查硬盘使用率
disk_usage=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
if (( disk_usage > DISK_THRESHOLD )); then
    send_alert "硬盘使用率告警: $disk_usage%"
fi

# 检查每个JAR包是否正在运行
for jar_name in "${JAR_NAMES[@]}"; do
    if ! pgrep -f "$jar_name" > /dev/null; then
        send_alert "JAR运行状态告警: $jar_name 没有运行"
    fi
done