0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

监控系统负载记录系统状态

阿铭linux 来源:阿铭linux 作者:阿铭linux 2022-11-11 09:25 次阅读

【需求】

写一个监控脚本,监控系统负载,如果系统负载超过10,需要记录系统状态信息

提示:

1)系统负载命令使用uptime看,过去1分钟的平均负载

2)系统状态使用如下工具标记:top、 vmstat、 ss

3)要求每隔20s监控一次

4)系统状态信息需要保存到/opt/logs/下面,保留一个月,文件名建议带有`date +%s`后缀或者前缀

【解析】

这是一个监控脚本,对于监控脚本,通常有两种思路

一个是做一个死循环,让它一直跑着,每检测一次,中间间隔一段时间,比如本题要求的20s

另外一种是一分钟执行一次,利用系统的任务计划,每分钟执行

本案例要求每20s监控一次,所以只能使用第一种,死循环

死循环,使用while :; do ...; done

这里的 : 你可以理解成条件为真

再来看脚本要求,监控系统负载,超过10就记录系统状态信息

问题的关键点在于,如何获取到系统负载的值

系统负载,在Linux里面可以使用w或者uptime或者top命令都可以获取到

2c21e71e-6152-11ed-8abf-dac502259ad0.png

2c309a0c-6152-11ed-8abf-dac502259ad0.png

2c3e516a-6152-11ed-8abf-dac502259ad0.png

这里的load average 后面的三个数字就是系统负载,它们分别表示过去1分钟、5分钟、15分钟内系统的平均负载

为了更加精准,我们需要选择1分钟的平均负载

那这个负载到底代表着什么含义呢?

就拿这个1分钟负载来说,这个数字表示,过去1分钟,平均有多少个进程在使用CPU资源

使用CPU资源的进程越多,那就意味着CPU越忙

那,这个数字为多少是合适呢?

这取决于你的系统里有多少颗CPU,这个数字不是物理CPU,指的是逻辑CPU个数,那如何查看?

使用lscpu命令看

2c571272-6152-11ed-8abf-dac502259ad0.png

比如,你系统有8颗CPU,那么系统负载为8时,表示1颗CPU处理一个进程,这样CPU没有空闲也不忙,是最合适的

好了,说完系统负载,再回头看脚本

如何拿到这个1分钟的负载数值呢?

这就需要借助sed awk 以及 cut等各种处理字符串的工具了

uptime |awk -F 'average:' '{print $2}'

2c795580-6152-11ed-8abf-dac502259ad0.png

首先将三个数字打出来,然后想办法截取第一个数字

此时,可以使用cut来截取

2c8aeb1a-6152-11ed-8abf-dac502259ad0.png

这时候出现的结果还不是最终的数字,还需要将最前面的空格去掉,而且我们不需要小数点以及后面的数字

使用sed将空格去掉

2ca768da-6152-11ed-8abf-dac502259ad0.png

再使用cut将小数点前面的数字截取

2cbb3180-6152-11ed-8abf-dac502259ad0.png

其实,写脚本就需要大家一步一步地去尝试

拿到负载值之后,再去和10做比较

可以先将负载值赋值到变量里,然后用变量去做比较

if [ $load -gt 10 ]; then ...; fi

如果负载值高于10,就需要记录系统状态信息

题目也提示我们了,获取系统负载的状态,有top vmstat 和 ss 三个命令

如果大家不会使用这几个命令,那么脚本就无法写出来了

所以,写shell脚本的前提是,你必须要具备一定的认知

top -bn1 可以一次性展示top的结果,但是没必要将所有都记录下来,只需要前100行就足够了,因为我们关注的是排在最前面的几个进程

vmstat 命令可以记录包括cpu、内存、io等信息,用法是 vmstat n1 n2 , 其中n1和n2是两个数字,前面的数字,表示几秒钟打印一次信息,后面的数字是打印几次,建议是1秒1次,打印10次

所以最终用法啊是

vmstat 1 10

ss是用来查看网络链接状态的命令,这里需要使用

ss -an

有了记录系统状态信息的命令后,接下来就是要规划,将这些信息记录到哪个日志里

两种思路,一个是一股脑全部记录到一个文件里,每次记录都是追加

另外一个思路是,针对top、vmstat、ss分别记录日志

这里我选择第二个,这样方便查看,题目中要求给这个日志加一个date +%s的时间戳作为后缀前缀或者后缀,那么就用后缀吧,比如:

top.`date +%s`, vmstat.`date+%s`, ss.`date +%s`

删除掉一个月以前的,使用find查看即可,还需要注意,/opt/logs/下面有可能有其它日志,所以我们只需要针对本脚本产生的日志进行搜索

find可以这样做

find  /opt/logs  -name "top*" -o -name "vmstat*" -o -name "ss*" 

说明一下,这里的-o表示或者的意思,如果不加-o,那么就是并且

find 还支持将一堆条件搞到一起,作为一个整体,需要使用(),例如

find  /opt/logs ( -name "top*" -o -name "vmstat*" -o -name "ss*" ) -mtime +30

需要注意,小括号使用脱义符号脱义了,并且前后有空格

【参考答案】

脚本最终结果是这样的:

