#!/bin/bash

 #提取本服务器的IP地址信息
ENO1=`ifconfig | sed -n '1,1p' | awk -F ' ' '{print $1}'`
IP=`ifconfig ${ENO1}| grep "inet addr" | cut -f -d ":" | cut -f -d " "`
echo 'eno: '${ENO1}
echo 'IP: '${IP} # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# 各个监控警告值
WARN_LOAD=1.1
WARN_CPU=0.95
WARN_MEM=0.93
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
CPU=0.0
LOAD1=0.0
LOAD5=0.0
LOAD15=0.0
MEM=0.0
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # send_mail() {
echo 'send mail ' "${1}" "${2}"
} # 、监控系统负载的变化情况.
system_load_func()
{
cpu_num=`grep -c 'model name' /proc/cpuinfo` load=$(uptime | awk -F 'load average: ' '{print $2}')
load_1=$(echo $load | awk -F ', ' '{print $1}')
load_5=$(echo $load | awk -F ', ' '{print $2}')
load_15=$(echo $load | awk -F ', ' '{print $3}') #计算当前系统单个核心平均负载值,结果小于1.0时前面个位数补0。
LOAD1=`echo "scale=2;a=${load_1}/${cpu_num};if(length(a)==scale(a)) print 0;print a" | bc`
LOAD5=`echo "scale=2;a=${load_5}/${cpu_num};if(length(a)==scale(a)) print 0;print a" | bc`
LOAD15=`echo "scale=2;a=${load_15}/${cpu_num};if(length(a)==scale(a)) print 0;print a" | bc` if [ `echo "${LOAD15} > ${WARN_LOAD}" | bc` -eq ]
then
send_mail "${IP}服务器15分钟的系统平均负载为${LOAD15}, 超过警戒值${WARN_LOAD}, 请立即处理!" "$IP 服务器系统负载告警!"
fi
} # 、监控系统cpu的情况.
cpu_func()
{
#取当前空闲cpu百份比值(只取整数部分)
cpu_idle=`top -b -d 0.1 -n | grep Cpu | tail -n | awk '{print $8}' | cut -f -d "."`
CPU=`echo "scale=2; (100 - ${cpu_idle}) / 100" | bc` if [ `echo "${CPU} > ${WARN_CPU}" | bc` -eq ]
then
send_mail "${IP}服务器cpu使用${CPU},请及时处理." "$IP 服务器CPU告警"
fi
} #. 监控物理内存
mem_func()
{
mem=$(free -m | sed -n '2,2p')
mem_total=`echo ${mem} | awk -F ' ' '{print $2}'`
mem_used=`echo ${mem} | awk -F ' ' '{print $3}'`
# mem_free=`echo ${mem} | awk -F ' ' '{print $4}'` if [ $mem_used -ne ]
then
MEM=`echo "scale=2; ${mem_used} / ${mem_total}" | bc`
if [ `echo "${MEM} > ${WARN_MEM}" | bc` -eq ]
then
send_mail "$IP服务器物理内存已使用 ${MEM},请及时处理." "$IP 服务器内存告警"
fi
fi
} CNT=
print_info() {
echo "# # # # # # # # # # # [${CNT}] # # # # # # # # # # # # # #"
echo cpu: ${CPU}
echo load1: ${LOAD1}
echo load5: ${LOAD5}
echo load15: ${LOAD15}
echo mem: ${MEM}
echo "# # # # # # # # # # # # # # # # # # # # # # # # # # #"
(( CNT += ))
# exit
} while true
do
system_load_func
cpu_func
mem_func
print_info
sleep
done

注: 需要下载bc命令:

sudo apt-get install bc

这里我只在脚本里面写了获取各个监控信息的数据, 发送邮件和数据写入数据库这些我省略掉了. 发送邮件我使用的是python, 通过该shell脚本调用python发送邮件.(因为用linux自带的我发现会出现很多垃圾邮件, 怎么解决我没有去研究). 得到的数据我会写入数据库记录, 在这里为了通用性, 我把写入数据库部分省略掉了.

