获取并检查系统负载\CPU\内存\磁盘\网络
安装依赖
需要net-tools、namp!
CentOS:yum -y install net-tools nmap
Ubuntu:apt-get update && apt-get -y install net-tools nmap
脚本内容
#!/usr/bin/env bash
# @author: rby
# system info
host_name="$(cat /etc/hostname)"
product_name="$(dmidecode -s system-product-name)"
os_version="$(lsb_release -d|sed 's/Description:[[:space:]]//g')"
code_version="$(uname -r)"
currtime="$(date +%Y-%m-%d\ \%H:%M:%S)"
timezone="$(cat /etc/timezone) $(date +"%Z %z")"
os_start_time="$(uptime -s)"
os_running_day="$(uptime |grep -Eo 'up.*days'|tr -d '[a-z ]')"
# cpu
cpu_model="$(lscpu |awk -F ': ' 'NR==13{print $2}')"
cpu_number="$(lscpu |awk 'NR==4{print $2}')"
cpu_load="$(top -bn 1 |head -n 5)"
cpu_process_top10="$(ps aux --sort=-%cpu|head -n 10 |awk '{print substr($0,0,120)}')"
# memory
memory_total="$(cat /proc/meminfo |awk 'NR==1{print $2/1024/1024}')GB"
memory_usage="$(free -mh)"
# disk
disk_dev_name="$(lsblk -l |awk '{if($6=="disk"){print $1}}'|tr '\n' ','|sed 's/,$//g')"
disk_usage="$(df -Th)"
disk_partition="$(lsblk)"
disk_usage_gt80="$(df -Th |grep -v '^Filesystem'|awk '{split($6,a,"%");if(a[1]>80){print $0}}')"
# net
net_name="$(cat /proc/net/dev |grep -Ev '^Inter|^ face'|awk -F ':' '{print $1}'|sed 's/[[:space:]]//g')"
net_route="$(route -n)"
echo -e "\033[36m--------------------- System Info ---------------------\033[0m"
echo -e "主机名称: $host_name"
echo -e "主机厂商: $product_name"
echo -e "系统版本: $os_version"
echo -e "内核版本: $code_version"
echo -e "当前时间: $currtime"
echo -e "当前时区: $timezone"
echo -e "当前语言: $LANG"
echo -e "启动时间: $os_start_time"
echo -e "运行天数: $os_running_day"
echo -e "\033[36m--------------------- CPU -----------------------------\033[0m"
echo -e "处理器型号: $cpu_model"
echo -e "处理器数量: $cpu_number"
echo -e "系统负载情况: \n$cpu_load"
echo -e "使用高(top10)的进程: \n$cpu_process_top10"
echo -e "\033[36m--------------------- Memory --------------------------\033[0m"
echo -e "内存总量: $memory_total"
echo -e "内存使用情况: \n$memory_usage"
echo -e "\033[36m--------------------- Disk ----------------------------\033[0m"
echo -e "磁盘设备: $disk_dev_name"
echo -e "分区信息: \n$disk_partition"
echo -e "磁盘使用情况: \n$disk_usage"
echo -e "使用高(>80%)的卷:"
if [ ! -z "$disk_usage_gt80" ];then
echo -e "\033[33m$disk_usage_gt80 \033[0m"
else
echo "None"
fi
echo -e "\033[36m--------------------- Network -------------------------\033[0m"
echo -e "网卡信息:"
printf "%-20s %-20s %-20s %-20s %-20s %-20s\n" "NAME" "IP" "MASK" "MAC" "RX" "TX"
for i in $net_name;do
name="$i"
ip="$(ifconfig $i |awk 'NR==2{split($2,a,":");{print a[2]}}')"
[ -z "$ip" ] && ip="-"
mask="$(ifconfig $i |awk 'NR==2{split($3,a,":");{print a[2]}}')"
[ -z "$mask" ] && mask="-"
mac="$(ifconfig $i |awk 'NR==1{print $5}')"
[ -z "$mac" ] && mac="-"
rx_rate="$(ifconfig $i |awk 'NR==7{print $3}'|tr -d '(')GB"
[ -z "$rx_tate" ] && rx_tate="-"
tx_rate="$(ifconfig $i |awk 'NR==7{print $7}'|tr -d '(')GB"
[ -z "$tx_tate" ] && tx_tate="-"
printf "%-20s %-20s %-20s %-20s %-20s %-20s\n" $name $ip $mask $mac $rx_rate $tx_rate
done
echo -e "路由信息:\n$net_route"
echo -e "扫描开放端口:"
for i in $net_name;do
ip="$(ifconfig $i |awk 'NR==2{split($2,a,":");{print a[2]}}')"
nmap -sS $ip
done
### system check ###
# system loadavg
if [ $(cat /proc/loadavg |awk -F '.' '{print $1}') -gt $(lscpu |awk 'NR==4{print $2}') ];then
echo -e "\033[33m警告: 当前系统负载严重,请快速处理!\033[0m"
exit 1
fi
# memory
if [ $(free -m |grep 'Mem'|awk '{if($6<1024){print 1}else{print 0}}') -eq 1 ];then
echo -e "\033[33m警告: 当前系统内存可用空间小于1G!\033[0m"
exit 1
fi
# network
ping www.baidu.com -c 1 >/dev/null
if [ $? -ne 0 ];then
echo -e "\033[33m警告: 当前系统网络不可用!\033[0m"
exit 1
fi
# io
if [ $(top -bn 1 |grep '%Cpu(s):' |awk '{if($10>30){print 1}else{print 0}}') -eq 1 ];then
echo -e "\033[33m警告: 当前系统IO负载过高!\033[0m"
exit 1
fi
echo ""
echo -e "\033[36m当前系统CPU、MEM、DISK、NETWORK工作正常!\033[0m"
执行演示
获取并检查系统负载\CPU\内存\磁盘\网络的更多相关文章
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
- Shell采集系统cpu 内存 磁盘 网络信息
cpu信息采集 cpu使用率 采集算法 通过/proc/stat文件采集并计算CPU总使用率或者单个核使用率.以cpu0为例,算法如下: 1. cat /proc/stat | grep ‘cpu0’ ...
- jmeter ---监控服务器CPU, 内存,网络数据
JMeter如何收集获得服务器cpu,内存,磁盘,网络等相关资源使用率的信息 1. JMeter 自带的Monitor Results 监控 JMeter 自带的Monitor Results 在官网 ...
- Ubuntu系统监控cpu memery 磁盘Io次数 IO速率 网卡 运行时间等信息的采集
实验室最近在做的项目要做ubuntu系统监控,要获得系统的一些信息并返回给web服务器. web服务器与ubuntu主机的通信我写的程序用的是socket,至于为什么不用java程序ssh到对应的主机 ...
- AIX/Linux/HP-UX查看CPU/内存/磁盘/存储命令
1.1 硬件环境验证方式 硬件环境主要包括CPU.内存.磁盘/存储.网络设备(如F5等).系统特有设备(如密押设备等)等,其中网络设备和系统特有设备由网络管理员或项目组提供为准,本节主要关注CP ...
- linux系统CPU内存磁盘监控发送邮件脚本
#!/bin/bashexport PATHexport LANG=zh_CN.UTF-8###top之后输入数字1,可以查看每颗CPU的情况.###先配置好mailx邮箱账号密码:#cat>/ ...
- c#获取电脑运行状态(cpu,内存,网络,系统运行时间)
public class DeviceMonitor { static readonly PerformanceCounter cpuCounter = new PerformanceCounter( ...
- DSAPI 获取实时统计信息CPU/内存/硬盘/网络
有时,我们需要获取当前计算机中CPU.内存.硬盘.网络等实时信息,如下图:\ 要实现上述几项信息的获取,通常需要使用Timer控件来间隔获取,以便刷新最新的数据. 本示例中,放一个Timer控件,放一 ...
- python监控CPU/内存/磁盘,超过指定百分比,发送邮件
#!/usr/bin/python #coding:utf-8 #导入psutil模块 import psutil import yagmail def mail(subject,contents): ...
随机推荐
- 如何利用WebSocket实现网页版聊天室
花了将近一周的时间终于完成了利用WebSocket完成网页版聊天室这个小demo,期间还走过了一段"看似弯曲"的道路,但是我想其实也不算是弯路吧,因为你走过的路必将留下你的足迹.这 ...
- 如何使用vue-cli搭建好的项目
本人是一枚前端小白,也是从零开始学习vue.js.由于闲着蛋疼,写一点自己的经验,可能有点low.是新手想上道的话,可以看看,如果有大神,也可以给我指导一下,小生感激不尽. 关于如何使用vue-cli ...
- ES6-11学习笔记--类与继承
ES5 中的类与继承: 类的定义: function People(name, age) { // this指向当前实例化对象 console.log(this); // 实例属性 this.name ...
- 安卓性能优化之计算apk启动时间
之前有人在知乎提问:"怎么计算apk的启动时间?" : 利用Python或者直接用adb命令怎么计算apk的启动时间呢?就是计算从点击图标到apk完全启动所花费的时间.比如,对游戏 ...
- 将项目导入eclipse中出现的jsp页面报错
图片摘自百度经验,实在是每次都会忘了步骤,每次都得重新百度,所以索性自己总结到博客中,下次如果还记不住就直接从博客中看.原谅我实在学渣,呜呜~~~~(>_<)~~~~
- error: failed to push some refs to 'git@gitee.com:xxxx'
出现错误的主要原因是向上仓库的一些文件(README.md,LICENSE等文件)不在本地代码目录中 git pull --rebase origin master 通过这行命令, 可以解决 注释福利 ...
- python——如何import包目录
文件位置 文件所在位置包括 , 源根目录的位置 该文件位置(也可以叫相对位置). 导入包的时候会从文件位置进行查找,并导入. 导入包 1. 什么是包? pycharm中包的图片 其中文件夹上有个圆点的 ...
- pycharm——import已存在的库居然失败!
问题 明明在cmd中可以import的库,放到pycharm中却找不到. 问题根源 找了一圈,最后得到这个结论. 因为pycharm默认就是这样的... 解决 打开设置,找到解释器 点击右边齿轮图标, ...
- jquery 日期插件datePicker使用
1.将下载下来的DatePicker压缩包解压后整个放入项目中,不可只引入js和css 2.在html中指定input位置加上class="Wdate"(默认样式不加也可正常显示) ...
- netty系列之:java中的base64编码器
简介 什么是Base64编码呢?在回答这个问题之前,我们需要了解一下计算机中文件的分类,对于计算机来说文件可以分为两类,一类是文本文件,一类是二进制文件. 对于二进制文件来说,其内容是用二进制来表示的 ...