编写一个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
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
暂无评论内容