前兩天看到博客有監控web的,之前也寫過pycurl的監控狀態;後面想想web監控咱們何不直接通過zabbix的方式監控;zabbix確實是個萬花筒,這個也是我喜歡zabbix的一個原因之一吧;pycurl可以參考我之前寫過的:http://xiaoluoge.blog.51cto.com/9141967/1616922。
1、監控腳本:
[root@monitor scripts]# cat web_monitor.py #!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys import time import sys import pycurl import json urllist=['www.baidu.com','www.hao123.com'] class Test: def __init__(self): self.contents = '' def callback(self,curl): self.contents = self.contents + curl def test_gzip(url): data = {} t = Test() c = pycurl.Curl() c.setopt(pycurl.WRITEFUNCTION,t.callback) c.setopt(pycurl.ENCODING, 'gzip') c.setopt(pycurl.URL,url) c.perform() data['HTTP_CODE']=c.getinfo(c.HTTP_CODE) data['NAMELOOKUP_TIME']=(c.getinfo(c.NAMELOOKUP_TIME))*1000 data['CONNECT_TIME']=(c.getinfo(c.CONNECT_TIME))*1000 data['PRETRANSFER_TIME']=(c.getinfo(c.PRETRANSFER_TIME))*1000 data['SPEED_DOWNLOAD']=c.getinfo(c.SPEED_DOWNLOAD) return data def web_name_discovery(): web_list=[] web_dict={"data":None} for url in urllist: url_dict={} url_dict["{#NAME}"]=url web_list.append(url_dict) web_dict["data"]=web_list jsonStr = json.dumps(web_dict, sort_keys=True, indent=4) return jsonStr def get_web_status(): data=test_gzip(sys.argv[2]) return data[sys.argv[3]] if __name__ == '__main__': if sys.argv[1] == "web_name_discovery": print web_name_discovery() elif sys.argv[1] == "get_web_status": print get_web_status()
2、web_name_discovery函數負責以json格式的形式返回我們要監控的網站域名(修改urllist把域名變成你們自己的域名即可):執行結果:
[root@monitor scripts]# python web_monitor.py web_name_discovery { "data": [ { "{#NAME}": "www.baidu.com" }, { "{#NAME}": "www.hao123.com" } ] }
**這個{#NAME}就是我們要返回的宏變量;
3、web在anent定義這個key和在web UI定義:
[root@monitor scripts]# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/web_status.conf UserParameter=get_web_name,/usr/local/zabbix/scripts/web_monitor.py web_name_discovery UserParameter=get_web_status[*],/usr/local/zabbix/scripts/web_monitor.py get_web_status $1 $2
測試結果:
[root@monitor bin]# ./zabbix_get -s 192.168.10.100 -k get_web_name { "data": [ { "{#NAME}": "www.baidu.com" }, { "{#NAME}": "www.hao123.com" } ] }
定義web UI的key(配置---》模板---創建自動發現規則---》定義第一個獲取域名名稱的key):
4、函數get_web_status獲取網站各個服務質量的值:查看key設置效果:
# ./zabbix_get -s 192.168.10.100 -k get_web_status[www.hao123.com,HTTP_CODE]
200
5、這樣的話獲取key的返回值狀態也找到了,剩下的就是在模板裏定義監控原先和出圖告警監控就好:
6、監控圖形原型設置:
7、網站各狀態響應時間:
網站平均下載速度:
網站的狀態碼:
到此已經完成,後期大家可以做些優化,或者想不到的地方大家可以修改:我用的是zabbix 3.0的,3.0的話直接下載模板導入,定義angent key即可:
zabbix視頻請移步:http://www.roncoo.com/details/fb3050a5b34b42f39ccad83ebebc89c1
zabbix自動化課程目錄(需求更新中):
1、zabbix生產環境如何使用
2、saltstack批量部署zabbix_agent
3、zabbix API簡單使用講解
4、web UI講解
5、開始監控之添加一個簡單的linux監控
6、zabbix 強大的內置key講解
7、內置key的使用、 端口、用戶數、磁盤讀取狀態出圖
8、trigger表達式學習,實現用戶登錄數,端口檢查告警
9、zabbix郵件告警設置與維護週期
10、zabbix自定義Key添加,tcp狀態模板編寫
11、自定義監控之、監控nginx解析與實現
12、自定義監控之php-fpm監控
13、自定義監控之mysql狀態監控
14、自定義監控之緩存服務器memcached,redis監控
15、自動化之saltstack管理zabbix,批量推送key生效
16、zabbix自動發現綁定刪除模板,自動註冊
17、zabbix lld發現講解以及端口發現監控告警出圖
18、zabbix lld 發現web站點以及批量獲取狀態碼
19、zabbix lld複習和監控磁盤的運行狀況
20、zabbix生成環境規範和按月生成報表資源統計
21、微信公衆號告警