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

news2024/10/22 12:30:26

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

讨论:5万官网是建站界的劳斯莱斯了吧,到了软件开发领域呢?

如题&#xff0c;所以赛道选择很重要&#xff0c;当然难度系数也不一样。能花5万元做官网的&#xff0c;凤毛麟角&#xff0c;如果是做软件开发&#xff0c;5万元顶多算个起步价&#xff0c;老铁们&#xff0c;是这样吗&#xff1f;

Hive的性能优化

1.调优概述 Hive 作为大数据领域常用的数据仓库组件&#xff0c;在设计和查询时要特别注意效率。影响 Hive 效率的几乎从不是数据量过大&#xff0c;而是数据倾斜、数据冗余、Job或I/O过多、MapReduce分配不合理等等。对 Hive 的调优既包含 Hive 的建表设计方面&#xff0c;对H…

Deeplearning4j【基础 01】初识Java深度学习框架DL4J

初识Java深度学习框架DL4J 1.起因2.简介3.组件3.1 Deeplearning4j/ScalNet3.1.1 Deeplearning4jf&#xff08;Java&#xff09;3.1.2 ScalNet&#xff08;Scala&#xff09; 3.2 ND4J/LibND4J3.3 SameDiff3.4 DataVec3.5 Arbiter3.6 RL4J 4.总结 内容来自网络&#xff0c;基于官…

20240304-使用VS2022编译blender3.6.2源代码

20240304-使用VS2022编译blender3.6.2源代码 一、软件环境 Win10 x64 22h2 JuneVS2022 v17.9.0CMake v3.24.4SVN v1.14.3GIT v2.29.2标签&#xff1a;win10 22h2 vs2022 blender 63335分栏&#xff1a;C 二、硬件环境 Win10 x64的PC台式机 三、获取源码 方法一 网盘下载…

龙蜥社区成立系统安全 SIG,助力系统安全生态

随着数字化时代的到来&#xff0c;云计算、大数据、人工智能等技术的广泛应用&#xff0c;操作系统承载越来越多的关键业务和数据&#xff0c;其安全性对于信息系统的运转和发展具有至关重要的作用。因此&#xff0c;加强操作系统安全防护、提高安全意识和防范能力是数字化时代…

php常见的45个漏洞及解决方案

[TOC]&#xff08;太多了&#xff0c;目录只列出最重要的几个&#xff0c;剩下的同学们自己翻&#xff09; PHP作为一种广泛应用的服务器端脚本语言&#xff0c;在历史上曾曝出过多种安全漏洞。以下是一些PHP漏洞的类别及其简要解释&#xff0c;以及如何解决这些问题&#xff1…

看一看阿里云,如何把抽象云概念,用可视化表达出来。

云数据库RDS_关系型数据库 云数据库RDS_关系型数据库 专有宿主机 云数据库RDS_关系型数据库_MySQL源码优化版 内容协作平台CCP-企业网盘协同办公-文件实时共享

LT6813/ADBMS1818底层驱动---均衡控制

1、LT6813采用内部均衡的原理 2、平衡控制结构体 根据数据库中读取的控制值设置平衡。要为单元设置平衡&#xff0c;必须将相应的位写入配置寄存器中。LTC 驱动程序仅执行数据库中 BMS 写入的数据。 参数 ltc_stateLTC 状态机的状态pSpi接口指向 SPI 配置的指针pTxBuff &…

【nodejs】“__dirname is not defined”错误修复

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 原理CommonJS vs ESM错误原因 2️⃣ 禁用 ESM 模式并改用 CommonJS方案一&#xff1a;项目方案二&#xff1a;单文件 3️⃣ 在 ESM 模式下自实现__dirname&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 从网上找了一份代码&am…

O2O:Offline Meta-Reinforcement Learning with Online Self-Supervision

ICML 2022 paper Introduction 元强化学习(Meta RL)结合O2O。元RL需要学习一个探索策略收集数据&#xff0c;同时还需学习一个策略快速适应新任务。由于策略是在固定的离线数据集上进行元训练的&#xff0c;因此在适应探索策略收集的数据时&#xff0c;它可能表现得不可预测&…

