背景:
系統版本 :CentOS Linux release 7.1.1503 (Core)
腳本 環境:python
python版本:Python 2.7.5
zabbix版本:Zabbix3.2.4
腳本用途:
用于建立screen圖形。
可以省略重複給screen添加圖形。
腳本内容:
建立腳本名字為zabbix.py
<code>#!/usr/bin/env python</code>
<code>import</code> <code>urllib2</code>
<code>import</code> <code>json</code>
<code>import</code> <code>argparse</code>
<code>def</code> <code>authenticate(url, username, password):</code>
<code> </code><code>values </code><code>=</code> <code>{</code><code>'jsonrpc'</code><code>: </code><code>'2.0'</code><code>,</code>
<code> </code><code>'method'</code><code>: </code><code>'user.login'</code><code>,</code>
<code> </code><code>'params'</code><code>: {</code>
<code> </code><code>'user'</code><code>: username,</code>
<code> </code><code>'password'</code><code>: password</code>
<code> </code><code>},</code>
<code> </code><code>'id'</code><code>: </code><code>'0'</code>
<code> </code><code>}</code>
<code> </code><code>data </code><code>=</code> <code>json.dumps(values)</code>
<code> </code><code>req </code><code>=</code> <code>urllib2.Request(url, data, {</code><code>'Content-Type'</code><code>: </code><code>'application/json-rpc'</code><code>})</code>
<code> </code><code>response </code><code>=</code> <code>urllib2.urlopen(req, data)</code>
<code> </code><code>output </code><code>=</code> <code>json.loads(response.read())</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>message </code><code>=</code> <code>output[</code><code>'result'</code><code>]</code>
<code> </code><code>except</code><code>:</code>
<code> </code><code>message </code><code>=</code> <code>output[</code><code>'error'</code><code>][</code><code>'data'</code><code>]</code>
<code> </code><code>print</code> <code>message</code>
<code> </code><code>quit()</code>
<code> </code><code>return</code> <code>output[</code><code>'result'</code><code>]</code>
<code>def</code> <code>getGraph(hostname, url, auth, graphtype, dynamic, columns):</code>
<code> </code><code>if</code> <code>(graphtype </code><code>=</code><code>=</code> <code>0</code><code>):</code>
<code> </code><code>selecttype </code><code>=</code> <code>[</code><code>'graphid'</code><code>]</code>
<code> </code><code>select </code><code>=</code> <code>'selectGraphs'</code>
<code> </code><code>if</code> <code>(graphtype </code><code>=</code><code>=</code> <code>1</code><code>):</code>
<code> </code><code>selecttype </code><code>=</code> <code>[</code><code>'itemid'</code><code>, </code><code>'value_type'</code><code>]</code>
<code> </code><code>select </code><code>=</code> <code>'selectItems'</code>
<code> </code><code>'method'</code><code>: </code><code>'host.get'</code><code>,</code>
<code> </code><code>select: selecttype,</code>
<code> </code><code>'output'</code><code>: [</code><code>'hostid'</code><code>, </code><code>'host'</code><code>],</code>
<code> </code><code>'searchByAny'</code><code>: </code><code>1</code><code>,</code>
<code> </code><code>'filter'</code><code>: {</code>
<code> </code><code>'host'</code><code>: hostname</code>
<code> </code><code>}</code>
<code> </code><code>'auth'</code><code>: auth,</code>
<code> </code><code>'id'</code><code>: </code><code>'2'</code>
<code> </code><code>host_get </code><code>=</code> <code>response.read()</code>
<code> </code><code>output </code><code>=</code> <code>json.loads(host_get)</code>
<code> </code><code># print json.dumps(output)</code>
<code> </code><code>graphs </code><code>=</code> <code>[]</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>output[</code><code>'result'</code><code>][</code><code>0</code><code>][</code><code>'graphs'</code><code>]:</code>
<code> </code><code>graphs.append(i[</code><code>'graphid'</code><code>])</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>output[</code><code>'result'</code><code>][</code><code>0</code><code>][</code><code>'items'</code><code>]:</code>
<code> </code><code>if</code> <code>int</code><code>(i[</code><code>'value_type'</code><code>]) </code><code>in</code> <code>(</code><code>0</code><code>, </code><code>3</code><code>):</code>
<code> </code><code>graphs.append(i[</code><code>'itemid'</code><code>])</code>
<code> </code><code>graph_list </code><code>=</code> <code>[]</code>
<code> </code><code>x </code><code>=</code> <code>0</code>
<code> </code><code>y </code><code>=</code> <code>0</code>
<code> </code><code>for</code> <code>graph </code><code>in</code> <code>graphs:</code>
<code> </code><code>graph_list.append({</code>
<code> </code><code>"resourcetype"</code><code>: graphtype,</code>
<code> </code><code>"resourceid"</code><code>: graph,</code>
<code> </code><code>"width"</code><code>: </code><code>"500"</code><code>,</code>
<code> </code><code>"height"</code><code>: </code><code>"100"</code><code>,</code>
<code> </code><code>"x"</code><code>: </code><code>str</code><code>(x),</code>
<code> </code><code>"y"</code><code>: </code><code>str</code><code>(y),</code>
<code> </code><code>"colspan"</code><code>: </code><code>"1"</code><code>,</code>
<code> </code><code>"rowspan"</code><code>: </code><code>"1"</code><code>,</code>
<code> </code><code>"elements"</code><code>: </code><code>"0"</code><code>,</code>
<code> </code><code>"valign"</code><code>: </code><code>"0"</code><code>,</code>
<code> </code><code>"halign"</code><code>: </code><code>"0"</code><code>,</code>
<code> </code><code>"style"</code><code>: </code><code>"0"</code><code>,</code>
<code> </code><code>"url"</code><code>: "",</code>
<code> </code><code>"dynamic"</code><code>: </code><code>str</code><code>(dynamic)</code>
<code> </code><code>})</code>
<code> </code><code>x </code><code>+</code><code>=</code> <code>1</code>
<code> </code><code>if</code> <code>x </code><code>=</code><code>=</code> <code>columns:</code>
<code> </code><code>x </code><code>=</code> <code>0</code>
<code> </code><code>y </code><code>+</code><code>=</code> <code>1</code>
<code> </code><code>return</code> <code>graph_list</code>
<code>def</code> <code>screenCreate(url, auth, screen_name, graphids, columns):</code>
<code> </code><code># print graphids</code>
<code> </code><code>if</code> <code>len</code><code>(graphids) </code><code>%</code> <code>columns </code><code>=</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>vsize </code><code>=</code> <code>len</code><code>(graphids) </code><code>/</code> <code>columns</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>vsize </code><code>=</code> <code>(</code><code>len</code><code>(graphids) </code><code>/</code> <code>columns) </code><code>+</code> <code>1</code>
<code> </code><code>values </code><code>=</code> <code>{</code><code>"jsonrpc"</code><code>: </code><code>"2.0"</code><code>,</code>
<code> </code><code>"method"</code><code>: </code><code>"screen.create"</code><code>,</code>
<code> </code><code>"params"</code><code>: [{</code>
<code> </code><code>"name"</code><code>: screen_name,</code>
<code> </code><code>"hsize"</code><code>: columns,</code>
<code> </code><code>"vsize"</code><code>: vsize,</code>
<code> </code><code>"screenitems"</code><code>: []</code>
<code> </code><code>}],</code>
<code> </code><code>"auth"</code><code>: auth,</code>
<code> </code><code>"id"</code><code>: </code><code>2</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>graphids:</code>
<code> </code><code>values[</code><code>'params'</code><code>][</code><code>0</code><code>][</code><code>'screenitems'</code><code>].append(i)</code>
<code> </code><code>print</code> <code>json.dumps(message)</code>
<code>def</code> <code>main():</code>
<code> </code><code>url </code><code>=</code> <code>'http://請換成web通路zabbix的ip/zabbix/api_jsonrpc.php'</code>
<code> </code><code>username </code><code>=</code> <code>"web登入zabbix的使用者"</code>
<code> </code><code>password </code><code>=</code> <code>"web登入zabbix的密碼"</code>
<code> </code><code>parser </code><code>=</code> <code>argparse.ArgumentParser(description</code><code>=</code><code>'Create Zabbix screen </code><code>from</code> <code>all</code> <code>of a host Item</code>
<code>s </code><code>or</code> <code>Graphs.')</code>
<code> </code><code>parser.add_argument(</code><code>'hostname'</code><code>, metavar</code><code>=</code><code>'H'</code><code>, </code><code>type</code><code>=</code><code>str</code><code>,</code>
<code> </code><code>help</code><code>=</code><code>'Zabbix Host to create screen from'</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>'screenname'</code><code>, metavar</code><code>=</code><code>'N'</code><code>, </code><code>type</code><code>=</code><code>str</code><code>,</code>
<code> </code><code>help</code><code>=</code><code>'Screen name </code><code>in</code> <code>Zabbix. Put quotes around it </code><code>if</code> <code>you want spaces </code>
<code>in</code> <code>the name.')</code>
<code> </code><code>parser.add_argument(</code><code>'-c'</code><code>, dest</code><code>=</code><code>'columns'</code><code>, </code><code>type</code><code>=</code><code>int</code><code>, default</code><code>=</code><code>3</code><code>,</code>
<code> </code><code>help</code><code>=</code><code>'number of columns in the screen (default: 3)'</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>'-d'</code><code>, dest</code><code>=</code><code>'dynamic'</code><code>, action</code><code>=</code><code>'store_true'</code><code>,</code>
<code> </code><code>help</code><code>=</code><code>'enable for dynamic screen items (default: disabled)'</code><code>)</code>
<code> </code><code>parser.add_argument(</code><code>'-t'</code><code>, dest</code><code>=</code><code>'screentype'</code><code>, action</code><code>=</code><code>'store_true'</code><code>,</code>
<code> </code><code>help</code><code>=</code><code>'</code><code>set</code> <code>to </code><code>1</code> <code>if</code> <code>you want to create only simple graphs of items, no p</code>
<code>reviously defined graphs will be added to screen (default </code><code>0</code><code>)')</code>
<code> </code><code>args </code><code>=</code> <code>parser.parse_args()</code>
<code> </code><code>hostname </code><code>=</code> <code>args.hostname</code>
<code> </code><code>screen_name </code><code>=</code> <code>args.screenname</code>
<code> </code><code>columns </code><code>=</code> <code>args.columns</code>
<code> </code><code>dynamic </code><code>=</code> <code>(</code><code>1</code> <code>if</code> <code>args.dynamic </code><code>else</code> <code>0</code><code>)</code>
<code> </code><code>screentype </code><code>=</code> <code>(</code><code>1</code> <code>if</code> <code>args.screentype </code><code>else</code> <code>0</code><code>)</code>
<code> </code><code>auth </code><code>=</code> <code>authenticate(url, username, password)</code>
<code> </code><code>graphids </code><code>=</code> <code>getGraph(hostname, url, auth, screentype, dynamic, columns)</code>
<code> </code><code>print</code> <code>"Screen Name: "</code> <code>+</code> <code>screen_name</code>
<code> </code><code>print</code> <code>"Total Number of Graphs: "</code> <code>+</code> <code>str</code><code>(</code><code>len</code><code>(graphids))</code>
<code> </code><code>screenCreate(url, auth, screen_name, graphids, columns)</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>main()</code>
腳本内容修改以下三行:
url = 'http://請換成web通路zabbix的ip/zabbix/api_jsonrpc.php'
username = "請換成web登入zabbix的使用者"
password = "請換成web登入zabbix的密碼"
執行方法:
給予權限
chmod 744 zabbix.py
腳本參數:
-h 獲得幫助
-c 設定生成screen的列數(根據螢幕大小,一般設定兩列。預設設定3列)
-d screen圖形生成動态監控
執行:
./zabbix -c 2 被監控裝置主機顯示名 生成screen的名稱
例子:
./zabbix -c 2 192.168.0.1 192.168.0.1
用主機192.168.0.1的所有監控項生成screen圖形的名稱為192.168.0.1
參考官網連結:
本文轉自506554897 51CTO部落格,原文連結:http://blog.51cto.com/506554897/1930825,如需轉載請自行聯系原作者