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

目的:用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 发送微信的代码参考我之前博客

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算

使用Helm将应用程序部署到IBM Cloud上的Kubernetes

Helm是Kubernetes的包管理程序。借助Helm,您可以非常方便地将应用程序,工具和数据库(如MongoDB,PostgreSQL,WordPress和...

2709
来自专栏杂文共赏

使用DCHQ自动部署和管理Docker Cloud /虚拟Java微服务

本文演示了一个在云或虚拟平台上,用于自动化部署和管理Docker Java微服务应用程序的解决方案。我们通过扩展现有项目Chris Richardson的示例—...

2024
来自专栏晨星先生的自留地

Docker入门教程(二)命令

1694
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Ghost CMS

Ghost 1.0.0是Ghost内容管理系统(CMS)的第一个主要稳定版本。Ghost 1.0.0有一个全新的Markdown编辑器,刷新的用户界面,新的默认...

1996
来自专栏散尽浮华

Docker网络解决方案-Calico部署记录

Calico简单简介 Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信。Calico不使用重叠网络比如flannel和...

97610
来自专栏北京马哥教育

Linux命令的使用格式以及命令帮助信息的获取方式

1.Linux系统上的命令使用格式 ? 2.Linux系统程序文件存放位置 ? 3.Linux获取命令的帮助信息 区分内部命令和外部命令 内部命令在系统启动时就...

3516
来自专栏地方网络工作室的专栏

打造前端MAC工作站(六)MAC上的压缩软件,keka和atool

打造前端MAC工作站(六)MAC上的压缩软件,keka和atool 前言 在MAC下面对于windows重度用户来说,可能最不适应的就是压缩软件了。因为没有一款...

3169
来自专栏EAWorld

DevOps的支撑服务:K8s容器管理与应用部署

? 大家好,本期微课堂介绍在新一代数字化企业云平台中对于Kubernetes的学习以及使用的总结。 ? 本次分享分为两部分: 1.介绍Kubernetes是什...

5627
来自专栏java一日一条

HAProxy、Nginx 配置 HTTP/2 完整指南

基于最近对HTTP/2的争论和它的优势,是时候升级底层架构了。这篇文章将会介绍如何在安装和配置HAProxy和Ngnix(使用ssl终端)。为了简化流程,我建议...

1451
来自专栏小狼的世界

CoreDNS介绍

开始之前先吐槽一下busybox中的nslookup命令。这个命令应该是实现的不是很完全,导致我在测试DNS的成功,得到了错误的信息。先来看一下

1.5K1

扫码关注云+社区

领取腾讯云代金券