高级运维工程师手把手教从0到1搭建一套linux服务器硬盘监控平台实战训练

本文详细介绍了如何通过shell脚本在Linux服务器上监控硬盘空间,包括安装MySQL客户端、编写脚本获取磁盘信息、插入数据库以及配置定时任务。作者分享了实现过程和关键步骤,适用于需要自建监控系统的封闭场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高级运维工程师手把手教你获取当前服务器硬盘空间数据并写入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" ]; then
    touch output.txt
fi

# 清空 output.txt 文件内容
> output.txt

# 执行 df -h 命令获取硬盘分区信息
df -h | awk '{
   filesystem = $1
    size = $2
    used = $3
    avail = $4
    use_percentage = $5
    mounted_on = $6

    # 声明变量并赋值
    file_system_name = filesystem
    total_size = size
    used_capacity = used
    available_space = avail
    usage_percentage = use_percentage
    mount_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; do
    fields=($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_LIST

INSERT 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占用率,系统的负载,某个进程是否活着!
笔者简介
国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术很渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值