#!/bin/bash
[ -d /opt/logs ] || mkdir -p /opt/logs
while :
do
    load=`uptime |awk -F 'average:' '{print $2}'|cut -d',' -f1|sed 's/ //g' |cut -d. -f1`
    if [ $load -gt 10 ]
    then
        top -bn1 |head -n 100 > /opt/logs/top.`date +%s` 
        vmstat 1 10 > /opt/logs/vmstat.`date +%s`
        ss -an > /opt/logs/ss.`date +%s`
    fi
    sleep 20
    find  /opt/logs ( -name "top*" -o -name "vmstat*" -o -name "ss*" ) -mtime +30 |xargs rm  -f
done

脚本运行时,丢入后台去

着重提醒一下,有的同学将最后面这个load赋值或者find命令放到了while循环外面,

这是不对的,放到while循环前面它只会执行一次,而放到while循环后面永远也不会执行

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206733
  • 监控系统
    +关注

    关注

    21

    文章

    3612

    浏览量

    169253
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14635

原文标题:监控系统负载记录系统状态

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    机房环境监控系统

    看所监测配电线路的参数。相应的参数应存有历史曲线,可查看该参数的历史曲线,可通过IE浏览器全面查看。2、空调监控 实时监视精密空调的工作状态与参数。系统实时全面诊断空调运行状况,监控
    发表于 09-29 16:31

    智能机房监控系统 智能家居监控系统

    可将各机房控制器集中连接到监控电脑,传送到互联网/手机等远程终端。二, 系统结构图1,整体系统架构2,单站点系统结构三, 系统特点1,节能减
    发表于 12-11 17:47

    智能机房监控系统

    各机房控制器集中连接到监控电脑,传送到互联网/手机等远程终端。二, 系统结构图1,整体系统架构2,单站点系统结构三, 系统特点1,节能减排;
    发表于 01-03 11:13

    【Future】大型仪器设备运行状态监控系统

    本帖最后由 wangjiamin2014 于 2015-1-8 18:00 编辑 项目名称: 大型仪器设备运行状态监控系统团队名称:Future团队成员:张勉|付清林|田秀兵作品演示作品介绍
    发表于 12-31 14:02

    【WRTnode2R申请】车载记录

    申请理由:车载记录仪的功能是从车辆采集 OBD、胎压、温度、GPS等数据。然后通过3G网络将这些数据传输到云端给手机客户端或者PC客户端使用。想申请WRTnode 2R的一个原因是我对OpenWrt
    发表于 10-13 14:05

    安灯状态监控系统

    )2、能够实时监控异常状态。3、预留两个自动清零时间点(客户自行设置清零时间)4、记录每个时间段异常处理时间。5、系统可设置两个班次时间区间,在每个班次开始时没有任何
    发表于 07-28 15:48

    【HarmonyOS HiSpark AI Camera】车载记录

    项目名称:车载记录仪试用计划:本人在AR领域有三年多的学习和开发经验,曾设计过类似谷歌眼镜版的开源AR眼镜,参与国内开源智能眼镜的开发,对计算机图像标定技术,图像识别,基于标识的跟踪注册技术有过
    发表于 11-20 18:36

    集中监控系统的要求有哪些?

    及输出等各部分的状态。要求系统标明UPS电流流向,可看到负载的供电状况,是否受保护等;  ( 2 )系统要能对机房UPS各部件的参数状态进行
    发表于 12-01 16:00

    逻迅智慧冷链智能无线温湿度传感器高精度疫苗监控载记录

    ,应配备温湿度监控系统,对冷藏疫苗运输过程中冷藏车和恒温箱内的温度进行自动监控记录,可有效防范储存和运输过程中可能影响疫苗质量和安全的各种风险,保证疫苗储存和运输过程中的质量。因此,
    发表于 02-24 14:30

    机房监控系统标准和常见故障记录

    集中监控系统系统建设要求对机房整体动力环境设备工作有状态演示,故障迅速定位、故障及时通知、保存报警信息及系统运行数据、绘制分析图表、设备巡
    发表于 09-08 07:43

    消控监控系统 服务器,动环监控系统【斯必得智慧机房】精选资料分享

    的独立的运行系统那么按照传统的人工巡查的方式将要浪费大量的人力和物力。动环监控系统有效监视系统和设备的运行状态,监视基站/机房环境
    发表于 09-10 09:13

    载记录器实时监测模式的设计

    针对弹载存储测试技术,提出一种具有实时监测功能的弹载记录器,通过配套的测试平台和用户终端软件实时监测弹上环境和工作参数, 同时完成数据存储、分析和处理。通过导弹测
    发表于 12-23 09:56 11次下载

    这个搞定系统监控的妙招,不来学可惜了

    集执行状态监控文件系统状态、分布式系统状态系统
    发表于 08-31 17:59 543次阅读
    这个搞定<b class='flag-5'>系统</b><b class='flag-5'>监控</b>的妙招,不来学可惜了

    负载平衡监控系统设计源码分享

    负载平衡监控系统设计源码分享
    发表于 06-06 11:33 3次下载

    载记录监控摄像头12V24V转5V12V1A-3A电源芯片AH8322

    AH8322电源芯片是一款适用于车载记录仪的高效、可靠的电源解决方案。它能够将车辆电源系统提供的12V或24V电压转换为记录仪所需的5V或12V电压,并提供1A到3A的电流输出。同时,该芯片还具有多种保护功能,能够确保车
    的头像 发表于 07-19 11:36 752次阅读