【linux shell】服务器系统自动化巡检脚本资源状况统计

2023-11-04

        运维服务器系统的时候需要定期检查服务器系统资源状况,如CPU、内存、硬盘这些资源消耗信息统计,在这种情况下也可以用开源的监控系统导出相应的需求信息或者直观的通过监控平台去查看资源状况。

        本文将介绍另一种方式通过Linux shell脚本实现服务器系统资源状况信息统计;因在项目上服务器上不允许安装与项目无关的服务(监控软件),所以只能通过自动化脚本解决。

1.服务器系统资源状况统计巡检脚本:

vim system_check_server_auto.sh 
#!/bin/bash
time_day=`date  +%Y-%m-%d_%H:%M:%S`
time_cront=`date  +%Y%m%d%H%M%S`
time_cront_day=`date  +%Y%m%d`
time_file=`date +%Y-%m-%d`
system_hostname=$(hostname | awk '{print $1}')

#获取服务器IP
system_ip=$(hostname -I| awk '{print $1}')

#获取总内存
mem_total=$(free -m | grep Mem| awk -F " " '{print $2}')

#获取剩余内存
mem_free=$(free -m | grep "Mem" | awk '{print $4}')

#获取已用内存
mem_use=$(free -m | grep Mem| awk -F " " '{print $2-$4-$6}')

#系统进程数
load_1=`ps -ef |wc -l`

#僵尸进程数
load_5=`top -b -n 1 |grep Tasks |awk '{print $10}'`

#CPU空闲id
load_15=`top -b -n 1 |grep Cpu |awk -F',' '{print $4}' |awk -F'id' '{print $1}'`

#过滤磁盘使用率大于60%目录,并加入描述
#disk_1=$(df -Ph | awk '{if(+$5>15) print "分区:"$6,"总空间:"$2,"使用空间:"$3,"剩余空间:"$4,"磁盘使用率:"$5}')
disk_most=$(df -P | awk '{if(+$5>0) print $2,$6,$1}'|grep -v ":/"|sort -nr|awk '{print $2}'|head -1)
disk_f=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $6}')
disk_total=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $2}')
disk_free=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $4}')
disk_per=$(df -Ph|grep "$disk_most"$ | awk '{if(+$5>0) print $5}')

disk_ux=$(df -P | awk '{if(+$5>0) print $5,$1}'|grep -v ":/"|sort -nr|awk -F"%" '{print $1}'|head -1)
if [[ $disk_ux -gt 60 ]]
     then
	#分区
	disk_f_60=$(df -P | awk '{if(+$5>0) print $5,$1,$6}'|grep -v ":/"|sort -nr|awk  '{print $3}'|head -1)
	#磁盘使用率
	disk_per_60=$(df -P | awk '{if(+$5>0) print $5,$1,$6}'|grep -v ":/"|sort -nr|awk  '{print $1}'|head -1)
	disk_status=不正常
     else
	#分区
        disk_f_60=无
        #磁盘使用率
        disk_per_60=无
	disk_status=正常
     fi
#文件路径
CHECK_HOME="$(cd "`dirname "$0"`"; pwd)"
path="$CHECK_HOME"/monitor_system_check_"$time_file".txt

#内存阈值
mem_mo='70'
 PERCENT=$(printf "%d%%" $(($mem_use*100/$mem_total)))
 PERCENT_1=$(echo $PERCENT|sed 's/%//g')
 if [[ $PERCENT_1 -gt $mem_mo ]]
     then
      mem_status_total="$mem_total"MB
      mem_status_use="$mem_use"MB
      mem_status_per=$PERCENT
      mem_status=不正常
    else
      mem_status_total="$mem_total"MB
      mem_status_use=$"$mem_use"MB
      mem_status_per=$PERCENT
      mem_status=正常
 fi

if [[ ! -s $path ]] || [[ `grep 统计时间 $path|wc -l` -eq 0 ]];then 
echo -e  "统计时间 服务器IP 系统进程数 CPU空闲id 僵尸进程数 总内存大小 已用内存 内存使用率 内存巡检状态 分区 数据盘总空间 数据盘剩余空间 数据盘磁盘使用率 磁盘超60使用分区 磁盘超60使用率 磁盘状况" >> $path
fi
echo -e  "$time_day $system_ip $load_1 $load_15 $load_5 $mem_status_total $mem_status_use $mem_status_per $mem_status $disk_f $disk_total $disk_free $disk_per $disk_f_60 $disk_per_60 $disk_status" >> $path

2.给脚本赋执行权限

