Shell脚本监控

之前自己搭建了一套Grafana+Zabbix的监控,但是还没研究透彻,只采用了server端进行监控,找时间再学习一下部署agent做分布式监控。Grafana展示user/passwd:guest/guest


这次是根据公司线上业务,部署在了IDC服务器中,来测试节点间的网络质量,如果出现丢包率大的情况即发送邮件报警。

主要目的是为了记录、交流学习,请不要随意粘贴使用,可能会出现不匹配的情况。

  • 主脚本如下:

探测脚本,大概逻辑是先循环赋值写好的ip列表,然后进行ping探测(两次),如果出现丢包则执行MTR,然后输出到文件,然后利用htm和发邮件脚本执行发送。

#!/bin/bashfor i in `cat /home/yangyang14/upcm` #循环读取探测ipdo#loss=$( ping -c 30 -i 0.2  $i | grep loss | awk '{print $6}') los=$(ping -c 30 -i 0.2  $i | grep loss | awk '{print $6}' | awk -F '%' '{print $1}') #ping向列表中的ip并取loss参数RTT=$(ping -c 1 -i 0.2  $i | grep avg) #取RTT参数t=$(date "+-%Y-%m-%d %H:%M:%S") #记录详细系统时间t2=$(date "+-%Y-%m-%d") #记录系统日期name=$(grep $i /home/yangyang14/name |awk -F '-' '{print $1 }') #上层节点名,自己做的:名称-IP对应表host=$(hostname |awk -F '.' '{print $1}') #边缘节点名,取本机hostnamemyip=$(cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep IPADDR | awk -F '=' '{print $2}') #取本机ifcfg-eth0里的ip信息if [[ $los -lt 3 ]] #判断丢包不大于3个thenecho "---------------- $t ----------------" >> /home/yangyang14/monitor/$name-ping echo "$t-$name-$i "loss:$loss"" >> /home/yangyang14/monitor/$name-ping #记录ping丢包数值echo "$t-$name-$i $RTT" >> /home/yangyang14/monitor/$name-pingecho --------------------------------------- >> /home/yangyang14/monitor/$name-pingecho " " >> /home/yangyang14/monitor/$name-pingelseecho "---------------- $t ------------------" >> /home/yangyang14/monitor/$t2-$name-mtrecho "$t-$name-$i "loss:$loss"" >> /home/yangyang14/monitor/$t2-$name-mtrsudo mtr -n -r $i >> /home/yangyang14/monitor/$t2-$name-mtr #记录第一次丢包时的mtr信息到monitor文件夹下,但是不做报警pingloss=$(ping -c 50 -i 0.5  $i | grep loss | awk '{print $6}' | awk -F '%' '{print $1}') #为了防止误报需要再次ping测试if [[ $pingloss -lt 3 ]] #为了防止误报需要再次判断丢包thenecho " "elseecho "---------------- $t ------------------" >> /home/yangyang14/$t2-mtrecho "$host:[$myip]-->$name:[$i] "loss:$pingloss"" >> /home/yangyang14/$t2-mtr #打印相关变量信息echo "pingloss:$host-->$name-$i-loss:$pingloss%" >> //home/yangyang14/host #打印信息用于邮件主题,调用到py脚本使用。sudo mtr -n -r -c 100 -i 0.1 $i >> /home/yangyang14/$t2-mtr #把MTR信息存入到文件中sudo sed 's/ /`/g' /home/yangyang14/$t2-mtr > htmmtr #修改文件中的信息给htm.sh使用echo "边缘节点:[$myip][sudo mtr -n -i 0.1 $i]" >> /home/yangyang14/htmmtr #记录文本,在邮件中直接测试使用echo "上层节点:[$i][sudo mtr -n -i 0.1 -a $i $myip]" >> /home/yangyang14/htmmtr #记录文本,在邮件中直接测试使用/bin/sh /home/yangyang14/htm.sh #执行htm.sh脚本,生成邮件发送文本/usr/bin/python video_mail.py #执行发送邮件脚本,完成发送邮件动作。rm -f /home/yangyang14/hostrm -f /home/yangyang14/$t2-mtrrm -f /home/yangyang14/htmmtrrm -f /home/yangyang14/mailmtr #删除无用文本,不删除monitor中的文本,做定时任务8天清空fifidone
  • 辅助脚本如下:
  1. 脚本下发、ip列表下发、添加定时任务
  2. 输出文件转换HTM格式
  3. 利用python脚本发送文件至邮箱

脚本下发、ip列表下发、添加定时任务:

#!/bin/bashfor i in `cat /home/yangyang14/monitor/ctip`    #下发所有边缘节点doecho ----------------sending-$i--------------------scp /home/yangyang14/monitor/htm.sh yangyang14@$i:/home/yangyang14/scp /home/yangyang14/monitor/video_mail.py yangyang14@$i:/home/yangyang14/#scp /home/yangyang14/monitor/name yangyang14@$i:/home/yangyang14/     #下发name列表scp /home/yangyang14/monitor/upct yangyang14@$i:/home/yangyang14/    #下发上层探测列表scp /home/yangyang14/monitor/ctping.sh yangyang14@$i:/home/yangyang14 #下发执行ping执行脚本#ssh $i 'mkdir /home/yangyang14/monitor'       #创建ping结果保留目录#ssh $i '(echo "*/3 * * * * /bin/sh /home/yangyang14/ctping.sh" ; echo  "0 0 */8 * * rm -f /home/yangyang14/monitor/*" ) | crontab'    #添加计划任务3分钟执行一次探测 #保留7天数据8天删除一次monitor下的文件ssh $i 'crontab -l'echo ----------------------------------------------echo " "done

输出文件转换HTM格式

# !/bin/shfile_input='/home/yangyang14/htmmtr' #带转换的文件
file_output='mailmtr' #转换后输出的文件,提交给mail脚本使用td_str='' #此处为邮件正文开头,因为不太需要所以就注释掉了
#function create_html_head(){# echo -e "<html>#   <body>#    <h1>各位好!</h1>#   <h1>节点丢包信息如下:</h1>"
#}function create_table_head(){echo -e "<table border="1">"
}function create_td(){
#  if [ -e ./"$1" ]; thenecho $1td_str=`echo $1 | awk 'BEGIN{FS="|"}''{i=1; while(i<=NF) {print "<td>"$i"</td>";i++}}'`echo $td_str
#  fi
}function create_tr(){create_td "$1"echo -e "<tr>$td_str</tr>" >> $file_output
}function create_table_end(){echo -e "</table>"
}function create_html_end(){echo -e "</body></html>"
}function create_html(){rm -rf $file_outputtouch $file_outputcreate_html_head >> $file_outputcreate_table_head >> $file_outputwhile read linedoecho $linecreate_tr "$line"done < $file_inputcreate_table_end >> $file_outputcreate_html_end >> $file_output
}create_html

利用python脚本发送文件至邮箱

#!/usr/bin/env python
# coding:utf-8
import datetime
import time
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
#import  socket
f = open('/home/yangyang14/host')
host = f.read().strip()
f.close()def send_mail():date = (datetime.datetime.today()-datetime.timedelta(days=1)).strftime('%Y-%m-%d')html_file = "mailmtr" #发送的文件名称username = "yangyang14"password = "*******"from_addr = "yangyang14@kingsoft.com" #发送人to_addr = ["yangyang14@kingsoft.com"] #被发送人 #to_addr = [""]messages = ''fd = open(html_file,"r")lines = fd.readlines()fd.close()for line in lines:messages += line#video_cdn_IP-2016-11-01.xlsfd.close()msg = MIMEMultipart()msg['From'] = from_addrmsg['To'] = ','.join(to_addr)#msg['Cc'] = cc_addrmsg['Subject'] = host + datemsg.attach(MIMEText(messages, 'html', 'utf-8'))# 带上二进制附件attachname = "mailmtr"att = MIMEText(open(attachname, 'rb').read(), 'base64', 'gb2312')  att["Content-Type"] = 'application/octet-stream'  att['content-disposition'] = 'attachment; filename="%s"' % attachnamemsg.attach(att) smtp = smtplib.SMTP()#smtp.set_debuglevel(1)smtp.connect('bjmail.kingsoft.com', 587)smtp.starttls()smtp.login(username, password)smtp.sendmail(from_addr, to_addr, msg.as_string())smtp.quit()if __name__ == "__main__":#hostname = socket.gethostname()#host=hostname.split('.')[0]send_mail()

从编写的排版上应该能看出来,htm脚本和邮件脚本不是我写的,前面两个脚本是根据公司线上业务环境编写的,因为服务器之间有key钥免密码登陆所以才可以自由的跳转。如果没有得需要考虑其他办法,比如自动填写密码的脚本。

部署完成后大概使用了一个星期,效果还可以,下面我截一些图。

利用scp脚本下发至所有服务器

本地保存的文件(用于查后账,7天自动清空)

生成的邮件告警

下图右侧为mtr详细输出的报告模式,最下面文本的目的是可以快速登录服务器进行故障复现,提供双向MTR并向运营商报障使用。

这样做基本上可以做到丢包告警的功能,但是会有很多误报出现,比如说在业务关系上并没有业务来往的两个节点也同样会出现报警,比如西北部地区的节点到东部地区的节点。这种长传出现的丢包情况比较多。

通过邮件自带的筛选功能也可以筛选出需要查看的源机房以及目的机房的所有丢包情况,便于判断问题,同样利于向运营商保障,右侧详情可以查看到丢包的mtr报告。