linux下对服务器性能监控shell脚本的更多相关文章

  1. linux下日志文件error监控报警脚本分享

    即对日志文件中的error进行监控,当日志文件中出现error关键字时,即可报警!(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小 ...

  2. 如何在linux下编写一个简单的Shell脚本程序

    在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...

  3. Linux下备份MySQL数据库的Shell脚本

    数据库每天都想备份,手动备份太麻烦而又容易忘记,所以写了一个自动备份MySQL数据库的脚本,加入定时计划中,每天自运运行. 创建Shell脚本代码如下,命名为mysql_dump.sh #!/bin/ ...

  4. Linux下查看所有用户(shell脚本获取)

      在Linux系统中,使用者账号管理最重要的两个文件是/etc/password和/etc/shadow.在/etc/password文件中,每一行都代表一个账号,但是有很多账号是系统账号.比如:b ...

  5. Linux下C程序插入执行shell脚本

    1.system(执行shell命令) 相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const ...

  6. Linux 性能监控之CPU&内存&I/O监控Shell脚本2

    Linux 性能监控之CPU&内存&I/O监控Shell脚本2   by:授客 QQ:1033553122 思路: 捕获数据->停止捕获数据->提取数据 备注:一些命令的输 ...

  7. Linux 性能监控之CPU&内存&I/O监控Shell脚本1

    Linux 性能监控之CPU&内存&I/O监控Shell脚本1   by:授客 QQ:1033553122   #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`if ...

  8. linux 服务器性能监控(一)

    这篇文章主要介绍一些常用的linux服务器性能监控命令,包括命令的常用参数.指标的含义以及一些交互操作. 几个问题 命令本身并不复杂,关键是你对操作系统基础知识的掌握和理解,先来看看下面几个问题: C ...

  9. jmeter使用笔记——脚本录制,JMeter使用plugins插件进行服务器性能监控

    脚本录制: 1.badboy录制 2.代理服务器录制 ①工作台添加HTTP代理服务器 ②设置目标控制器,分组,排除模式,包含模式(使用正则表达式筛选) ③设置浏览器,手动设置代理服务器,localho ...

随机推荐

  1. 【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension)

    title: [线性代数]3-5:独立性,基和维度(Independence,Basis and Dimension) categories: Mathematic Linear Algebra ke ...

  2. Django-内置的auth模块

    一.auth认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个 ...

  3. AcWing:178. 第K短路(A*)

    给定一张N个点(编号1,2…N),M条边的有向图,求从起点S到终点T的第K短路的长度,路径允许重复经过点或边. 注意: 每条最短路中至少要包含一条边. 输入格式 第一行包含两个整数N和M. 接下来M行 ...

  4. Tomcat7修改根路径应用

    大家想必遇到过这样的问题,同台机器上跑上多个tomcat 那么随之更改文件的工作量就会增加 今天突然想到把所有的tomcat的根目录更改成一个文件 但是有不好的就的地方就是在更改文件的时候需要把这台机 ...

  5. mysql 5.7.16 安装配置

    环境变量在path中添加一个 E:\soft\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin 查看mysql版本mysql -V 生成无密码账户进入到mysql ...

  6. 在linux环境下使用icepdf或pdfbox将pdf转化成图片是乱码解决

    在linux环境下使用icepdf或pdfbox将pdf转化成图片是出现乱码,网上查发下是itextpdf生成pdf引用"STSong-Light"字体而linux环境下没有这个字 ...

  7. ubuntu下最好用的防火墙shadaarp ,带主动防御

          shada-arpfirewall-1.0alpha3.i386.rpm 所有基于rpm的x86 Linux(内核版本>=2.6.27) Mar 11 82.9 KB     sha ...

  8. HearthBuddy炉石兄弟 格雷迈恩

    getDecks(); 设置 private void getDecks() { Dictionary<string, int> tmpDeck = new Dictionary<s ...

  9. How to get full path of StreamWriter

     How to get full path of StreamWriter   In my version of the framework, this seems to work: string f ...

  10. linux下如何映射宿主机中的文件到容器中?

    答:在启动容器时使用-v指定宿主机目录和要映射到的容器内部目录,语法如下: docker run -it -v <host_dir>:<container_dir> <c ...