编程需求:
之前已经编写过一个性能监控脚本.现在将其再次进行功能的丰富,以达到企业生产环境的需求.
本文中涉及到需保密的内容均以...省略,尽请谅解!
源代码:
#!/bin/bash
#脚本功能描述:监控服务器主要性能参数指标
#监控项目:内核信息,主机名称,IP地址,登录账户,内存与swap信息,磁盘信息,CPU负载
#内核信息
kernel=$(uname -r)
#操作系统版本
release=$(cat /etc/redhat-release)
#主机名称
hostname=$HOSTNAME
#本地IP地址列表
localip=$(ip a s | awk '/inet /{print $2}')
#总内存容量
mem_total=$(free | awk '/Mem/{print $2}')
#剩余内存容量
mem_free=$(free | awk '/Mem/{print $NF}')
#总swap容量
swap_total=$(free | awk '/Swap/{print $2}')
#剩余swap容量
swap_free=$(free | awk '/Swap/{print $NF}')
#磁盘信息
disk=$(df | awk '/^\/dev/{print $1,$2,$4}'|column -t)
#CPU最近1分钟的平均负载
load1=$(uptime | sed 's/,//g' | awk '{print $(NF-2)}')
#CPU最近5分钟的平均负载
load5=$(uptime | sed 's/,//g' | awk '{print $(NF-1)}')
#CPU最近15分钟的平均负载
load15=$(uptime | sed 's/,//g' | awk '{print $(NF)}')
#登录用户数量
login_users=$(who | wc -l)
#进程数量
procs=$(ps aux | wc -l)
#系统总账户数量
users=$(sed -n '$=' /etc/passwd)
#CPU型号
cpu_info=$(LANG=C lscpu |awk -F: '/Model name/ {print $2}')
#CPU内核数量
cpu_core=$(awk '/processor/{core++} END{print core}' /proc/cpuinfo)
#安装性能监控软件
yum -y -q install sysstat &>/dev/null
echo -e "\033[34m提取磁盘性能指标,请稍后...\033[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}')
#占用内存资源最多的10个进程列表
top_proc_mem=$(ps --no-headers -eo comm,rss | sort -k2 -n |tail -10)
#占用内存资源最多的10个进程列表
top_proc_cpu=$(ps --no-headers -eo comm,rss | sort -k2 -n |tail -10)
#获取网卡流量信息,接收|发送的数据流量,单位为字节(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[32$kernel\033[0m"
echo -e "本机总内存容量:\033[32m$mem_total\033[0m,剩余可用内存容量:\033[32m$mem_free\033[0m"
echo -e "本机swap总容量:\033[32m$swap_local\033[0m,剩余swap容量:\033[32m$swap_free\033[0m"
echo -e "CPU最近1分钟,5分钟,15分钟的平均负载分别为:\033[32m$load1 $load5 $load15\033[0m"
echo -e "本机总账户数量为:\033[32m$users\033[0m,当前登录系统的账户数量:\033[32m$login_users\033[0m"
echo -e "当前系统中启动的进程数量:\033[32m$procs\033[0m"
echo -e "占用CPU资源最多的10个进程列表为:"
echo -e "\033[32m$top_proc_cpu\033[0m"
echo -e "占用CPU内存资源最多的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 "$disk"
echo -e "$tps"
echo -e "$read_write"
echo -e "$net_monitor"
echo -e "\033[32m************************巡检结束********************\033[0m"
脚本的运行结果
/root/sys_info.sh
提取磁盘性能指标,请稍后...
************************本机主要参数列表********************
本机IP地址列表:127.0.0.1/8
....
本机主机名称: ..............
操作系统版本为:CentOS Linux release 7.5.1804 (Core) ,内核版本:............
CPU型号为: Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz,CPU内核数量: ...............
本机总内存容量:16324192,剩余可用内存容量:14519016
本机swap总容量:,剩余swap容量:0
CPU最近1分钟,5分钟,15分钟的平均负载分别为:1.19 0.44 0.37
本机总账户数量为:48,当前登录系统的账户数量:2
当前系统中启动的进城数量:247
占用CPU资源最多的10个进程列表为:
evolution-calen 65048
gnome-software 65628
evolution-calen 67732
chrome 74140
sogou-qimpanel 79252
fcitx 81160
mysqld 91256
chrome 103384
chrome 121404
gnome-shell 171912
占用CPU内存资源最多的10个进程列表为:
evolution-calen 65048
gnome-software 65628
evolution-calen 67732
chrome 74140
sogou-qimpanel 79252
fcitx 81160
mysqld 91256
chrome 103384
chrome 121404
gnome-shell 171912
CPU中断数量为:294,CPU上下文切换数量:292
每个磁盘分区的总容量与剩余容量信息如下:
/dev/sda2 103080888 76076244
/dev/sda1 307084240 227897560
/dev/loop0 9176232 0
网卡名称 入站数据流量(bytes) 出站数据流量(bytes)
rhce-nic: 0 0
rhce: 0 0
private1-nic: 0 0
public2-nic: 0 0
public1-nic: 0 0
private2-nic: 0 0
eth0: 2247764 562741
lo: 248 248
private1: 0 0
virbr0-nic: 0 0
virbr0: 0 0
private2: 0 0
vbr-nic: 0 0
public2: 0 0
public1: 0 0
vbr: 0 0
************************巡检结束********************
目前本人正在进行3.0版本的研究,需要完成对应阀值邮件报警的功能;