linux 系统监控脚本

1.对CPU的监控函数

function GetCpu(){
        cpu_num=`grep -c "model name" /proc/cpuinfo`
        cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}' | cut -f 1 -d "%"`
        cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}' | cut -f 1 -d "%"`
        cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "%"`
        cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}' | cut -f 1 -d "%"`
        cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'`
        cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'`
        cpu_load_15min=`uptime | awk '{print $12}' | cut -f 1 -d ','`
        cpu_load_5min=`uptime | awk '{print $11}' | cut -f 1 -d ','`
        cpu_load_1min=`uptime | awk '{print $10}' | cut -f 1 -d ','`
        color "cpu总核数:" "$cpu_num"
        color "用户空间占用CPU百分比:" "$cpu_user"
        color "内核空间占用CPU百分比:" "$cpu_system"
        color "空闲CPU百分比:" "$cpu_idle"
        color "等待输入输出占CPU百分比:" "$cpu_iowait"
        color "CPU中断次数:" "$cpu_interrupt"
        color "CPU上下文切换次数:" "$cpu_context_switch"
        color "CPU 15分钟前到现在的负载平均值:" "$cpu_load_15min"
        color "CPU 5分钟前到现在的负载平均值:" "$cpu_load_5min"
        color "CPU 1分钟前到现在的负载平均值:" "$cpu_load_1min"
}

2.对内存的监控函数

function GetMem(){
        mem_total=`free | grep Mem | awk '{print $2}'`
        mem_sys_used=`free | grep Mem | awk '{print $3}'`
        mem_sys_free=`free | grep Mem | awk '{print $4}'`
        mem_user_used=`free | sed -n 3p | awk '{print $3}'`
        mem_user_free=`free | sed -n 3p | awk '{print $4}'`
        mem_swap_total=`free | grep Swap | awk '{print $2}'`
        mem_swap_used=`free | grep Swap | awk '{print $3}'`
        mem_swap_free=`free | grep Swap | awk '{print $4}'`
        color "物理内存总量:" "$mem_total"
        color "已使用内存总量(操作系统):" "$mem_sys_used"
        color "剩余内存总量(操作系统):" "$mem_sys_free"
        color "已使用内存总量(应用程序):" "$mem_user_used"
        color "剩余内存总量(应用程序):" "$mem_user_free"
        color "交换分区总大小:" "$mem_swap_total"
        color "已使用交换分区大小:" "$mem_swap_used"
        color "剩余交换分区大小:" "$mem_swap_free"
}

3.对磁盘IO的监控函数

function GetDiskIo(){
        disk=sda
        read -p "请输入指定磁盘:(eg:sda)" input_disk
        if [ -z "$input_disk" ]; then
                echo "用户未输入,使用默认值 $disk"
                input_disk="$disk"  # 由于未赋值,这里相当于保持默认
        else
                echo "用户输入的disk路径: $input_disk"
        fi
        echo "指定设备($input_disk)的统计信息"
        disk_sda_rs=`iostat -kx | grep $input_disk| awk '{print $4}'`
        disk_sda_ws=`iostat -kx | grep $input_disk| awk '{print $5}'`
        disk_sda_avgqu_sz=`iostat -kx | grep $input_disk| awk '{print $9}'`
        disk_sda_await=`iostat -kx | grep $input_disk| awk '{print $10}'`
        disk_sda_svctm=`iostat -kx | grep $input_disk| awk '{print $11}'`
        disk_sda_util=`iostat -kx | grep $input_disk| awk '{print $12}'`
        color "每秒向设备发起的读请求次数:" "$disk_sda_rs"
        color "每秒向设备发起的写请求次数:" "$disk_sda_ws"
        color "向设备发起的I/O请求队列长度平均值:" "$disk_sda_avgqu_sz"
        color "每次向设备发起的I/O请求平均时间:" "$disk_sda_await"
        color "向设备发起的I/O服务时间均值:" "$disk_sda_svctm"
        color "向设备发起I/O请求的CPU时间百分占比:" "$disk_sda_util"
}

