#!/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. CUDA-F-5-5-常量内存

    title: [CUDA 基础]5.5 常量内存 categories: - CUDA - Freshman tags: - CUDA常量内存 - CUDA只读缓存 toc: true date: 2 ...

  2. nginx变量与实列

    nginx内置变量 内置变量存放在  ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_u ...

  3. Pytest学习笔记(二) 用例执行规则

    在用pytest执行用例时,可以按照如下场景来执行 1.执行目录及其子目录下的所有用例 pytest filename\ 2.执行某一个py文件下的用例 pytest filename.py 3.-k ...

  4. sprintf简介

    sprintf 基本用法 输入一段有特点的字符串 #include <cstdio> #include <cstring> using namespace std; int m ...

  5. ACM之路(17)—— 博弈论

    博弈论这方面网上资料庞大,我觉得我不可能写的比他们好,就转载一下我觉得写的不错的博客好了. 首先是三大博弈:巴什博奕,威佐夫博奕,尼姆博奕.博客:三大基本博弈. 然后是强大的sg函数和sg定理:SG. ...

  6. npm修改源

    获取原来的镜像地址 npm get registry 修改源 npm config set registry http://registry.npm.taobao.org/

  7. redis延时监控

    一. slow log慢查询日志 Redis监控工具,命令和调优 slowlog是 Redis 用来记录查询执行时间的日志系统.slowlog-log-slower-than设置慢操作的阈值,单位是微 ...

  8. 19.顺时针打印矩阵 Java

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  9. sql 查询存在一个表而不在另一个表中的数据

    方法一(效率底) select A.* from 办卡 A where A.namedh not in (select namedh from 银行) 方法二(效率中) select A.* from ...

  10. Linux 下安装 Tomcat 服务器和部署 Web 应用

    一.上传Tomcat服务器 二.安装Tomcat服务器 2.1.解压tomcat服务器压缩包 2.2.配置环境变量 tomcat服务器运行时是需要JDK支持的,所以必须配置好JDK用到的那些环境变量 ...