高级运维工程师手把手教你获取当前服务器硬盘空间数据并写入MYSQL数据库监控表实战
一、前言
我们在日常工作生活中,经常遇到服务器硬盘爆满的事故,现在互联网的监控产品非常丰富,但是有些场景下不得不自己解决。有些特殊条件下不能用互联网产品,或者说产品的成本比较高。还不如自己写个shell脚本比较简单解决问题!
我把实现思路如上写出来了,然后按照这个思路成功搭建!这种方案在我维护的很多实际生产应用中真正的在使用!
有的时候用监控软件,监控平台产品,有各种限制,比如要花钱,比如要各种插件,还不如自己写一套!哈哈,笔者带你自己搭建一套!
二、shell脚本案例
(一)查看当前服务器是否安装mysql客户端
还有一个注意点:就是当前服务器必须提前安装好mysql客户端
直接执行mysql命令
在 CentOS 7中,你可以按照以下步骤安装 MySQL 客户端:
执行
yum list installed | grep mysql
命令,查看是否已安装 MySQL。
如果没有安装自行安装!
如果没有安装 MySQL,可以执行
yum install -y mysql-server mysql mysql-devel
命令进行安装。
安装完成后,可以执行
rpm -qi mysql-server
命令查看 MySQL 的信息,或者执行
mysql -V
命令查看 MySQL 的状态。
执行
service mysqld status
命令,查看 MySQL 服务是否启动。如果服务未启动,可以执行
service mysqld start
命令启动 MySQL 服务。
默认首次安装后的 MySQL 密码为空,用户为 root。
因此,可以使用mysql -uroot -p命令登录 MySQL。
请注意,在实际操作中,你可能需要根据服务器的具体情况进行适当的调整。
如果没有安装mysql客户端,数据库则不能直接写入!!
这块代码是直接调用mysql 的客户端指令进行数据库插入操作的!
(二)查看获取最大文件系统的名称
查看当前服务器最大硬盘的文件系统名称!
此脚本是指定看文件名称为:/dev/mapper/VolGroup-lv_home 的硬盘空间,一般情况下服务器数据库挂载在一个最大的分区下!此处注意自己配置!
(三)shell脚本案例
#!/bin/bash
echo 'nasen shell 20240307'
# 检查 output.txt 文件是否存在,如果不存在则创建
if [ ! -f "output.txt" ]; thentouch output.txt
fi# 清空 output.txt 文件内容
> output.txt# 执行 df -h 命令获取硬盘分区信息
df -h | awk '{filesystem = $1size = $2used = $3avail = $4use_percentage = $5mounted_on = $6# 声明变量并赋值file_system_name = filesystemtotal_size = sizeused_capacity = usedavailable_space = availusage_percentage = use_percentagemount_point = mounted_on# 只匹配文件系统名称为 /dev/mapper/VolGroup-lv_home 的数据if (filesystem == "/dev/mapper/VolGroup-lv_home") {total_size = substr(total_size, 0, length(total_size) - 1)available_space = substr(available_space, 0, length(available_space) - 1)used_capacity = substr(used_capacity, 0, length(used_capacity) - 1)usage_percentage = substr(usage_percentage, 0, length(usage_percentage) - 1)host="192.168.1.44"# 输出变量值到文件print file_system_name, total_size, used_capacity, available_space, usage_percentage, mount_point, host >> "output.txt"}
}'
echo 'nasen told you system info get success!'
# 读取文件并输出变量值
while IFS= read -r line; dofields=($line)file_system_name="${fields[0]}"total_size="${fields[1]}"used_capacity="${fields[2]}"available_space="${fields[3]}"usage_percentage="${fields[4]}"mount_point="${fields[5]}"host="${fields[6]}"echo "文件系统名称:$file_system_name"echo "总大小:$total_size"echo "已使用:$used_capacity"echo "可用空间:$available_space"echo "使用率:$usage_percentage"echo "挂载点:$mount_point"echo "主机地址:$host"TABLE="diskcheck_fb"
SQL_LIST="use monitor"mysql -h 127.0.0.1 -P 3306 -uroot -p123456 << EOF$SQL_LISTINSERT INTO diskcheck_fb (avail,used,size,host,mounted,cpu,date) VALUES('$available_space','$usage_percentage','$total_size','$host','$mount_point',"$usage_percentage",NOW());
EOF
echo 'nasen told you insert db success!'done < output.txt
执行效果如下:
MySQL 建表语句为
CREATE TABLE `diskcheck_fb` (`avail` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '硬盘空余空间',`used` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '硬盘已用空间',`size` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '硬盘空间大小',`host` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '所检查主机ip',`mounted` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '所检查硬盘目录',`cpu` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'cpu使用率',`date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;
三、配置操作系统定时器定时执行SHELL脚本来实时获取硬盘信息
要配置 Linux 操作系统的定时器,每 30 秒执行一次nasen.sh脚本,你可以使用crontab命令来实现。以下是具体的操作步骤:
打开crontab编辑器:使用以下命令打开crontab编辑器。
crontab -e
添加定时任务:在crontab编辑器中,添加以下一行来指定每 30 秒执行一次nasen.sh脚本。
* * * * * /home/nasen.sh
这行命令中的表示每分钟的每一秒都会执行该任务。你可以根据需要调整时间间隔。
保存并退出:编辑完成后,按Ctrl + X保存并退出crontab编辑器。
启动cron服务:确保cron服务正在运行,可以使用以下命令来检查和启动服务。*
service cron start
systemctl start cron
service crond restart
具体使用哪种命令取决于你的系统服务管理工具。
现在,你已经成功配置了 Linux 操作系统的定时器,每 30 秒执行一次nasen.sh脚本。cron会在后台自动执行该任务,无需人工干预。
请注意,crontab的设置可能需要一些时间才能生效,通常几分钟内就会开始执行定时任务。另外,确保nasen.sh脚本具有可执行权限,并且脚本中的路径和命令正确无误。
确定定时任务已经成功写入!
crontab -l
这个频率是每分钟1次
*/1 * * * * sh /home/nasen2.sh
四、然后看数据库表是否增量硬盘监控数据
查看定时器执行日志
tail -f /var/log/cron # 查看定时器的执行日志,看看有没有正常执行脚本!
在复看数据库的表里面每分钟增量一条监控数据
自己也可以写个短信接口,触发短信预警!
总结
此文章也是一个实现硬盘空间实时监控的实际案例
想实现远程监控服务器硬盘,可以由这个思路自己搭建一套!
此应用场景为那些不能用互联网平台,比较封闭的实际场景,并且想降低成本自己运维搞定的!
通过这个解决方案,也可以获取到其他系统参数,比系统的CPU占用率,系统的负载,某个进程是否活着!