博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Ping和Telnet/NC的监控脚本案例分析
阅读量:6180 次
发布时间:2019-06-21

本文共 8655 字,大约阅读时间需要 28 分钟。

 

案例一:单纯地对某些ip进行ping监控

[root@test opt]# cat /opt/hosts_ip_list 192.168.10.10 192.168.10.11192.168.10.12192.168.10.13192.168.10.14192.168.10.15192.168.10.16192.168.10.17[root@test opt]# cat /opt/hosts_ip_monit.sh#!/bin/bashfor ip in $(cat /opt/hosts_ip_list)     do     ping -c 1 $ip &>/dev/null                      #ping 3次,当3次ping都失败时,则判定此ip网络通信失败。     a=$?     sleep 2     ping -c 1 $ip &>/dev/null     b=$?     sleep 2     ping -c 1 $ip &>/dev/null     c=$?     sleep 2     DATE=$(date +%F" "%H:%M)     if [ $a -ne 0 -a $b -ne 0 -a $c -ne 0 ];then         echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed."         /bin/sed -i 's/^'$ip'/'#$ip'/g' /etc/hosts     else         echo "$ip ping is successful."        /bin/sed -i 's/^'#$ip'/'$ip'/g' /etc/hosts     fidone[root@test opt]# chmod 755 /opt/hosts_ip_monit.sh [root@test opt]# sh /opt/hosts_ip_monit.sh Date : 2018-04-24 15:49Host : 192.168.10.10Problem : Ping is failed.Date : 2018-04-24 15:50Host : 192.168.10.11Problem : Ping is failed.192.168.10.12 ping is successful.192.168.10.13 ping is successful.192.168.10.14 ping is successful.192.168.10.15 ping is successful.192.168.10.16 ping is successful.Date : 2018-04-24 15:51Host : 192.168.10.17Problem : Ping is failed.

案例二:对/etc/hosts列表里的ip映射关系进行ping监控报警

