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

打印 上一主题 下一主题

主题 1585|帖子 1585|积分 4755

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写一个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"
  1. # 控制台输出
  2. echo -e "$log_msg"
  3. # 文件记录(自动轮转)
  4. if [ -f "$LOG_FILE" ] && [ $(wc -c < "$LOG_FILE") -ge $MAX_LOG_SIZE ]; then
  5.     mv "$LOG_FILE" "${LOG_FILE}.1"
  6. fi
  7. 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"'"
}
}'
  1. curl -s "$DINGTALK_WEBHOOK" \
  2.     -H "Content-Type: application/json" \
  3.     -d "$msg" \
  4.     --write-out "HTTP状态码:%{http_code}\n" >> $LOG_FILE
复制代码
}
主检测逻辑

check_disks() {
local df_output
  1. # 获取磁盘信息
  2. if [ -z "$CHECK_PARTITIONS" ]; then
  3.     df_output=$(df -h --output=target,pcent | grep -v 'Mounted')
  4. else
  5.     df_output=$(df -h --output=target,pcent $CHECK_PARTITIONS | grep -v 'Mounted')
  6. fi
  7. # 遍历检测
  8. echo "$df_output" | while read -r target pcent; do
  9.     local usage=${pcent%%%}
  10.    
  11.     if [ $usage -ge $THRESHOLD ]; then
  12.         local alert_msg=" 磁盘告警:分区 $target 使用率 ${usage}% (阈值 ${THRESHOLD}%)"
  13.         
  14.         log "$alert_msg"
  15.         
  16.         # 触发邮件通知
  17.         if $MAIL_ENABLE; then
  18.             send_mail "$alert_msg" && log "邮件已发送至 $ADMIN_EMAIL"
  19.         fi
  20.         
  21.         # 触发钉钉通知
  22.         if $DINGTALK_ENABLE && [ -n "$DINGTALK_WEBHOOK" ]; then
  23.             send_dingtalk "$alert_msg" && log "钉钉通知已发送"
  24.         fi
  25.     fi
  26. done
复制代码
}
脚本入口

main() {
log "==== 磁盘检测开始 "
check_disks
log " 检测完成 ====\n"
}
实行主函数

main

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表