chmod -x system_check_server_auto.sh

3.执行巡检脚本:

sh system_check_server_auto.sh

4.添加计划任务定时自动执行脚本:

        这里使用的每分钟执。根据自己需求而定,比如每小时,每天,每周等。

crontab -l
* * * * *  /bin/sh /opt/shell/system_check_server_auto.sh > /dev/null 2>&1

5.自动巡检脚本执行结果:

统计时间 服务器IP 系统进程数 CPU空闲id 僵尸进程数 总内存大小 已用内存 内存使用率 内存巡检状态 分区 数据盘总空间 数据盘剩余空间 数据盘磁盘使用率 磁盘超60使用分区 磁盘超60使用率 磁盘状况
2022-03-17_16:19:07 17.17.80.103 205  90.0% 0 24031MB 14724MB 61% 正常 / 256G 181G 26% 无 无 正常
2022-03-17_16:19:47 17.17.80.103 205  90.0% 0 24031MB 14724MB 61% 正常 / 256G 181G 26% 无 无 正常
2022-03-17_16:21:06 17.17.80.103 205  90.0% 0 24031MB 14728MB 61% 正常 / 256G 181G 26% 无 无 正常
2022-03-17_16:21:09 17.17.80.103 203  90.0% 0 24031MB 14729MB 61% 正常 / 256G 181G 26% 无 无 正常
2022-03-17_16:21:11 12.17.80.103 203  90.0% 0 24031MB 14729MB 61% 正常 / 256G 181G 26% 无 无 正常
2022-03-17_16:37:10 12.17.80.103 205  90.0% 0 24031MB 14742MB 61% 正常 / 256G 181G 26% 无 无 正常
2022-03-17_16:40:01 12.17.80.103 208  90.0% 0 24031MB 14749MB 61% 正常 / 256G 181G 26% 无 无 正常
2022-03-17_16:41:01 12.17.80.103 206  90.0% 0 24031MB 14729MB 61% 正常 / 256G 181G 26% 无 无 正常

6.通过以上结果汇总到Excel更加直观