网络简单监控邮件告警相关推荐

  1. 使用篇丨链路追踪(Tracing)很简单:链路实时分析、监控与告警

    前文回顾: 基础篇|链路追踪(Tracing)其实很简单 使用篇|链路追踪(Tracing)其实很简单:请求轨迹回溯与多维链路筛选 在前面文章里面,我们介绍了单链路的筛选与轨迹回溯,是从单次请求的视角 ...

  2. java mail 监控新邮件,添加自定义监控项目,配置邮件告警,测试告警,不发送邮件的问题处理...

    笔记内容:19.12添加自定义监控项目 19.13/19.14配置邮件告警 19.15测试告警 19.16不发送邮件的问题处理 笔记日期:2017-11-20 19.12添加自定义监控项目 自定义的监 ...

  3. Zabbix 系统监控(三)VMware 虚拟平台监控、邮件告警、企业微信告警配置

    Vmware 虚拟平台监控.邮件告警.企业微信告警配置 8 Vmware 虚拟平台监控 阅读 zabbix 官方文档,官方提供了 Vmware 虚拟机监控模板,并对模板进行了解释说明,但未对相应名词做 ...

  4. Prometheus 监控报警系统 AlertManager 之邮件告警

    文章目录 1.Prometheus & AlertManager 介绍 2.环境.软件准备 3.启动并配置 Prometheus 3.1.Docker 启动 Prometheus 3.2.Do ...

  5. 利用zabbix自带模板监控网络设备及配置邮件告警

    网络设备配置snmp,这里我们用H3C设备举例,持续关注后续会更新如何创建自定义监控项 这里我们用Tempate Moudule Interfaces SNMP做示例,这个模板包括接口的状态.出入方向 ...

  6. zabbix添加自定义监控项目-配置邮件告警-测试告警

    2019独角兽企业重金招聘Python工程师标准>>> 添加自定义监控项目: 需求:监控某台web的80端口连接数,并出图 步骤:1.zabbix监控中心创建监控项目: 客户端定义脚 ...

  7. 19.12 添加自定义监控项目 19.13/19.14 配置邮件告警 19.15 测试告警 19.16 不发邮件的问题处理...

    2019独角兽企业重金招聘Python工程师标准>>> 提示:开始本节内容之前有必要先做好快照!!! 19.12 添加自定义监控项目 该配置的用途是监控模板中没有的监控项目. 需求: ...

  8. Linux监控(添加自定义监控项,配置邮件告警)

    一.添加自定义监控项 需求:监控某台web的80端口连接数,并出图. 步骤: 1):zabbix监控中心创建监控项目 2):针对该监控项目以图形展现 第一步(需要到客户端定义脚本) [root@zhu ...

  9. 19.12 添加自定义监控项目;19.13,19.14 配置邮件告警(上下);19.15 测试告警19.16...

    19.12 添加自定义监控项目 需求:监控某台web的80端口连接数,并出图 两步:1)zabbix监控中心创建监控项目: 2)针对该监控项目以图形展现 客户端hao2机器配置: 1. 客户端(hao ...

最新文章

  1. Android GUI之View测量
  2. httpd默认配置文件详解
  3. Servlet中转发和重定向的路径问题以及表单提交路径问题
  4. 第一章:1.1.4信号运算
  5. html5 sidetoggle,javascript-使用React.js实现SlideToggle功能
  6. POJ3274Gold Balanced Lineup(哈希)
  7. linux如何查看磁盘剩余空间
  8. 记单词工具 百词斩 0124
  9. 如何用Python破解验证码,适合新手练手
  10. oracle视图查询机制,物化视图及日志内部机制的一点研究
  11. linux下载python 没有iedl_linux 安装python
  12. python是什么类型的语言-Python是什么?简单了解pythonp-入门
  13. html里怎么画斜线表头,Word2013中绘制斜线表头的方法
  14. Python读取excel生成正态分布图
  15. 2021-05-18 C#.NET面试题 一张长方形的桌面上放n个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内,也可能有一些彼此重叠;当再多放一个硬币而它的圆心在桌面内时,新放的硬币便必定与
  16. @Prometheus监控数据库(MySQL)
  17. 前端如何对视频进行截屏加标注
  18. 【NLP】11大Java开源中文分词器的使用方法和分词效果对比
  19. 自媒体平台资讯06:网易有网易号,有网易公开课自媒体,现在又有网易有道号?...
  20. 7.论文学习Multi-phase Liver Tumor Segmentation with Spatial Aggregation and Uncertain Region Inpainting

热门文章

  1. 职场上流行的最恶毒的三句话
  2. 木瓜移动品牌焕新~2022聚能跨境周诚邀您参与
  3. 【转】一位院士的忠告
  4. Docker的安全机制
  5. ES聚合查询详解(三):指标聚合
  6. Vote3Deep: Fast Object Detection in 3D Point Clouds Using Efficient Convolutional Neural Networks
  7. 小白入门:用什么写Python?
  8. 怪物猎人x服务器维护,《怪物猎人:崛起》太火爆 任天堂服务器紧急维护
  9. MySQL(二):详解MyIsam表锁
  10. 计算机视觉第四次实验--基于RANSAC的图像全景拼接