4.对线程状态的监控函数

function GetPidstat(){
        #初始化变量
        Ptotal=0
        Rtotal=0
        Stotal=0
        Ttotal=0
        Dtotal=0
        Ztotal=0
        for pid in /proc/[1-9]*
        do
                #获取进程状态
                let Ptotal=Ptotal+1
                stat=$(cd $pid && cat stat| awk '{print $3}')
                case $stat in
                R)
                let Rtotal=Rtotal+1
                ;;
                S)
                let Stotal=Stotal+1
                ;;
                T)
                let Ttotal=Ttotal+1
                ;;
                D)
                let Dtotal=Dtotal+1
                ;;
                Z)
                let Ztotal=Ztotal+1
                ;;
                esac
        done
        color "当前进程总数为:" "$Ptotal"
        color "其中Running进程数为:" "$Rtotal"
        color "其中Sleeping进程数为:" "$Stotal"
        color "其中Stopped进程数为:" "$Ttotal"
        color "其中Disk sleep进程数为:" "$Dtotal"
        color "其中Zombies进程数为:" "$Ztotal"
}

5.对网卡流量的监控函数

function GetNet(){
        eth_name=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $2}'`
        rxpck_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $3}'`
        txpck_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $4}'`
        rxkB_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $5}'`
        txkB_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $6}'`
        rxcmp_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $7}'`
        txcmp_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $8}'`
        rxmcst_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $9}'`
        color "$eth_name每秒钟接收的数据包:" "$rxpck_num"
        color "$eth_name每秒钟发送的数据包:" "$txpck_num"
        color "$eth_name每秒钟接收的字节数:" "$rxkB_num"
        color "$eth_name每秒钟发送的字节数:" "$txkB_num"
        color "$eth_name每秒钟接收的压缩数据包:" "$rxcmp_num"
        color "$eth_name每秒钟发送的压缩数据包:" "$txcmp_num"
        color "$eth_name每秒钟接收的多播数据包:" "$rxmcst_num"
}

6.实现效果

#!/bin/bash
function color() {
        local a=$1
        local b=$2
        echo -e "\033[1;32m$a\033[0m \033[1;31m$b\033[0m"
}
function GetIp(){
        IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
        echo "IP地址:"$IP
}
#检查CPU利用率
function GetCpu(){
        cpu_num=`grep -c "model name" /proc/cpuinfo`
        cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}' | cut -f 1 -d "%"`
        cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}' | cut -f 1 -d "%"`
        cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "%"`
        cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}' | cut -f 1 -d "%"`
        cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'`
        cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'`
        cpu_load_15min=`uptime | awk '{print $12}' | cut -f 1 -d ','`
        cpu_load_5min=`uptime | awk '{print $11}' | cut -f 1 -d ','`
        cpu_load_1min=`uptime | awk '{print $10}' | cut -f 1 -d ','`
        color "cpu总核数:" "$cpu_num"
        color "用户空间占用CPU百分比:" "$cpu_user"
        color "内核空间占用CPU百分比:" "$cpu_system"
        color "空闲CPU百分比:" "$cpu_idle"
        color "等待输入输出占CPU百分比:" "$cpu_iowait"
        color "CPU中断次数:" "$cpu_interrupt"
        color "CPU上下文切换次数:" "$cpu_context_switch"
        color "CPU 15分钟前到现在的负载平均值:" "$cpu_load_15min"
        color "CPU 5分钟前到现在的负载平均值:" "$cpu_load_5min"
        color "CPU 1分钟前到现在的负载平均值:" "$cpu_load_1min"
}
#检查内存使用率
function GetMem(){
        mem_total=`free | grep Mem | awk '{print $2}'`
        mem_sys_used=`free | grep Mem | awk '{print $3}'`
        mem_sys_free=`free | grep Mem | awk '{print $4}'`
        mem_user_used=`free | sed -n 3p | awk '{print $3}'`
        mem_user_free=`free | sed -n 3p | awk '{print $4}'`
        mem_swap_total=`free | grep Swap | awk '{print $2}'`
        mem_swap_used=`free | grep Swap | awk '{print $3}'`
        mem_swap_free=`free | grep Swap | awk '{print $4}'`
        color "物理内存总量:" "$mem_total"
        color "已使用内存总量(操作系统):" "$mem_sys_used"
        color "剩余内存总量(操作系统):" "$mem_sys_free"
        color "已使用内存总量(应用程序):" "$mem_user_used"
        color "剩余内存总量(应用程序):" "$mem_user_free"
        color "交换分区总大小:" "$mem_swap_total"
        color "已使用交换分区大小:" "$mem_swap_used"
        color "剩余交换分区大小:" "$mem_swap_free"
}

