新建shell脚本文件_编写简单的shell脚本文件监控主机服务

编写简单的shell脚本,监控主机服务

最近在抽空学习shell脚本,学习完正好写篇文章自我复习。

编写监测主机状态脚本

#!/bin/bash#监控目标主机状态#监控方法 ping  ICMP协议#ping 通  host up#ping 不通 host down#1、关于禁ping 防止DDOS#   禁的是陌生人 #   网络有延迟 假报警问题#   ping的取值 报警阈值 #   ping的频率 秒级 5秒 or 1秒#调用方式(可执行情况) sh host_status.sh host(主机ip)#main#也可以写成函数去封装方法for ((i=1;i<4;i++));do#执行三次,每次发送一条ping到对应主机,成功则设置参数为1#输出信息丢入/dev/null(linux的垃圾桶),$1代表ip参数    if ping -c1 $1 &>/dev/null;then#成功,则设置全局变量ping_count + i为1      export  ping_count"$i"=1    else#否则为0      export  ping_count"$i"=0    fi#时间间隔 0.3代表一秒三次    sleep 0.3done#3次ping失败报警 eq代表相等if [ $ping_count1 -eq $ping_count2 ] && [ $ping_count2 -eq $ping_count3 ] && [ $ping_count1 -eq 0 ];then#ping不通echo "$1 is down"#ping通else   echo "$1 is up"fi#取消设置的全局变量unset ping_count1unset ping_count2unset ping_count3

记得取消脚本中设置的全局变量

可以看到ping域名也是一样的,有dns解析即可。5dff7e86d2a0d195284dfdc8ad6b11c9.png

编写监测端口服务脚本

一般我们使用 lsof -i : port 或者 netstat -an | grep port的形势来查看端口服务,或者使用service/systemctl直接查看服务。对于本机这样确实较为方便,但是对于某些服务可能处于假死状态(流量太大),这样就会导致错认为端口服务被关闭。这时可以采用telnet来查看端口。b27a8a24861e9ff5523bd269ceea6e05.png

注 若本机未安装telnet服务 可以使用yum/apt 来快速安装, telnet使用方法:telnet host port

1ad5917606e46579087bc98566d710d1.png4b64fc3c0773ebcb001e6aef5d48add3.png

#!/bin/bash#监控一个服务端口#监控方法#1) 通过systemctl service 服务启动状态#2) lsof 查看端口是否存在#3) 查看进程是否存在######服务假死 压力过大 | 服务down了#4) 测试端口是否有响应 推荐    #telnet 协议#mainport_status () {#mktemp创建随机后缀临时文件,执行完rm -f删除temp_file=`mktemp port_status.XXX`# 判断本机的telnet是否存在[ ! -x /usr/bin/telnet ]&&echo "telnet not fount command" && exit 1# 测试端口 $1 IP $2 port3( telnet $1 $2 <quitEOF) &>$temp_file#分析文件中的内容,判断结果 \是转义符,\^]即是匹配^]的意思if egrep "\^]" $temp_file &>/dev/null;then   echo "$1 $2 is open"else   echo "$1 $2 is close"fi#删除临时文件rm -f $temp_file}port_status $1 $2

查看内存和cpu使用率

一般linux中安装htop来查看服务,不过脚本配合top当然也能快速执行来简单查看。663cfa260a21567d27e227d3a1496ddf.png

#!/bin/bash#采用函数的方式编写方法,便于复用memory(){#创建临时文件 注意`号temp_file=`mktemp memory.XXX`#使用top将进程信息装入临时文件top -b -n 1 > $temp_fileecho "memory status:" #tail + awk + sort + head 多个管道命令输出到控制台#tail -n +8 查看第八行至末尾#awk输出每一行 sort进行排序 然后head取前十tail -n +8 $temp_file | awk '{array[$NF]+=$6}END{for (i in array) print array[i],i}' |sort -k 1 -n -r|head -10rm -f $temp_file}#同内存cpu(){temp_file=`mktemp memory.XXX`top -b -n 1 > $temp_fileecho "cpu status:"tail -n +8 $temp_file | awk '{array[$NF]+=$9}END{for (i in array) print array[i],i}' |sort -k 1 -n -r|head -10rm -f $temp_file}memorycpu

8e33e3b49679ee11fe04efc35a2fab7e.png

查看内存使用率

原理其实也就是去进程文件夹/proc/meminfo查看信息,其实也应了那句linux中一切皆文件的话,每个进程都有自己的pid文件c646a2b416f4e7a6f334246f957a5773.png

#!/bin/bash#内存使用率统计脚本#/proc/meminfo#内存申请顺序 free-cache-buffer-swapmemory_use() {#head + awk 解决 awk中是'' 命令执行是``,需要划清memory_used=`head -2 /proc/meminfo |awk 'NR==1{t=$2}NR==2{f=$2;print(t-f)*100/t}'`memory_cache=`head -5 /proc/meminfo |awk 'NR==1{t=$2}NR==4{c=$2;print c*100/t"%"}'`memory_buffer=`head -4 /proc/meminfo |awk 'NR==1{t=$2}NR==3{b=$2;print b*100/t"%"}'`echo -e "memory_used:$memory_used\tbuffer:$memory_buffer\tcached:$memory_cache"}memory_use

个人感觉内存吃率和htop查看的有点点出入,不知道是什么原因,还有待学习。004b571b87c34bec80988ceae78ca081.png

296d57f0b79169534196850a06948e22.png

io监控脚本

可以通过查看io,监控磁盘读写状态。

先使用下iostat看看:8999d822288580ef23c871507c58f67e.png

io(){ device_num=`iostat -x 1 3|egrep "^vd[a-z]"|wc -l`  iostat -x 1 3|egrep "vda"|tail -n +$((device_num+1))| awk '{io_long[$1]+=$9}END{for (i in io_long)print io_long[i],i}'# 2-3算高阈值}#以下可以用来测试io队列while truedo   io   sleep 5done

可以通过使用dd命令模拟测试io0142419445c7d6301b5eb805e71bcdfd.png

15f07a98998de79362657cda95501f6f.png

看得出,磁盘块VDA的io率飙升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值