常用Shell脚本编写——系统监控类‌

编写一个shell脚本,
功能:磁盘空间检查与预警‌,监控磁盘使用率,超过阈值自动触发邮件报警和钉钉机器人报警

!/bin/bash

配置区

THRESHOLD=${1:-85} # 默认阈值85%,可通过参数1自定义
CHECK_PARTITIONS=”/ /data” # 指定检测分区,空值检测所有分区
LOG_FILE=”/var/log/disk_monitor.log” # 日志文件路径
MAX_LOG_SIZE=1048576 # 日志最大1MB

邮件报警配置(需要提前配置mailutils或ssmtp)

MAIL_ENABLE=true # 启用邮件通知
ADMIN_EMAIL=”admin@example.com”

钉钉机器人配置

DINGTALK_ENABLE=true
DINGTALK_WEBHOOK=””
DINGTALK_SECRET=””

日志记录函数

log() {
local log_msg=”[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1″

# 控制台输出
echo -e "$log_msg"

# 文件记录(自动轮转)
if [ -f "$LOG_FILE" ] && [ $(wc -c < "$LOG_FILE") -ge $MAX_LOG_SIZE ]; then
    mv "$LOG_FILE" "${LOG_FILE}.1"
fi
echo "$log_msg" >> "$LOG_FILE"

}

邮件通知函数

send_mail() {
{
echo “Subject: Disk Alert on $(hostname)”
echo “To: $ADMIN_EMAIL”
echo “”
echo “$1”
} | sendmail -t
}

钉钉机器人通知(需要JSON处理工具jq)

send_dingtalk() {
local timestamp=$(date +%s%3N)
local sign=$(echo -ne “$timestamp\n$DINGTALK_SECRET” | openssl dgst -sha256 -binary | base64)
local msg='{
“msgtype”: “text”,
“text”: {
“content”: “‘”$1″‘”
}
}’

curl -s "$DINGTALK_WEBHOOK" \
    -H "Content-Type: application/json" \
    -d "$msg" \
    --write-out "HTTP状态码:%{http_code}\n" >> $LOG_FILE

}

主检测逻辑

check_disks() {
local df_output

# 获取磁盘信息
if [ -z "$CHECK_PARTITIONS" ]; then
    df_output=$(df -h --output=target,pcent | grep -v 'Mounted')
else
    df_output=$(df -h --output=target,pcent $CHECK_PARTITIONS | grep -v 'Mounted')
fi

# 遍历检测
echo "$df_output" | while read -r target pcent; do
    local usage=${pcent%%%}
    
    if [ $usage -ge $THRESHOLD ]; then
        local alert_msg=" 磁盘告警:分区 $target 使用率 ${usage}% (阈值 ${THRESHOLD}%)"
        
        log "$alert_msg"
        
        # 触发邮件通知
        if $MAIL_ENABLE; then
            send_mail "$alert_msg" && log "邮件已发送至 $ADMIN_EMAIL"
        fi
        
        # 触发钉钉通知
        if $DINGTALK_ENABLE && [ -n "$DINGTALK_WEBHOOK" ]; then
            send_dingtalk "$alert_msg" && log "钉钉通知已发送"
        fi
    fi
done

}

脚本入口

main() {
log “==== 磁盘检测开始 “
check_disks
log ” 检测完成 ====\n”
}

执行主函数

main

来源链接:https://www.cnblogs.com/LCX8/p/18804877

© 版权声明
THE END
支持一下吧
点赞6 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容