#检查磁盘IO状态
function GetDiskIo(){
        disk=sda
        read -p "请输入指定磁盘:(eg:sda)" input_disk
        if [ -z "$input_disk" ]; then
                echo "用户未输入,使用默认值 $disk"
                input_disk="$disk"  # 由于未赋值,这里相当于保持默认
        else
                echo "用户输入的disk路径: $input_disk"
        fi
        echo "指定设备($input_disk)的统计信息"
        disk_sda_rs=`iostat -kx | grep $input_disk| awk '{print $4}'`
        disk_sda_ws=`iostat -kx | grep $input_disk| awk '{print $5}'`
        disk_sda_avgqu_sz=`iostat -kx | grep $input_disk| awk '{print $9}'`
        disk_sda_await=`iostat -kx | grep $input_disk| awk '{print $10}'`
        disk_sda_svctm=`iostat -kx | grep $input_disk| awk '{print $11}'`
        disk_sda_util=`iostat -kx | grep $input_disk| awk '{print $12}'`
        color "每秒向设备发起的读请求次数:" "$disk_sda_rs"
        color "每秒向设备发起的写请求次数:" "$disk_sda_ws"
        color "向设备发起的I/O请求队列长度平均值:" "$disk_sda_avgqu_sz"
        color "每次向设备发起的I/O请求平均时间:" "$disk_sda_await"
        color "向设备发起的I/O服务时间均值:" "$disk_sda_svctm"
        color "向设备发起I/O请求的CPU时间百分占比:" "$disk_sda_util"
}
function GetPidstat(){
        #初始化变量
        Ptotal=0
        Rtotal=0
        Stotal=0
        Ttotal=0
        Dtotal=0
        Ztotal=0
        for pid in /proc/[1-9]*
        do
                #获取进程状态
                let Ptotal=Ptotal+1
                stat=$(cd $pid && cat stat| awk '{print $3}')
                case $stat in
                R)
                let Rtotal=Rtotal+1
                ;;
                S)
                let Stotal=Stotal+1
                ;;
                T)
                let Ttotal=Ttotal+1
                ;;
                D)
                let Dtotal=Dtotal+1
                ;;
                Z)
                let Ztotal=Ztotal+1
                ;;
                esac
        done
        color "当前进程总数为:" "$Ptotal"
        color "其中Running进程数为:" "$Rtotal"
        color "其中Sleeping进程数为:" "$Stotal"
        color "其中Stopped进程数为:" "$Ttotal"
        color "其中Disk sleep进程数为:" "$Dtotal"
        color "其中Zombies进程数为:" "$Ztotal"
}
function GetNet(){
        eth_name=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $2}'`
        rxpck_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $3}'`
        txpck_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $4}'`
        rxkB_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $5}'`
        txkB_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $6}'`
        rxcmp_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $7}'`
        txcmp_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $8}'`
        rxmcst_num=`sar -n DEV 1 1|grep ens|awk 'NR==2{print $9}'`
        color "$eth_name每秒钟接收的数据包:" "$rxpck_num"
        color "$eth_name每秒钟发送的数据包:" "$txpck_num"
        color "$eth_name每秒钟接收的字节数:" "$rxkB_num"
        color "$eth_name每秒钟发送的字节数:" "$txkB_num"
        color "$eth_name每秒钟接收的压缩数据包:" "$rxcmp_num"
        color "$eth_name每秒钟发送的压缩数据包:" "$txcmp_num"
        color "$eth_name每秒钟接收的多播数据包:" "$rxmcst_num"
}
echo "---------------------开始检查CPU----------------------"
GetCpu
echo "---------------------开始检查内存---------------------"
GetMem
echo "---------------------开始检查磁盘IO-------------------"
GetDiskIo
echo "---------------------开始检查进程状态-----------------"
GetPidstat
echo "---------------------开始检查网卡流量-----------------"
GetNet

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

