天天看點

zabbix聚合圖形建立腳本

背景:

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