linux 系统监控脚本

news2024/10/6 2:29:21

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

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

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

相关文章

Github 2024-06-06 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…

当边缘计算用在定位设备

什么是边缘计算? 边缘计算是个比较高大上的概念,在这里就不提众多官方与非官方的定义了,只说说自己的理解。 边缘计算就是在最靠近物理设备的使用现场,利用有限的硬件资源,完成设备层数据采集、协议转换、数据上传、…

Java | Leetcode Java题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();int[] f new int[n];f[0] triangle.get(0).get(0);for (int i 1; i < n; i) {f[i] f[i - 1] triangle.get(i).get(i…

Chrome浏览器打开无痕模式的方法

快捷键&#xff1a;同时按住CtrlshiftN 如图&#xff0c;系统会新开一个无痕标签页&#xff0c;不需要了点右上角关闭就可以了。

探索计算机视觉:开启智能图像处理的新纪元

第一部分&#xff1a;计算机视觉概述与基本原理 计算机视觉&#xff0c;作为人工智能领域的重要分支&#xff0c;旨在让计算机具备处理和理解图像和视频数据的能力。随着深度学习技术的飞速发展&#xff0c;计算机视觉已经在许多实际应用场景中取得了显著的成果&#xff0c;如…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十七)- 微服务(7)

11.1 : 同步调用的问题 11.2 异步通讯的优缺点 11.3 MQ MQ就是事件驱动架构中的Broker 安装MQ docker run \-e RABBITMQ_DEFAULT_USERxxxx \-e RABBITMQ_DEFAULT_PASSxxxxx \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management 浏览器访问1…

RabbitMQ-直连交换机(direct)使用方法

RabbitMQ-默认读、写方式介绍 RabbitMQ-发布/订阅模式 目录 1、概述 2、直连交换机 3、多重绑定 4、具体代码实现 4.1 生产者部分 4.2 消费者部分 5、运行代码 6、总结 1、概述 直连交换机&#xff0c;可以实现类似路由的功能&#xff0c;消息从交换机发送到哪个队列…

详细分析Mysql中的SQL_MODE基本知识(附Demo讲解)

目录 前言1. 基本知识2. Demo讲解2.1 ONLY_FULL_GROUP_BY2.2 STRICT_TRANS_TABLES2.3 NO_ZERO_IN_DATE2.4 NO_ENGINE_SUBSTITUTION2.5 ANSI_QUOTES 前言 了解Mysql内部的机制有助于辅助开发以及形成整体的架构思维 对于基本的命令行以及优化推荐阅读&#xff1a; 数据库中增…

【C语言】详解函数(下)(庖丁解牛版)

文章目录 1. 前言2. 数组做函数形参3. 函数嵌套调用和链式访问3.1 嵌套调用3.2 链式访问 1. 前言 详解C语言函数(上)的链接&#xff1a;http://t.csdnimg.cn/EGsfe 经过对函数的初步了解之后,相信大家已经对C语言标准库里的函数已经有初步的认知了&#xff0c;并且还学会了如…

HashMap第2讲——put方法源码及细节

上篇文章介绍了HashMap在JDK 1.8前后的四大变化&#xff0c;今天就进入到put方法的源码解析。HashMap的设计非常巧妙&#xff0c;细节也很多&#xff0c;今天来看看部分细节&#xff0c;后续的文章会一一介绍。 ps&#xff1a;学习源码的目的不仅仅是为了了解它的运行机制&…

Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)

目录 Stream流的中间方法 方法 案例演示 Stream流的终结方法 方法 案例演示1 收集 案例演示2 Stream流的中间方法 方法 中间方法指的是调用完成后会返回新的Stream流&#xff0c;可以继续使用(支持链式编程)。 Stream提供的常用中间方法说明Stream<T> filter(P…

Ansible部署 之 zookeeper集群

简介 Ansible是近年来越来越火的一款轻量级运维自动化工具&#xff0c;主要功能为帮助运维实现运维工作的自动化、降低手动操作的失误、提升运维工作效率。常用于自动化部署软件、自动化配置、自动化管理&#xff0c;支持playbook编排。配置简单&#xff0c;无需安装客户端&am…

【小白专用 已验证24.5.30】ThinkPHP6 视图

ThinkPHP6 视图 模板引擎支持普通标签和XML标签方式两种标签定义&#xff0c;分别用于不同的目的 标签类型描述普通标签主要用于输出变量、函数过滤和做一些基本的运算操作XML标签也称为标签库标签&#xff0c;主要完成一些逻辑判断、控制和循环输出&#xff0c;并且可扩展 c…

keil下载及安装(社区版本)

知不足而奋进 望远山而前行 目录 文章目录 前言 Keil有官方版本和社区版本&#xff0c;此文章为社区版本安装&#xff0c;仅供参考。 1.keil MDK 2.keil社区版介绍 3.keil下载 (1)打开进入登录界面 (2)点击下载,跳转到信息页面 (3)填写个人信息,点击提交 (4)点击下载…

基于web的垃圾分类回收系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;公告管理&#xff0c;运输管理&#xff0c;基础数据管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;运输管理&#xff0c;公告…

Web安全:Web体系架构存在的安全问题和解决方案

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

Python算法于强化学习库之rlax使用详解

概要 在强化学习领域,开发和测试各种算法需要使用高效的工具和库。rlax 是 Google 开发的一个专注于强化学习的库,旨在提供一组用于构建和测试强化学习算法的基础构件。rlax 基于 JAX,利用 JAX 的自动微分和加速计算功能,使得强化学习算法的实现更加高效和简洁。本文将详细…

植物大战僵尸杂交版2.0.88最新版安装包

游戏简介 游戏中独特的杂交植物更是为游戏增添了不少亮点。这些杂交植物不仅外观独特&#xff0c;而且拥有更强大的能力&#xff0c;能够帮助玩家更好地应对游戏中的挑战。玩家可以通过一定的条件和方式&#xff0c;解锁并培养这些杂交植物&#xff0c;从而不断提升自己的战斗…

SpringBoot:SpringBoot中使用Redisson实现分布式锁

一、前言 Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务。 刚好项目中需要使用到分布式锁&#xff0c;记录一下Redisson是如何使用分布式…

SpringBoot+Vue幼儿园管理系统(前后端分离)

技术栈 JavaSpringBootMavenMyBatisMySQLVueElement-UI 系统角色 教师用户管理员 功能截图