通过制表结果可以进行筛选处理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【linux shell】服务器系统自动化巡检脚本资源状况统计 的相关文章

  • 无法声明接口:资源繁忙

    我正在使用 USB4Java 低级版本 并且基本上是根据这段代码工作的here http www mets blog com java usb communication usb4java 我在 Ubuntu 中工作 遇到了有关权限的问题
  • UNIX 域 STREAM 和 DATAGRAM 套接字之间的区别?

    这个问题是NOTSTREAM 类型和 DATAGRAM 类型 INTERNET 套接字之间的区别 我知道 STREAM 套接字使用 TCP 数据报套接字使用 UDP 以及所有 TCP UDP 内容 按顺序到达的数据包 ACK NACK 等
  • 如何在不需要设置 LD_LIBRARY_PATH shell 变量的情况下输入“cargo run”?

    我构建了一个 Rust 程序 通过 C 接口调用 C 函数 为了执行该程序 我必须运行 export LD LIBRARY PATH
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • Bash:将输出传输到后台进程?

    我想将一个进程放入后台 然后多次将数据传递给它 例如 cat The command I want to write into cat pid Getting the process id of the cat process echo h
  • 如何排除文件/文件夹以删除[重复]

    这个问题在这里已经有答案了 如何删除文件夹中的所有内容并排除特定文件夹和文件 以 tar 为例 tar exclude folder 编辑 我可以删除文件和文件夹 注意 运行以下命令时请小心 find type f grep v NameT
  • SSD 上的 MySQL 基准测试:工具和策略

    我目前正在将我的服务器从在硬盘驱动器上运行 MyISAM 切换到在 SSD 上运行 InnoDB 我有一个3 800 000 行 16GB 表作为基准表 我的服务器设置 Ubuntu 64 Nginx MySQL 5 5 我心里有两件事我想
  • ngx_http_brotli_filter_module.so" 与 /etc/nginx/nginx.conf:1 中的二进制不兼容

    Using Nginx 1 17 3 and Nginx 1 14 0在两台独立服务器上的 Ubuntu 18 上 两者都显示相同的错误ngx http brotli filter module so is not binary compa
  • Cakephp cron 作业调用控制器的操作

    几个月前我开始使用 CakePHP 1 2 为公司的应用程序添加一些小功能 但我对它不太熟悉 我们先在开发服务器上进行本地测试 然后再合并到生产服务器 我希望每小时调用一个控制器操作 通过我的研究 我认为这是最好的方法 即 cron 作业
  • 连接MySQL服务器的Shell脚本

    我有大约 20 个不同的 MySQL 实例 我想轻松连接到它们 而不必每次都输入完整的地址 用户名和超长的密码 我可以做什么来编写此过程的脚本 这样我所要做的就是为每个实例运行一个 sh 脚本 到目前为止我所拥有的 保存为 instance
  • 如何使用linux命令sed来处理Little-endian UTF-16文件

    我正在开发一个关于 Windows rdp 的应用程序 现在 当我尝试使用 sed 命令直接替换 rdp 文件中的 IP 地址字符串时遇到问题 但执行该命令后 原始rdp文件出现乱码 sed i s address s address s
  • 需要一种临时重定向 STDOUT 的方法

    我知道如何在 Linux 中重定向输出 问题是 我的 bash 脚本中有很多输出 我不想输入类似的内容 echo foo gt gt bar 一遍又一遍地 我更愿意做这样的事情 hey bash for the time being put
  • 将 React 应用程序作为后台进程运行

    我对部署前端代码完全陌生 因此提出了这个问题 我有一个 React 应用程序 需要作为后台进程运行 但是我对如何执行此操作有点困惑 我运行一个 npm 脚本 npm run build 在服务器上构建 缩小和服务项目 构建过程的相关代码是这
  • 安装 gulp browserify 总是报错

    我尝试使用以下命令安装 gulp browserify npm install gulp browserify save dev 我已经成功安装了许多其他软件包 例如 gulp autoprefixer gulp concat gulp m
  • Linux 上的 JavaFX

    Linux x86 和 x64 上的 JavaFX 情况如何 JavaFX 应用程序可以在 Linux 操作系统上顺利执行吗 我发现了 2011 年和 2012 年的一些问题 当时应用程序不稳定 目前发布的 JFX 版本是 2 2 4 在
  • 通过 ssh 运行具有嵌套引号的 shell 命令

    我有以下 shell 命令 ssh user host df grep dev awk BEGIN print DISK USAGE STATUS split 5 a var GREEN print 1 5 var column t 我需要
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • 在管道中使用“tee”时,如何将标准错误写入文件?

    我知道如何使用tee写入输出 标准输出 https en wikipedia org wiki Standard streams Standard output 28stdout 29 of aaa sh to bbb out 同时仍然在终
  • (Linux) 如何在没有显示环境的情况下运行gtk程序? Gtk-警告 **:无法打开显示:

    我有一个必须在 GTK gui 环境中运行的程序 我只能使用ssh 该程序将在服务器 centos 6 上运行并安装 gnome X 显示 不需要看GUI 但运行完成后 我就能得到答案 VNC 和远程屏幕已禁用 当我在 ssh 中启动程序时
  • 字符串比较在 PowerShell 函数中不起作用 - 我做错了什么?

    我正在尝试创建一个别名git commit它还将消息记录到单独的文本文件中 然而 如果git commit回报 nothing to commit working directory clean 它不应该将任何内容记录到单独的文件中 这是我

