用zabbix和openwrt构建低成本的分布式公网监控

目的:用zabbix和放在异地分公司内网的刷了openwrt的路由器以及微信接口来构建一套分布式的公网监控报警系统。用于监控各个地方访问公司的应用的连接连通性,访问时间,dns解析结果python

初版的效果图数据库

wKiom1d3qd2QMCtCAAJpKj9v1_U908.png-wh_50

想折腾这个须要的技能:1 搭建zabbix 环境 2 理解zabbix trapper模式 3 会折腾openwrt 路由器 bash

软硬件环境:微信

主节点:zabbix server ,server端口须要映射至公网网络

分布式节点:一台刷了openwrt的路由器(常见的mtk7260 以及ralink等均可以),无需公网ip,可是须要互联网链接,wan口dhcp,怎么折腾,建议参考恩山论坛,安装zabbix sender 软件包
app




实现过程:分布式节点的cron 里面每分钟调用zabbix sender命令 发送curl网址的结果,调用时间给 server wKioL1d3rKGT2oPBAAB3ID_P-jo879.png-wh_50curl

server对收到的信息进行分析,处理。分布式

难点:一、一个网站若是挂了,全部分布式节点都会报警,那么个人微信是否是会被吵死?ide

    二、分布式节点没有公网端口,怎么样要增长或者减小网址怎么办?fetch

    三、异地分公司网络环境复杂,误报不少怎么办?

个人处理方式:1&3 :server收到消息,并触发trigger以后,把相关信息写入数据库,在对数据库信息进行处理 我用的逻辑有如下几条

   (1) 一分钟以内 触发告警而且恢复的不推微信

   (2) 一分钟内,全部触发而且没有恢复的报警合并在一块儿推微信,而且一个网址的多个节点合并成一块儿报出来,参看前图

 二、每一个节点每小时访问个人server 来同步crontab 的内容,而且天天凌晨重启


附代码

1 分布式节点检测网址的脚本

 

#!/bin/bash

now=`date +%F-%H-%M-%S`


cd /etc/zabbix/monitor_scripts/timefile


[[ -f time.$now ]]||touch time.$now


{ time bash /root/curl1.sh $1; } &> time.$now


TIME=`cat time.$now |grep real|awk -F m '{print $2}'|awk -F s '{print $1}'`


/usr/bin/zabbix_sender -s beijing-unicom -z #ZABBIX HOSTNAME -k "time[$1]" -o $TIME &>/dev/null


find /etc/zabbix/monitor_scripts/timefile -mmin +5 -delete


2 检测数据库的python代码:

cur.execute('UPDATE zabbix SET SENDTOWECHAT1=1,SENDTOWECHAT2=1  WHERE RESOLVED= 1 and  SENDTOWECHAT1 = 0 and SENDTOWECHAT2=0')

conn.commit()

cur.execute('SELECT URL FROM zabbix  WHERE RESOLVED=0 and  SENDTOWECHAT1 = 0 and SENDTOWECHAT2=0')

resault=cur.fetchall()

message=''

for i in set(resault):

  i=i[0]

  cur.execute('SELECT HOST FROM zabbix  WHERE RESOLVED=0 and  SENDTOWECHAT1 = 0 and SENDTOWECHAT2=0 and URL="{0}"'.format(i))

  resault=(set(cur.fetchall()))

  HOST=''

  for j in resault:

    HOST=HOST+str(j[0])+","

  print(HOST)

  message=message+ ("节点{0}访问{1}出现问题。".format(HOST,i))

代码仅仅是抛砖引玉,


3 发送微信的代码参考我以前博客

相关文章
相关标签/搜索