监控磁盘使用率解决方案

描述:有 100 台centos服务器, 相互之间内网 ssh 互通, 用户名密码已知,服务器ip 列表已知, 请设计一个技术方案,输出磁盘使用率超过 90%的服务器。要求写出详细的技术方案,涉及到的命令和脚本请写好代码,第三方库请介绍安装使用说明。

方案

方案思路:

  • 测试邮箱是否可用

  • 设置定时任务每五分钟执行以下脚本查看占用情况

  • 当发现占用比超过90%发送告警邮件

  • 安装ansible服务,编译yml文件批量执行任务

测试邮件

#这里我们使用qq邮箱作为收件方
vim /etc/mail.rc
set bsdcompat
set from=[email protected] #收件名字
set smtp=smtp.qq.com  #smtp地址
set smtp-auth-user=[email protected]  #收件地址  
set smtp-auth-password=xxxxxxx  #smtp验证码,在qq邮箱操作,通过手机发送信息获取验证码
set smtp-auth=login


#测试
echo "邮件测试(测试内容)" | mail -s "测试结果(主题)" [email protected]

脚本内容

vim /server/scripts/df.sh
#!/bin/bash                                                                             
>/tmp/disk.log
#这里是测试的阈值
D_Value=90
#取出磁盘占比百分比
D_Use=`df -h|grep '^/dev'|awk '{print $5}'|sed 's#%##'`
#取出主机私网ip地址
IP_Addr=`/sbin/ifconfig eth1|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
for i in $D_Use
do
    if [  $i -ge $D_Value ];then
        D_Name=`df -h|sed -n '/'"$i"'/p'|awk '{print $1}'`
        D_Part=`df -h|sed -n '/'"$i"'/p'|awk '{print $6}'`
        date>>/tmp/disk.log
        echo "$IP_Addr服务器的$D_Name(分区$D_Part)使用率超过$D_Value%,当前使用率为$i%。">>/tmp/disk.log
    fi
done
if [ -s /tmp/disk.log ];then
    cat /tmp/disk.log|mail -s "Warning - Used DISK" 1354586675@qq.com
fi

定时任务

crontab -e
#每五分钟执行一次脚本
*/5 * * * * /server/scripts/df.sh

部署ansible

yum install epel-release -y
yum install ansible -y
ansible --version

#设置主机清单,用序列匹配方法
vim /etc/ansible/hosts
[ubantu_server]
172.16.1.[41:100]


#分发密钥给100台主机
ssh-keygen
ansible ubantu_server -m copy -a "src=/root .ssh/id_rsa.pub dest=/root.ssh"


mkdir  /etc/ansible/palybook

#编写yml文件
vim df.yml
- hosts: ubantu_server
  remote_user: root
  tasks:
  - name: 创建脚本目录
    file:
      path: /server/scripts
      state: directory
      mode: 0755 
  - name: 推送脚本
    copy:
      src: /server/scripts/df.sh
      dest: /server/scripts/
  - name: 推送mail配置文件
    copy:
      src: /etc/mail.rc
      dest: /etc/
      force: yes
  - name: 创建定时任务
    cron:
      name: "Disk percentage check"
      minute: "*/5"
      job: "sh /server/scripts/df.sh"
      
      
  #执行剧本
  ansible-playbook ubantu.yml

猜你喜欢

转载自www.cnblogs.com/Mercury-linux/p/12695005.html