下面是建立screen的腳本,可以把一個主機的所有graphs放在一個screen裡檢視。
<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> </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>"0"</code><code>,</code>
<code> </code><code>"rowspan"</code><code>: </code><code>"0"</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># 修改下面三行</code>
<code> </code><code>url </code><code>=</code> <code>'http://<zabbix url>/zabbix/api_jsonrpc.php'</code>
<code> </code><code>username </code><code>=</code> <code>"Your API Users Username"</code>
<code> </code><code>password </code><code>=</code> <code>"Your API Users Username"</code>
<code> </code><code>parser </code><code>=</code> <code>argparse.ArgumentParser(description</code><code>=</code><code>'Create Zabbix screen from all of a host Items or Graphs.'</code><code>)</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 in Zabbix. Put quotes around it if you want spaces in the name.'</code><code>)</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>'set to 1 if you want item simple graphs created (default: 0, regular graphs)'</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>
腳本使用方法:
<a href="http://s3.51cto.com/wyfs02/M00/5B/7F/wKiom1UKQlOT0WhWAAI79jqD5kg662.jpg" target="_blank"></a>
效果圖:
<a href="http://s3.51cto.com/wyfs02/M02/5B/79/wKioL1UKQsHTEECGAAalER_ze3c800.jpg" target="_blank"></a>
腳本官方位址:https://www.zabbix.org/wiki/Python_script_to_create_Screen_from_all_Items/Graphs_of_a_host
本文轉自 張斌_青島 51CTO部落格,原文連結:http://blog.51cto.com/qicheng0211/1622152