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

高级运维工程师手把手教你获取当前服务器硬盘空间数据并写入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占用率,系统的负载,某个进程是否活着!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/518462.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue2项目总结】——动态渲染

文章目录 主页渲染封装接口页面调用传到子组件 搜索列表渲染根据关键字搜索分类id搜索 主页渲染 封装接口 封装准备接口 api/home.js import request from /utils/request// 获取首页数据 export const getHomeData () > {return request.get(/page/detail, {params: {p…

ThreeJs场景中添加视频

这节讲如何在threejs中添加一个视频的功能&#xff0c;在某些场景中可能会需要播放视频&#xff0c;比如在场景中方式一个大屏幕&#xff0c;大屏幕上需要播放视频&#xff0c;亦或者在场景中添加电视机的模型&#xff0c;电视机的画面上需要播放一些视频等。 其实添加视频和以…

Python读取influxDB数据库

1. influxDB连接 首先用InfluxDBStudio软件连接influxDB数据库来查看所有表&#xff1a; 2. 写sql语句来查询数据 然后和平时写sql查询语句一样&#xff0c;先创建连接client&#xff0c;然后调用其query函数来查询获取数据 self.client influxdb.InfluxDBClient(hostinflu…

Vue+SpringBoot打造校园疫情防控管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

制片管理工具:提高制片效率的必备工具

一、什么是制片管理工具 制片管理工具是一种为制片人提供支持和协助的软件或工具&#xff0c;并提供一种集中管理制作进度、任务分配、成本预算、资源管理和进度跟踪的方式。它可以帮助制片人在项目的开发、制作和发布方面更有效地进行规划和监督&#xff0c;确保整个流程能够…

线程安全——使用线程安全函数,多线程中执行fork引发的问题及如何解决

目录 一、引例 二、线程安全 三、多线程中执行fork 3.1 多线程中某个线程调用 fork()&#xff0c;子进程会有和父进程相同数量的线程吗? 3.2 父进程被加锁的互斥锁 fork 后在子进程中是否已经加锁 一、引例 在主线程和函数线程中进行语句分割并输出。 #include <stdi…

《Effective Modern C++》- 极精简版 1-4条

本文章属于专栏《业界Cpp进阶建议整理》 本文列出《Effective Modern C》的1-5条的个人理解的极精简版本。 Item1、模版类型推导 个人理解&#xff1a;推导规则是繁琐的&#xff0c;和运算符优先级一样&#xff0c;背下来没有意义&#xff0c;最好的办法是在使用中熟悉。常用的…

vue3: vscode自动补充ref变量的.value属性(解决方式)

操作一下步骤后&#xff0c; 然后重启vscode即可 效果图&#xff1a;

Doris入门

概念&#xff1a; 基于MPP设计理念实现的数据库&#xff0c;支持大数据集存储、实时数据分析&#xff0c;交互式数据分析等。 MPP&#xff1a;将任务并行分散至多个节点&#xff0c;由各节点单独计算&#xff0c;再将各节点计算结果汇总得到最终结果。 原理&#xff1a; FE&…

thinkphp5框架漏洞

条件&#xff1a; 根据ThinkPHP版本&#xff0c;如是5.x版本&#xff0c;即可使用ThinkPHP 5.x远程代码执行漏洞&#xff0c;无需登录&#xff0c;即可执行任意命令&#xff0c;获取服务器最高权限。 具体版本 5.x < 5.1.31 5.0.x< 5.0.23 框架介绍&#xff1a; Thi…

CC攻击的特征和防护措施

随着互联网的快速发展&#xff0c;网络攻击日益频繁。在目前的各种网络攻击中&#xff0c;CC攻击是一种常见的网络攻击手段之一。CC攻击&#xff08;也称为DDoS攻击&#xff09;是指通过大量请求或恶意流量向目标网站或服务器发送请求&#xff0c;以使其服务不可用。可能大家都…

Mysql date_format 格式化时间输出

网上的文章都是列一个大而全的表格&#xff0c;还有错误&#xff0c;我完全用不到那么多形式。遂自己开篇文章记录。 把datetime格式化为形如 2024-12-15 18:59:59的形式&#xff1a; %Y-%m-%d %H:%i:%S# 日期格式化输出select date_format(now(),%Y-%m-%d %H:%i:%S) time1,no…