用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 發送微信的代碼參考我以前博客

相關文章
相關標籤/搜索