zabbix lld結合pycurl批量監控網站服務質量

   前兩天看到博客有監控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):


wKioL1eTkmDwJGJKAAAumJNDU8o976.png-wh_50



4、函數get_web_status獲取網站各個服務質量的值:查看key設置效果:

# ./zabbix_get -s 192.168.10.100 -k get_web_status[www.hao123.com,HTTP_CODE]       

200


5、這樣的話獲取key的返回值狀態也找到了,剩下的就是在模板裏定義監控原先和出圖告警監控就好:


wKiom1eTk_jxm13fAACc1V4JtiQ756.png-wh_50


6、監控圖形原型設置:


wKiom1eTlNfQDeNRAABaBNn4VW4748.png-wh_50


7、網站各狀態響應時間:


wKiom1eTmLqCttdMAAC69-65dzM449.png-wh_50


網站平均下載速度:


wKioL1eTlTeCPHmLAACnQzSYjjI612.png-wh_50


網站的狀態碼:


wKiom1eTlVLxndZSAABjMa7Woeg717.png-wh_50


到此已經完成,後期大家可以做些優化,或者想不到的地方大家可以修改:我用的是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、微信公衆號告警



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