网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

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

时间:2025-04-08 14:49

人气:

作者:admin

标签:

导读:编写一个shell脚本, 功能:磁盘空间检查与预警‌,监控磁盘使用率,超过阈值自动触发邮件报警和钉钉机器人报警 !/bin/bash 配置区 THRESHOLD=${1:-85} # 默认阈值85%,可通过参数1自定义 C...

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

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

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
}

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

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信