测试系统服务器需要访问域名www.test.com,该域名解析的DNS地址有很多个,需要在测试系统服务器上的做host绑定。在/etc/hosts文件了做了www.test.com域名的很多绑定,在域名解析时,会从host绑定配置里从上到下匹配,如果上面绑定的ip不通,则域名解析就会失败,不会主动去解析到下一个绑定的地址,除非将这个不通的ip绑定注释掉或删除掉。现在要求:当/etc/hosts文件里绑定的ip出现故障,ping不通的时候,将该ip的绑定自动注释,并发出邮件报警;如果该ip恢复了正常通信,将自动打开该ip的绑定设置。 [root@cx-app01 ~]# cat /etc/hosts#192.168.10.10 www.test.com#192.168.10.11 www.test.com192.168.10.12 www.test.com192.168.10.13 www.test.com192.168.10.14 www.test.com192.168.10.15 www.test.com192.168.10.16 www.test.com#192.168.10.17 www.test.com [root@cx-app01 ~]# ping www.test.comPING www.test.com (192.168.10.12) 56(84) bytes of data.64 bytes from www.test.com (192.168.10.12): icmp_seq=1 ttl=50 time=31.1 ms64 bytes from www.test.com (192.168.10.12): icmp_seq=2 ttl=50 time=30.7 ms64 bytes from www.test.com (192.168.10.12): icmp_seq=3 ttl=50 time=30.8 ms....... [root@cx-app01 ~]# cat /opt/hosts_ip_list192.168.10.10192.168.10.11192.168.10.12192.168.10.13192.168.10.14192.168.10.15192.168.10.16192.168.10.17 [root@cx-app01 ~]# cat /opt/hosts_ip_monit.sh#!/bin/bashfor ip in $(cat /opt/hosts_ip_list)    do     ping -c 1 $ip &>/dev/null              a=$?     sleep 2     ping -c 1 $ip &>/dev/null     b=$?     sleep 2     ping -c 1 $ip &>/dev/null     c=$?     sleep 2     DATE=$(date +%F" "%H:%M)     if [ $a -ne 0 -a $b -ne 0 -a $c -ne 0 ];then         echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed."         cat /etc/hosts|grep "^#$ip"         d=$?           if [ $d -ne 0 ];then              /bin/bash /opt/sendemail.sh zhangsan@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip连接失败,现已在/etc/hosts文件里注释掉该ip的映射关系"              /bin/bash /opt/sendemail.sh lisi@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip连接失败,现已在/etc/hosts文件里注释掉该ip的映射关系"              /bin/bash /opt/sendemail.sh liuwu@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip连接失败,现已在/etc/hosts文件里注释掉该ip的映射关系"              /bin/sed -i 's/^'$ip'/'#$ip'/g' /etc/hosts           else              echo "$ip is not conneted,and it has been done"           fi     else         echo "$ip ping is successful."         cat /etc/hosts|grep "^#$ip"         f=$?           if [ $f -eq 0 ];then              /bin/bash /opt/sendemail.sh zhangsan@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip连接成功,现已在/etc/hosts文件里恢复该ip的映射关系"              /bin/bash /opt/sendemail.sh lisi@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip连接成功,现已在/etc/hosts文件里恢复该ip的映射关系"              /bin/bash /opt/sendemail.sh liuwu@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip连接成功,现已在/etc/hosts文件里恢复该ip的映射关系"              /bin/sed -i 's/^'#$ip'/'$ip'/g' /etc/hosts           else              echo "$ip connection has been restored"           fi     fidone  采用sendemail进行邮件告警发送,sendemail部署参考:http://www.cnblogs.com/kevingrace/p/5961861.html[root@cx-app01 ~]# cat /opt/sendemail.sh#!/bin/bash# Filename: SendEmail.sh# Notes: 使用sendEmail## 脚本的日志文件LOGFILE="/tmp/Email.log":>"$LOGFILE"exec 1>"$LOGFILE"exec 2>&1SMTP_server='smtp.test.com'username='monit@test.com'password='monit@123'from_email_address='monit@test.com'to_email_address="$1"message_subject_utf8="$2"message_body_utf8="$3"# 转换邮件标题为GB2312,解决邮件标题含有中文,收到邮件显示乱码的问题。message_subject_gb2312=`iconv -t GB2312 -f UTF-8 << EOF$message_subject_utf8EOF`[ $? -eq 0 ] && message_subject="$message_subject_gb2312" || message_subject="$message_subject_utf8"# 转换邮件内容为GB2312,解决收到邮件内容乱码message_body_gb2312=`iconv -t GB2312 -f UTF-8 << EOF$message_body_utf8EOF`[ $? -eq 0 ] && message_body="$message_body_gb2312" || message_body="$message_body_utf8"# 发送邮件sendEmail='/usr/local/bin/sendEmail'set -x$sendEmail -s "$SMTP_server" -xu "$username" -xp "$password" -f "$from_email_address" -t "$to_email_address" -u "$message_subject" -m "$message_body" -o message-content-type=text -o message-charset=gb2312  每10分钟定时执行该监控脚本[root@cx-app01 ~]# crontab -l*/10 * * * *  /bin/bash -x /opt/hosts_ip_monit.sh > /dev/null 2>&1

案例三:通过nc工具对/etc/hosts列表里的ip的443端口跟本机通信是否正常进行探测

