天天看點

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

1、監控腳本:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

<code>[root@monitor scripts]</code><code># cat web_monitor.py </code>

<code>#!/usr/bin/env python</code>

<code># -*- coding: utf-8 -*-  </code>

<code>import</code> <code>os,sys  </code>

<code>import</code> <code>time  </code>

<code>import</code> <code>sys  </code>

<code>import</code> <code>pycurl </code>

<code>import</code> <code>json</code>

<code>urllist</code><code>=</code><code>[</code><code>'www.baidu.com'</code><code>,</code><code>'www.hao123.com'</code><code>] </code>

<code>class</code> <code>Test:</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>):</code>

<code>        </code><code>self</code><code>.contents </code><code>=</code> <code>''</code>

<code>    </code><code>def</code> <code>callback(</code><code>self</code><code>,curl):</code>

<code>        </code><code>self</code><code>.contents </code><code>=</code> <code>self</code><code>.contents </code><code>+</code> <code>curl</code>

<code>def</code> <code>test_gzip(url):</code>

<code>    </code><code>data </code><code>=</code> <code>{} </code>

<code>    </code><code>t </code><code>=</code> <code>Test() </code>

<code>    </code><code>c </code><code>=</code> <code>pycurl.Curl()  </code>

<code>    </code><code>c.setopt(pycurl.WRITEFUNCTION,t.callback)</code>

<code>    </code><code>c.setopt(pycurl.ENCODING, </code><code>'gzip'</code><code>)</code>

<code>    </code><code>c.setopt(pycurl.URL,url) </code>

<code>    </code><code>c.perform()    </code>

<code>    </code><code>data[</code><code>'HTTP_CODE'</code><code>]</code><code>=</code><code>c.getinfo(c.HTTP_CODE)</code>

<code>    </code><code>data[</code><code>'NAMELOOKUP_TIME'</code><code>]</code><code>=</code><code>(c.getinfo(c.NAMELOOKUP_TIME))</code><code>*</code><code>1000</code>

<code>    </code><code>data[</code><code>'CONNECT_TIME'</code><code>]</code><code>=</code><code>(c.getinfo(c.CONNECT_TIME))</code><code>*</code><code>1000</code>

<code>    </code><code>data[</code><code>'PRETRANSFER_TIME'</code><code>]</code><code>=</code><code>(c.getinfo(c.PRETRANSFER_TIME))</code><code>*</code><code>1000</code>

<code>    </code><code>data[</code><code>'SPEED_DOWNLOAD'</code><code>]</code><code>=</code><code>c.getinfo(c.SPEED_DOWNLOAD)</code>

<code>    </code><code>return</code> <code>data</code>

<code>def</code> <code>web_name_discovery():</code>

<code>    </code><code>web_list</code><code>=</code><code>[]</code>

<code>    </code><code>web_dict</code><code>=</code><code>{</code><code>"data"</code><code>:</code><code>None</code><code>}</code>

<code>    </code><code>for</code> <code>url </code><code>in</code> <code>urllist:</code>

<code>        </code><code>url_dict</code><code>=</code><code>{}</code>

<code>        </code><code>url_dict[</code><code>"{#NAME}"</code><code>]</code><code>=</code><code>url</code>

<code>        </code><code>web_list.append(url_dict)</code>

<code>    </code><code>web_dict[</code><code>"data"</code><code>]</code><code>=</code><code>web_list</code>

<code>    </code><code>jsonStr </code><code>=</code> <code>json.dumps(web_dict, sort_keys</code><code>=</code><code>True</code><code>, indent</code><code>=</code><code>4</code><code>)</code>

<code>    </code><code>return</code> <code>jsonStr</code>

<code>def</code> <code>get_web_status():</code>

<code>    </code><code>data</code><code>=</code><code>test_gzip(sys.argv[</code><code>2</code><code>])</code>

<code>    </code><code>return</code> <code>data[sys.argv[</code><code>3</code><code>]]</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>if</code> <code>sys.argv[</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>"web_name_discovery"</code><code>:</code>

<code>        </code><code>print</code> <code>web_name_discovery()</code>

<code>    </code><code>elif</code> <code>sys.argv[</code><code>1</code><code>] </code><code>=</code><code>=</code> <code>"get_web_status"</code><code>:</code>

<code>        </code><code>print</code> <code>get_web_status()</code>

2、web_name_discovery函數負責以json格式的形式傳回我們要監控的網站域名(修改urllist把域名變成你們自己的域名即可):執行結果:

<code>[root@monitor scripts]</code><code># python web_monitor.py web_name_discovery</code>

<code>{</code>

<code>    </code><code>"data"</code><code>: [</code>

<code>        </code><code>{</code>

<code>            </code><code>"{#NAME}"</code><code>: </code><code>"www.baidu.com"</code>

<code>        </code><code>}, </code>

<code>            </code><code>"{#NAME}"</code><code>: </code><code>"www.hao123.com"</code>

<code>        </code><code>}</code>

<code>    </code><code>]</code>

<code>}</code>

**這個{#NAME}就是我們要傳回的宏變量;

3、web在anent定義這個key和在web UI定義:

<code>[root@monitor scripts]</code><code># cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/web_status.conf </code>

<code>UserParameter</code><code>=</code><code>get_web_name,</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>zabbix</code><code>/</code><code>scripts</code><code>/</code><code>web_monitor.py web_name_discovery</code>

<code>UserParameter</code><code>=</code><code>get_web_status[</code><code>*</code><code>],</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>zabbix</code><code>/</code><code>scripts</code><code>/</code><code>web_monitor.py get_web_status $</code><code>1</code> <code>$</code><code>2</code>

測試結果:

<code>[root@monitor </code><code>bin</code><code>]</code><code># ./zabbix_get -s 192.168.10.100 -k get_web_name</code>

定義web UI的key(配置---》模闆---建立自動發現規則---》定義第一個擷取域名名稱的key):

<a target="_blank"></a>

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、微信公衆号告警

<a href="http://down.51cto.com/data/2367965" target="_blank">附件:http://down.51cto.com/data/2367965</a>

本文轉自 小羅ge11 51CTO部落格,原文連結:http://blog.51cto.com/xiaoluoge/1829233,如需轉載請自行聯系原作者