目的:用zabbix和放在异地分公司内网的刷了openwrt的路由器以及微信接口来构建一套分布式的公网监控报警系统。用于监控各个地方访问公司的应用的链接连通性,访问时间,dns解析结果 第一版的效果图 想折腾这个需要的技能:1 搭建zabbix 环境 2 理解zabbix trapper模式 3 会折腾openwrt 路由器 软硬件环境: 主节点:zabbix server ,server端口需要映射至公网 分布式节点:一台刷了openwrt的路由器(常见的mtk7260 以及ralink等都可以),无需公网ip,但是需要互联网连接,wan口dhcp,怎么折腾,建议参考恩山论坛,安装zabbix sender 软件包 实现过程:分布式节点的cron 里面每分钟调用zabbix sender命令 发送curl网址的结果,调用时间给 server server对收到的信息进行分析,处理。 难点:1、一个网站如果挂了,所有分布式节点都会报警,那么我的微信是不是会被吵死? 2、分布式节点没有公网端口,怎么样要增加或者减少网址怎么办? 3、异地分公司网络环境复杂,误报很多怎么办? 我的处理方式:1&3 :server收到消息,并触发trigger之后,把相关信息写入数据库,在对数据库信息进行处理 我用的逻辑有以下几条 (1) 一分钟之内 触发告警并且恢复的不推微信 (2) 一分钟内,所有触发并且没有恢复的报警合并在一起推微信,并且一个网址的多个节点合并成一起报出来,参看前图 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 发送微信的代码参考我之前博客
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。