案例二是针对ping编写的监控脚本,下面介绍下利用nc探测端口通信是否正常的脚本:探测本机对下面/etc/hosts文件里的ip地址的443端口通信是否正常,如果通信失败,则发出报警,并在/etc/hosts文件里注释掉该ip地址的绑定关系。如果注释掉的ip的443端口跟本机恢复了通信,则去掉/etc/hosts文件里该ip的注释![root@cx-app01 ~]# cat /etc/hosts192.168.10.201 www.test.com192.168.10.205  www.test.com192.168.10.17  www.test.com192.168.10.85  www.test.com192.168.10.176   www.test.com192.168.10.245  www.test.com192.168.10.25    www.test.com192.168.10.47  www.test.com[root@cx-app01 ~]# cat /opt/hosts_ip_list 192.168.10.201192.168.10.205192.168.10.17192.168.10.85192.168.10.176192.168.10.245192.168.10.25192.168.10.47采用nc工具去探测端口是否正常通信(yum install -y nc)[root@cx-app01 ~]# /usr/bin/nc -z  -w 10 192.168.10.201 443Connection to 192.168.10.201 443 port [tcp/https] succeeded!针对上面ip列表里的地址,进行批量ip的443端口通信的探测。脚本如下:[root@cx-app01 ~]# cat /opt/host_ip_nc_monit.sh #!/bin/bashfor ip in $(cat /opt/hosts_ip_list)  do    echo -e "Date : $DATE\nHost : $ip\nProblem : Port 443 is connected."    cat /etc/hosts|grep "^#$ip"     a=$?    if [ $a -ne 0 ];then       /usr/bin/nc -z  -w 10 $ip 443       b=$?       if [ $b -ne 0 ];then          /bin/bash /opt/sendemail.sh wangshibo@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip的443端口连接失败,现已在/etc/hosts文件里注释掉该ip的映射关系"          /bin/bash /opt/sendemail.sh linan@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip的443端口连接失败,现已在/etc/hosts文件里注释掉该ip的映射关系"          /bin/sed -i 's/^'$ip'/'#$ip'/g' /etc/hosts       else       echo "$HOSTNAME跟$ip的443端口正常连接"       fi    else       /usr/bin/nc -z  -w 10 $ip 443       c=$?       if [ $c -eq 0 ];then         /bin/bash /opt/sendemail.sh wangshibo@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip的443端口连接成功,现已在/etc/hosts文件里恢复该ip的映射关系"         /bin/bash /opt/sendemail.sh linan@test.com "测试系统跟www.test.com通信情况" "$HOSTNAME跟$ip的443端口连接成功,现已在/etc/hosts文件里恢复该ip的映射关系"         /bin/sed -i 's/^'#$ip'/'$ip'/g' /etc/hosts       else         echo "$HOSTNAME跟$ip的443端口连接失败"       fi    fidone给脚本赋权[root@cx-app01 ~]# chmod 755 /opt/host_ip_nc_monit.sh执行脚本:[root@cx-app01 ~]# sh /opt/host_ip_nc_monit.shDate : Host : 192.168.10.201Problem : Port 443 is connected.Connection to 192.168.10.201 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.201的443端口正常连接Date : Host : 192.168.10.205Problem : Port 443 is connected.Connection to 192.168.10.205 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.205的443端口正常连接Date : Host : 192.168.10.17Problem : Port 443 is connected.Connection to 192.168.10.17 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.17的443端口正常连接Date : Host : 192.168.10.85Problem : Port 443 is connected.Connection to 192.168.10.85 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.85的443端口正常连接Date : Host : 192.168.10.176Problem : Port 443 is connected.Connection to 192.168.10.176 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.176的443端口正常连接Date : Host : 192.168.10.245Problem : Port 443 is connected.Connection to 192.168.10.245 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.245的443端口正常连接Date : Host : 192.168.10.25Problem : Port 443 is connected.Connection to 192.168.10.25 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.25的443端口正常连接Date : Host : 192.168.10.47Problem : Port 443 is connected.Connection to 192.168.10.47 443 port [tcp/https] succeeded!cx-app01.veredholdings.cn跟192.168.10.47的443端口正常连接结合crontab进行计划任务[root@cx-app01 ~]# crontab -l*/10 * * * *  /bin/bash -x /opt/host_ip_nc_monit.sh > /dev/null 2>&1
你可能感兴趣的文章
ECSHOP之transport.js/run() error:'process_request' 未定义
查看>>
dp学习笔记4
查看>>
SetTimer 与回调函数
查看>>
一步一步学Linq to sql(三):增删查改
查看>>
[ubuntu] ubuntu13.04切换桌面/工作区的方法
查看>>
连接各种数据库
查看>>
T-Sql(一)简单语法
查看>>
事务与并发
查看>>
类程序Log4j Android
查看>>
游戏运营杂谈<-最关心的游戏运营数据指标分析
查看>>
代码nullMerge two sorted linked lists
查看>>
异常选择struts2文件上传产生Source 'xxxx.tmp' does not exist
查看>>
Android用户界面开发(1):TextView
查看>>
vs2010 安装mvc3
查看>>
程序设置PAIP.在程序中设置壁纸墙纸
查看>>
关于TIME_WAIT可能引发的网络问题
查看>>
crontab 格式及例题详解
查看>>
SQL DELETE 语句
查看>>
windows7 安装程序无法创建新的系统分区或者无法识别
查看>>
代码生成器Kalman Studio2.2发布,完美支持Oracle,不需要安装Oracle客户端
查看>>