BIOMOD2是一个R软件包,用于构建和评估物种分布模型(SDMs)。它集成了多种统计和机器学习方法,如GLM、GAM、SVM等,允许用户预测和分析物种在不同环境条件下的地理分布。通过这种方式,BIOMOD帮助研究者评估气候…

操作符:->

在一个指针变量指向一个结构体时常常会用->操作符来使用结构体内部的成员&#xff0c; 下面是我们没有使用指针时&#xff0c;如何调用结构体内的成员&#xff0c; #include<stdio.h>struct stu {char name[20];int age;char number[20]; };int main() {struct stu …

【Linux】内存级文件

目录 C语言关于文件操作的函数 Linux关于文件操作的系统调用 完善myshell C语言缓冲区 其实我们在C语言就学过文件操作&#xff0c;但是从语言的角度&#xff0c;我们只是说会用了关于文件的一些操作和函数&#xff0c;但其实它究竟是怎么回事我们其实并不明白&#xff0c;…

异地公司如何文件共享?

很多企业面临着异地办公的挑战。随着公司业务的扩展和发展&#xff0c;分布在不同地区的办公室需要频繁地共享文件和数据。由于网络环境的限制&#xff0c;异地公司文件共享变得困难且耗时。在这篇文章中&#xff0c;我们将介绍一种能够解决异地公司文件共享问题的解决方案。 科…

Socket网络通讯入门(一)

提示&#xff1a;能力有限&#xff0c;不足以及错误之处还请指出&#xff01; 文章目录 前言一、 计算机网络 OSI、TCP/IP、五层协议 体系结构1.OSI七层模型每层的作用2.TCP/IP协议分成3.五层协议体系结构 二、Socket服务端和客户端 简单通信1.服务端代码2.客户端 总结 前言 简…

【讯为Linux驱动开发】2.注册一个字符设备

【问】如何描述一个字符设备&#xff1f; dev结构体 其中需要关心三个成员变量&#xff1a; 所属模块 &#xff1a;struct module *owner; 文件操作结构体&#xff1a; const struct file_operations *ops 设备号 &#xff1a; dev_t 当应用层使用指令open("/dev/hello&…

京东JD商品详情接口接入文档说明参数说明

京东获得JD商品详情 API 返回值说明 item_get-获得JD商品详情 API注册测试 jd.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&am…

LabVIEW电路板性能与稳定性测试系统

LabVIEW电路板性能与稳定性测试系统 概述&#xff1a; 开发基于LabVIEW的电路板性能与稳定性测试系统&#xff0c;通过集成多种测试仪器&#xff0c;实现对电路板的电气性能和长期稳定性的全面评估。系统涵盖了电压、电流、温度等多项参数的监测&#xff0c;并具备自动化测试…

微处理器体系结构

1.冯诺依曼结构 传统计算机采用冯●诺依曼(Von Neumann)结构&#xff0c;也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 特征&#xff1a; 冯●诺依曼结构的计算机程序和数据共用一个存储空间&#xff0c;程序指令存储地址和数据…

基于YOLOv8深度学习的茶叶病害检测含数据集

在当前全球竞争的时代&#xff0c;农业的重要性不容小觑。作为我国重要的经济作物&#xff0c;茶叶在农村振兴政策框架内对茶农的经济稳定起着至关重要的作用。作为云南省的特色产业和地区农业中著名的“金字品牌”&#xff0c;茶叶行业的高质量发展可以大大增强地区特色产业的…

