linux下对服务器性能监控shell脚本
#!/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脚本的更多相关文章
- linux下日志文件error监控报警脚本分享
即对日志文件中的error进行监控,当日志文件中出现error关键字时,即可报警!(grep -i error 不区分大小写进行搜索"error"关键字,但是会将包含error大小 ...
- 如何在linux下编写一个简单的Shell脚本程序
在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...
- Linux下备份MySQL数据库的Shell脚本
数据库每天都想备份,手动备份太麻烦而又容易忘记,所以写了一个自动备份MySQL数据库的脚本,加入定时计划中,每天自运运行. 创建Shell脚本代码如下,命名为mysql_dump.sh #!/bin/ ...
- Linux下查看所有用户(shell脚本获取)
在Linux系统中,使用者账号管理最重要的两个文件是/etc/password和/etc/shadow.在/etc/password文件中,每一行都代表一个账号,但是有很多账号是系统账号.比如:b ...
- Linux下C程序插入执行shell脚本
1.system(执行shell命令) 相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const ...
- Linux 性能监控之CPU&内存&I/O监控Shell脚本2
Linux 性能监控之CPU&内存&I/O监控Shell脚本2 by:授客 QQ:1033553122 思路: 捕获数据->停止捕获数据->提取数据 备注:一些命令的输 ...
- Linux 性能监控之CPU&内存&I/O监控Shell脚本1
Linux 性能监控之CPU&内存&I/O监控Shell脚本1 by:授客 QQ:1033553122 #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`if ...
- linux 服务器性能监控(一)
这篇文章主要介绍一些常用的linux服务器性能监控命令,包括命令的常用参数.指标的含义以及一些交互操作. 几个问题 命令本身并不复杂,关键是你对操作系统基础知识的掌握和理解,先来看看下面几个问题: C ...
- jmeter使用笔记——脚本录制,JMeter使用plugins插件进行服务器性能监控
脚本录制: 1.badboy录制 2.代理服务器录制 ①工作台添加HTTP代理服务器 ②设置目标控制器,分组,排除模式,包含模式(使用正则表达式筛选) ③设置浏览器,手动设置代理服务器,localho ...
随机推荐
- Centos 7 搭建蓝鲸V4.1.16稳定社区版
在本地用VMware模拟了三台主机 准备至少3台 CentOS 7 以上操作系统的机器,保证三台虚拟机都可以上网 最低配置:2核4G(我用的是这个) 建议配置: 4核12G 以上 192.168.16 ...
- [Vue] : 键盘修饰符
键盘修饰符以及自定义键盘修饰符 为文本框回车键绑定事件 <input type="text" class="form-control" v-model=& ...
- 利用Python构建时间序列模型解决实际问题的正确姿势
要本着应用到实际工作中目的去学时间序列分析,才能深入浅出的学会,不要纠结于理论,只听我的,我有信心说明白. 本章内容 趋势分析 序列分解 序列预测 序列分解 统计学基础铺垫 划分 时间序列按照季节性划 ...
- python 字符串模板
from string import Template print(type(Template)) mystr = Template("hi,$name 你是$baby") pri ...
- 使用io/ioutil进行读写文件
读文件: package main import ( "fmt" "io/ioutil" ) func main() { b, err := ioutil.Re ...
- linux上安装openssl的步骤
需要准备 openssl 稳定版文件: 从openssl官网下载最新的稳定版本,https://www.openssl.org/source/ 当前的稳定版是 openssl-fips-2.0.16 ...
- 处理flutter http请求添加application/json报错Cannot set the body fields of a Request with content-type “application/json”
在flutter中在http请求发送时设置"content-type": "application/json"会出现报错Cannot set the body ...
- python pip 使用
一.修改 pip 源 Windows 在用户目录下新建 pip\pip.ini 文件,如:C:\Users\Administrator\pip\pip.ini [global] index-url = ...
- Kbengine游戏引擎-【4】demo-kbengine_unity3d_demo 在容器docker上安装测试
git地址:https://github.com/kbengine/kbengine_unity3d_demo Demo中文地址:https://github.com/kbengine/kbengin ...
- Oracle常用CURD
-------------------------------------------------------------------------------------通用函数和条件判断函数 使用N ...