随机推荐

  • es7合并数组相关 报错Uncaught (in promise) TypeError: Invalid attempt to spread non-iterable instance. In ...

    方法一 let o1 a 1 b 2 c 3 let o2 o1 d 4 o2 a 1 b 2 c 3 d let arr1 0 1 2 let arr2 arr1 3 arr2 0 1 2 3 方法二 let o1 a 1 b 2 c 3
  • Java的Iterator(迭代器)

    Java迭代器 Iterator 是 Java 集合框架中的一种机制 它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法 Java Iterator 迭代器 不是一个集合 它是一种用于访问集合的方法 可用于迭代 ArrayList
  • 快速理解ES6的模板字面量?

    let abc 天空 hhh 大地 我们要将字符串和上述的两个变量拼接 并在后续的程序中 输出一个拼接后的字符串 传统实现方式 let testString 我们需要仰望 abc 的理想者 同样也需要脚踏 hhh 的实干派 console
  • 让合作伙伴拥有自己专属的刷脸支付品牌

    刷脸支付OEM合作模式即刷脸支付品牌定制 是行业内专业从事支付系统产品研发 在刷脸支付领域 具备强大的技术开发能力以及服务运营能力的公司 将目前成熟的产品系统框架进行品牌更换 让合作伙伴快速拥有自己专属的刷脸支付品牌 快速拓展市场 做刷脸支
  • Vue 解决路由重复 Uncaught (in promise)错误

    Holle 我是Boy 今天给大家分享一下关于 Vue 解决路由重复 Uncaught in promise 错误 的问题 话不多说直接来看 在脚手架router文件夹的index js写入 1 第一种方法 const routerPush
  • kubelet启动失败

    原因之一 是kubelet cgroup驱动程序 cgroupfs 与docker cgroup驱动程序不同 公司的k8s 新增了一个节点 但kubelet启动一直报错 无法启动 网上找了半天 发现是kubelet cgroup驱动程序 c
  • 机器学习之逻辑回归模型

    1 逻辑回归模型介绍 逻辑回归 Logistic Regression LR 又称为逻辑回归分析 是一种机器学习算法 属于分类和预测算法中的一种 主要用于解决二分类问题 逻辑回归通过历史数据的表现对未来结果发生的概率进行预测 例如 我们可以
  • openglStudySite

    http www learnopengles com android lesson one getting started
  • Python正则表达式_常用匹配方法findall

    正则匹配方法之findall 核心要点 findall 是将所有匹配到的字符 以列表的形式返回 如果未匹配 则返回空列表 一 pattern findall 方法 语法 findall string None pos 0 endpos 92
  • qt undefined reference to的原因之一

    在h文件定义的函数 参数带const 而在cpp文件中实现函数时 参数没有带const 则编译时所有调用该函数的地方会报undefined reference to错误 两者修改一致就好了 如 h文件定义的函数 void Test cons
  • 有意思的C编程题目

    有意思的C编程题目 有意思的编程 1 翻扑克 有52张朴克牌 使它们全部正面朝上 从第2张牌开始 把凡是2的倍数位置上的牌翻成正面朝下 接着从第3张牌开始 把凡是3的倍数位置上的牌正面朝上的翻成正面朝下 正面朝下的翻成正面朝上 接着从第4张
  • 工具链接记录

    工具链接记录 内网穿透 https gofrp org docs examples https2http
  • C/C++声明类型typedef

    typedef为现有类型定义易于记忆的类型名 即同义字 别名 它与传统C语言中 define很相似 下面我们就从实例中体会它的用处 1 常规变量类型定义 例如无符号整型标识符太长 为了自己后续方便 我希望起个自己认识又短小精简的名字 如下
  • Extremal Region(极值区域)文本定位与识别法-学习笔记(一)

    最近做一个计算机视觉的项目 要将其中复杂场景中的文本识别率从92 进一步提升 挑战很大也很有意思 边阅读一些最新的文本定位与识别的论文 边在这里记下阅读笔记与翻译内容 慢慢研究 本人英语与专业水平有限 仅供学习参考 欢迎交流 请多指教 Re
  • 网络基础:子网掩码划分2

    例子 例1 192 168 1 88 26传统方法 192 168 1 88 26 192 168 1 88 255 255 255 192 注意 26 255 255 255 11000000 255 255 255 192 传统方法 1
  • python:打包package

    简介 把模块打包成package 可以进行分发和安装 packaged的打包和安装 一 package层次架构 二 package的打包和安装 1 创建setup py 2 打包package 3 安装package 一 package层次
  • 设计模式--命令模式

    命令模式 属于行为型模式基本原理 请求以命令的形式包裹在对象中 并传给调用对象 调用对象寻找可以处理该命令的合适的对象 并把该命令传给相应的对象 该对象执行命令 主要流程 1 创建命令对象 该对象中包含请求 和执行请求 2 创建请求类 其中
  • 我问chatGPT,在JavaScript中构造函数和类的区别

    问 构造器函数和面向中的类是同样的东西吗 答 构造器函数和面向对象中的类并不是同样的东西 它们之间有些许不同 在面向对象编程中 类是一种抽象的概念 它描述了一类具有相同属性和行为的对象 类可以看作是对象的蓝图 包含了对象的属性和方法 而对象
  • 如何进行弱网测试?专项测试中最实用的方法了解一下……

    目录 引言 一 什么是弱网测试 二 为何要进行弱网测试 三 如何做弱网测试 四 弱网测试工具 引言 如今这个高度互联的时代里 网络环境对于应用程序的影响越来越重要 而弱网测试就是用来检验应用程序在恶劣网络环境下的表现 如果你是一名开发人员或
  • 【linux shell】服务器系统自动化巡检脚本资源状况统计

    运维服务器系统的时候需要定期检查服务器系统资源状况 如CPU 内存 硬盘这些资源消耗信息统计 在这种情况下也可以用开源的监控系统导出相应的需求信息或者直观的通过监控平台去查看资源状况 本文将介绍另一种方式通过Linux shell脚本实现服