Tomcat源码解析(三):LifeCycle生命周期管理

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a;Tomcat整体架构 Tomcat源码解析(二)&#xff1a;Bootstrap和Catalina Tomcat源码解析(三)&#xff1a;LifeCycle生命周期管理 目录 前言一、LifeCycle接口1、接口介绍2、生命周期状态 二、LifecycleBase抽象类1、监听器2、…

JavaEE之volatile关键字

一.内存可见性问题 什么是内存可见性问题 计算机运行的程序/代码&#xff0c;往往需要访问数据。这些数据往往存在于内存中。 cup使用此变量时&#xff0c;就会把内存中的数据先读出来&#xff0c;加载到cpu寄存器中&#xff0c;再去参与运算。 但是&#xff0c;关键是cpu读…

opengl 学习(三)-----着色器

着色器 分类demo效果解析教程 分类 OPengl C demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>#include <string> #include <fstream> #include <sstream>…

Spring源码:手写AOP

文章目录 一、概念1、AOP是什么&#xff1f;2、相关概念1&#xff09;目标对象Target2&#xff09;通知Advice3&#xff09;连接点Joinpoint4&#xff09;切点Pointcut5&#xff09;切面Aspect6&#xff09;织入Weaving 二、分析三、实现1、实现Advice1&#xff09;前置通知2&a…

IDEA中新增文件,弹出框提示是否添加到Git点错了,怎么重新设置?

打开一个配置了Git的项目&#xff0c;新增一个文件&#xff0c;会弹出下面这个框。提示是否将新增的文件交给Git管理。 一般来说&#xff0c;会选择ADD&#xff0c;并勾选Dont ask agin&#xff0c;添加并不再询问。如果不小心点错了&#xff0c;可在IDEA中重新设置&#xff08…

经典语义分割(二)医学图像分割模型UNet

经典语义分割(二)医学图像分割模型UNet 我们之前介绍了全卷积神经网络( FCN) &#xff0c;FCN是基于深度学习的语义分割算法的开山之作。 今天我们介绍另一个语义分割的经典模型—UNet&#xff0c;它兼具轻量化与高性能&#xff0c;通常作为语义分割任务的基线测试模型&#x…

海格里斯HEGERLS助力服装业领域数智化转型 配备7000个托盘位 仓库容量增超110%

近年来&#xff0c;用工荒成为服装制造行业的一大痛点。对此&#xff0c;整个生产体系就要不断地向智能化、自动化生产设备进行转型&#xff0c;甚至在研发设计上都要面向自动化做一些新一代服装制造业的开发。 作为较早入局物流赛道的河北沃克&#xff0c;目前已构建起以AI赋能…

P2241 统计方形(数据加强版) python解法

求n*m网格内矩形的数目 - tenos - 博客园 (cnblogs.com) 法一&#xff08;题解推规律暴力枚举得到&#xff09;&#xff1a; n,mmap(int,input().split()) sqr,rec0,0 #正方形和长方形个数 #以长宽做循环&#xff0c;每次求n*m大小的矩形的个数 #题解是从0开始的&#xff0c;我…

Java二级--操作题详解(1)

目录 1.第一套&#xff1a; 1.1 基本操作&#xff1a; 1.2 题解分析&#xff1a; 2.1 简单应用&#xff1a; 2.2 解题分析&#xff1a; 3.1 综合应用&#xff1a; 3.2解题分析&#xff1a; 1.第一套&#xff1a; 1.1 基本操作&#xff1a; 在考生文件夹中存有文件名为J…

浅析扩散模型与图像生成【应用篇】(八)——BBDM

8. BBDM: Image-to-Image Translation with Brownian Bridge Diffusion Models 本文提出一种基于布朗桥&#xff08;Brownian Bridge&#xff09;的扩散模型用于图像到图像的转换。图像到图像转换的目标是将源域 A A A中的图像 I A I_A IA​&#xff0c;映射到目标域 B B B中得…