用zabbix和openwrt構建低成本的分佈式公網監控

目的:用zabbix和放在異地分公司內網的刷了openwrt的路由器以及微信接口來構建一套分佈式的公網監控報警系統。用於監控各個地方訪問公司的應用的鏈接連通性,訪問時間,dns解析結果

第一版的效果圖

wKiom1d3qd2QMCtCAAJpKj9v1_U908.png-wh_50

想折騰這個需要的技能:1 搭建zabbix 環境 2 理解zabbix trapper模式 3 會折騰openwrt 路由器 

軟硬件環境:

主節點:zabbix server ,server端口需要映射至公網

分佈式節點:一臺刷了openwrt的路由器(常見的mtk7260 以及ralink等都可以),無需公網ip,但是需要互聯網連接,wan口dhcp,怎麼折騰,建議參考恩山論壇,安裝zabbix sender 軟件包




實現過程:分佈式節點的cron 裏面每分鐘調用zabbix sender命令 發送curl網址的結果,調用時間給 server wKioL1d3rKGT2oPBAAB3ID_P-jo879.png-wh_50

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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章