水泵选型指南

在现代暖通空调&#xff08;HVAC&#xff09;系统中&#xff0c;冷冻水泵是关键组件之一&#xff0c;它在提供冷却和空调效果方面起着至关重要的作用。选择合适的冷冻水泵不仅可以提高系统效率&#xff0c;还能节省能源和维护成本。本文将介绍冷冻水泵选型的关键因素和步骤。 …

不装了,我是知识星球的星主,我摊牌了~

作者&#xff1a;哈哥撩编程 &#xff08;视频号同名&#xff09; 图书作者&#xff1a;程序员职场效能宝典 博客专家&#xff1a;全国博客之星第四名 超级个体&#xff1a;COC上海社区主理人 特约讲师&#xff1a;谷歌亚马逊分享嘉宾 科技博主&#xff1a;极星会首批签约…

量化交易:Miniqmt获取可转债数据和交易python代码

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 低风险资产除了国债外&#xff0c;还有可转债&#xff0c;兼容有高收益的股性和低风险的债性&#xff0c;号称“下有保底&#xff0c;上不封顶”。 &#x1f50d; 可转债&#xff1a;金融市场的双面娇娃 可转债&am…

Go微服务: 基于rocketmq:server和rocketmq:broker搭建RocketMQ环境,以及生产消息和延迟消费消息的实现

RocketMQ 的搭建 1 ) 配置 docker-compose.yaml 文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: fo…

Vue3实战笔记(58)—从零开始掌握Vue3插槽机制,基础入门

文章目录 前言插槽基础入门总结 前言 不论是组件封装还是分析源码&#xff0c;实际开发中经常接触插槽&#xff0c;插槽是干什么用的呢&#xff1f;组件之间能够接收任意类型的 JavaScript 值作为 props&#xff0c;但组件要如何接收模板内容呢&#xff1f;在某些场景中&#…

伏图(Simdroid)5.0 电子散热模块 | 可试用

伏图-电子散热模块&#xff08;Simdroid-EC&#xff09;是云道智造基于通用多物理场仿真PaaS平台伏图开发的针对电子元器件、设备等散热的专用热仿真模块&#xff0c;内置电子产品专用零部件模型库&#xff0c;支持用户通过“搭积木”的方式快速建立电子产品的热分析模型&#…

【13】Camunda7-第一个BPMN流程

在前一篇博文里&#xff0c;我们介绍了Camunda Modeler&#xff0c;那么接下来&#xff0c;我们就使用这个设计器工具绘制我们的第一个BPMN流程。 1. 场景概述 关于第一个流程&#xff0c;这里计划以我们最常见的请假审批流程为例&#xff0c;它涉及到表单设计、人工审批任务等…

从0开始用TCN预测股价

源码地址 由于用的是tensflow&#xff0c;其实和pytorch差不多看懂就行&#xff08;pytorch版本我还在改&#xff0c;有些难度&#xff09;因为这里面的tcn结构是用的 别人的代码https://github.com/philipperemy/keras-tcn 首先说一下什么是TCN 首先我想说 我们预测股票价格…

Science项目文章 | 中国农科院作科所研究团队解析“复粒稻”多粒簇生的机制

2024年3月8日&#xff0c;由中国农业科学院作物科学研究所童红宁研究员领衔的研究团队在Science发表题为“Enhancing rice panicle branching and grain yield through tissue-specific brassinosteroid inhibition”的研究论文。该研究报道了复粒稻多粒簇形成的机制&#xff0…

python-flask项目的服务器线上部署

在部署这部分我首先尝试了宝塔面板&#xff0c;始终连接失败 换了一种思路选择了Xshell成功连接 首先我们需要下载个免费版本的Xshell 免费的&#xff1a;家庭/学校免费 - NetSarang Website 下载完毕打开 1新建-> 输入服务器的账号密码&#xff1a; 在所有会话中点击自…