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,如需轉載請自行聯系原作者