shell编程--linux性能监控脚本

#!/bin/bash
#功能描述:监控服务器主要性能参数指标
#监控项目:内核信息、主机名称、ip地址、登录账户、内存与swap信息、磁盘信息、CPU负载

kernel=$(uname -r)                                 #内核信息
release=$(cat /etc/centos-release)                 #操作系统版本
hostname=$HOSTNAME                                 #主机名称
localip=$(ip a s | awk '/inet /{print $2}'|tail -1)        #本地ip地址列表
mem_total=$(free | awk '/Mem/{print $2}')          #总内存容量
mem_free=$(free | awk '/Mem/{print $NF}')          #剩余内存容量
mem_used=$(free -t | awk 'NR == 2 {printf("%.2f%     \n"), $3/$2*100}')    #已使用内存百分比
cpu_used=$(top -b -n1 | head -5 | grep ^%Cpu | awk '{printf("%.2f%     "),100-$8}')    #已使用CPU百分比
swap_total=$(free | awk '/Swap/{print $2}')        #总swap容量
swap_free=$(free | awk '/Swap/{print $NF}')        #剩余swap容量
disk=$(df | awk '/^\/dev/{print $1,$2,$4}' | column -t)   #磁盘信息
load1=$(uptime | sed 's/,//g' | awk '{print $(NF-2)}')    #cpu最近1分钟的平均负载
load5=$(uptime | sed 's/,//g' | awk '{print $(NF-1)}')    #cpu最近1分钟的平均负载
load15=$(uptime | sed 's/,//g' | awk '{print $(NF)}')     #cpu最近1分钟的平均负载
login_users=$(who | wc -l)                         #登录用户数量
procs=$(ps -aux | wc -l)                           #进程总数
users=$(sed -n '$=' /etc/passwd)                   #系统总账户数量
cpu_info=$(LANG=C lscpu | awk -F: '/Model name/{print $2}'| tr -s ' ' | sed 's/^ //')  #cpu型号
cpu_core=$(awk '/processor/{core++} END{print core}' /proc/cpuinfo)       #cpu核心数量

yum -y -q install sysstat &> /dev/null             #安装性能监控软件
echo -e "\e[34提取磁盘性能指标,请稍后...\e[0m"
tps=$(LANG=C sar -d -p 1 6 | awk '/Average/' | tail -n +2 | awk '{print "["$2"]磁盘平均IO数量:"$3}') 
read_write=$(LANG=C sar -d -p 1 6 | awk 'Average' | tail -n +2 | awk '{print "["$2"]平均每秒读写扇区量:"$4,$5}') 

irq=$(vmstat 1 2 | tail -n +4 | awk '{print $11}') #中断数量
cs=$(vmstat 1 2 | tail -n +4 | awk '{print $12}')  #上下文切换数量

top_proc_mem=$(ps --no-headers -eo comm,rss | sort -k2 -n | tail -10)     #占用内存最多的10个进程
top_proc_cpu=$(ps --no-headers -eo comm,pcpu | sort -k2 -n | tail -5)     #占用cpu最多的5个进程

#获取网卡流量,接收|发送的数据流量,单位为字节(bytes)
net_monitor=$(cat /proc/net/dev | tail -n +3 | awk 'BEGIN{print "网卡名称 入站数据流量(bytes)出站数据流量(bytes)"} {print $1,$2,$10}' | column -t )



#输出数据信息
echo -e "\033[32m--------------本机主要数据参数表--------------\033[0m"
echo -e "本机IP地址列表:\033[32m ${localip} \033[0m"
echo -e "本机主机名称:\033[32m$hostname\033[0m"
echo -e "操作系统版本:\033[32m$release\033[0m,内核版本:\033[32m$kernel\033[0m"
echo -e "CPU型号为:\033[32m$cpu_info\033[0m,CPU内核数量:\033[32m$cpu_core\033[0m"
echo -e "已使用CPU百分比:\033[32m$cpu_used\033[0m"
echo -e "cpu最近1分钟,5分钟,15分钟的平均负载分别为:\033[32m${load1},${load5},${load15}\033[0m"
echo -e "已使用内存百分比:\033[32m${mem_used}\033[0m"
echo -e "本机总内存容量:\033[32m$swap_total\033[0m,剩余容量:\033[32m$swap_free\033[0m"
echo -e "本机总账户数量为:\033[32m$users\033[0m,当前登录系统的账户数量:\033[32m$login_users\033[0m"
echo -e "占用CPU资源最多的10个进程列表:"
echo -e "\033[32m$top_proc_cpu\033[0m"
echo -e "占用内存资源最多的10个进程列表:"
echo -e "\033[32m$top_proc_mem\033[0m"
echo -e "CPU中断数量:\033[32m$irq\033[0m,CPU上下文切换数量:\033[32m$cs\033[0m"
echo -e "每个磁盘分区的总量与剩余容量如下:"
echo -e "\033[32m$disk\033[0m"
echo -e "\033[32m$tps\033[0m"
echo -e "\033[32m$read_write\033[0m"
echo -e "\033[32m$net_monitor\033[0m"
echo -e "\033[32m-------------------The End---------------------\033[0m"


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值