最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python批量添加zabbix Screens的兩個腳本分享

 更新時間:2017年01月16日 15:51:59   作者:chen  
這篇文章主要給大家分享了python中兩個批量添加zabbix Screens的腳本,分別是將單個主機(jī)的所有圖形添加到一個Screens和將同組主機(jī)的同一圖形添加到一個Screens,有需要的朋友可以參考借鑒,下面來一看看吧。

前言

在最初搭建公司監(jiān)控系統(tǒng)的時候,最頭疼的是需要把同類項目組的相同圖形添加到一個Screens,由于只能一個一個的添加,非常耗時耗經(jīng)歷。

下面分享兩個腳本來解決這個頭疼的問題。

1.將單個主機(jī)的所有圖形添加到一個Screens

使用方法

#更改main()函數(shù)里的url、username、password

#參數(shù)一:主機(jī)名

#參數(shù)二:篩選圖名稱

python zabbix_screen_host.py 'zabbixserver' 'zabbixserver'

zabbix_screen_host.py腳本內(nèi)容

#!/usr/bin/env python
#zabbix_screen_host.py
import urllib2
import json
import argparse
def authenticate(url, username, password):
 values = {'jsonrpc': '2.0',
 'method': 'user.login',
 'params': {
  'user': username,
  'password': password
 },
 'id': '0'
 }
 data = json.dumps(values)
 req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
 response = urllib2.urlopen(req, data)
 output = json.loads(response.read())
 try:
 message = output['result']
 except:
 message = output['error']['data']
 print message
 quit()
 return output['result']
def getGraph(hostname, url, auth, graphtype, dynamic, columns):
 if (graphtype == 0):
 selecttype = ['graphid']
 select = 'selectGraphs'
 if (graphtype == 1):
 selecttype = ['itemid', 'value_type']
 select = 'selectItems'
 values = {'jsonrpc': '2.0',
 'method': 'host.get',
 'params': {
  select: selecttype,
  'output': ['hostid', 'host'],
  'searchByAny': 1,
  'filter': {
  'host': hostname
  }
 },
 'auth': auth,
 'id': '2'
 }
 data = json.dumps(values)
 req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
 response = urllib2.urlopen(req, data)
 host_get = response.read()
 output = json.loads(host_get)
 # print json.dumps(output)
 graphs = []
 if (graphtype == 0):
 for i in output['result'][0]['graphs']:
 graphs.append(i['graphid'])
 if (graphtype == 1):
 for i in output['result'][0]['items']:
 if int(i['value_type']) in (0, 3):
 graphs.append(i['itemid'])
 graph_list = []
 x = 0
 y = 0
 for graph in graphs:
 graph_list.append({
 "resourcetype": graphtype,
 "resourceid": graph,
 "width": "500",
 "height": "100",
 "x": str(x),
 "y": str(y),
 "colspan": "1",
 "rowspan": "1",
 "elements": "0",
 "valign": "0",
 "halign": "0",
 "style": "0",
 "url": "",
 "dynamic": str(dynamic)
 })
 x += 1
 if x == columns:
 x = 0
 y += 1
 return graph_list
def screenCreate(url, auth, screen_name, graphids, columns):
 # print graphids
 if len(graphids) % columns == 0:
 vsize = len(graphids) / columns
 else:
 vsize = (len(graphids) / columns) + 1
 values = {"jsonrpc": "2.0",
 "method": "screen.create",
 "params": [{
  "name": screen_name,
  "hsize": columns,
  "vsize": vsize,
  "screenitems": []
 }],
 "auth": auth,
 "id": 2
 }
 for i in graphids:
 values['params'][0]['screenitems'].append(i)
 data = json.dumps(values)
 req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
 response = urllib2.urlopen(req, data)
 host_get = response.read()
 output = json.loads(host_get)
 try:
 message = output['result']
 except:
 message = output['error']['data']
 print json.dumps(message)
 
def main():
 url = 'http://zabbixip/zabbix/api_jsonrpc.php'
 username = "***"
 password = "***"
 parser = argparse.ArgumentParser(description='Create Zabbix screen from all of a host Items or Graphs.')
 parser.add_argument('hostname', metavar='H', type=str,
  help='Zabbix Host to create screen from')
 parser.add_argument('screenname', metavar='N', type=str,
  help='Screen name in Zabbix. Put quotes around it if you want spaces in the name.')
 parser.add_argument('-c', dest='columns', type=int, default=3,
  help='number of columns in the screen (default: 3)')
 parser.add_argument('-d', dest='dynamic', action='store_true',
  help='enable for dynamic screen items (default: disabled)')
 parser.add_argument('-t', dest='screentype', action='store_true',
  help='set to 1 if you want item simple graphs created (default: 0, regular graphs)')
 args = parser.parse_args()
 hostname = args.hostname
 screen_name = args.screenname
 columns = args.columns
 dynamic = (1 if args.dynamic else 0)
 screentype = (1 if args.screentype else 0)
 auth = authenticate(url, username, password)
 graphids = getGraph(hostname, url, auth, screentype, dynamic, columns)
 print "Screen Name: " + screen_name
 print "Total Number of Graphs: " + str(len(graphids))
 screenCreate(url, auth, screen_name, graphids, columns)
if __name__ == '__main__':
 main()

2.將同組主機(jī)的同一圖形添加到一個Screens

使用方法

#更改main()函數(shù)里的url、username、password

#-g :組名稱

#-G:圖形名稱

#-n :篩選(screen)圖名稱

#-c : 一行有多少圖形

python zabbix_screen_group.py -g 'zabbix' -G 'icmp-ping' -n 'zabbix-icmp-ping' -c 2

zabbix_screen_group.py腳本內(nèi)容

#!/usr/bin/env python
import urllib2
import sys
import json
import argparse
 
#定義通過HTTP方式訪問API地址的函數(shù),后面每次請求API的各個方法都會調(diào)用這個函數(shù)
def requestJson(url,values): 
 data = json.dumps(values)
 req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
 response = urllib2.urlopen(req, data)
 output = json.loads(response.read())
# print output
 try:
 message = output['result']
 except:
 message = output['error']['data']
 print message
 quit()
 
 return output['result']
 
#API接口認(rèn)證的函數(shù),登錄成功會返回一個Token
def authenticate(url, username, password):
 values = {'jsonrpc': '2.0',
  'method': 'user.login',
  'params': {
   'user': username,
   'password': password
  },
  'id': '0'
  }
 idvalue = requestJson(url,values)
 return idvalue
 
#定義更加主機(jī)分組名稱獲取各個hostid的函數(shù)
def getHosts(groupname,url,auth):
 host_list = []
 values = {'jsonrpc': '2.0',
  'method': 'hostgroup.get',
  'params': {
   'output': 'extend',
   'filter': {
   'name': groupname
   },
 
   'selectHosts' : ['hostid','host'],
  },
  'auth': auth,
  'id': '2'
  }
 output = requestJson(url,values)
 for host in output[0]['hosts']:
 host_list.append(host['hostid'])
 return host_list
 
#定義獲取graphid的函數(shù)
def getGraphs(host_list,name_list, url, auth, columns, graphtype=0 ,dynamic=0):
 if (graphtype == 0):
 selecttype = ['graphid']
 select = 'selectGraphs'
 if (graphtype == 1):
 selecttype = ['itemid', 'value_type']
 select = 'selectItems'
 values=({'jsonrpc' : '2.0',
  'method' : 'graph.get',
  'params' : {
   'output' : ['graphid','name'],
   select : [selecttype,'name'],
   'hostids' : host_list,
   'sortfield' : 'name',
   'filter' : {
    'name' : name_list,
 
    },
   },
  'auth' : auth,
  'id' : 3
  })
 output = requestJson(url,values)
 bb = sorted(output,key = lambda x:x['graphid'])
 graphs = []
 if (graphtype == 0):
 for i in bb:
  print i
  graphs.append(i['graphid'])
 if (graphtype == 1):
 for i in bb:
  if int(i['value_type']) in (0, 3):
  graphs.append(i['itemid'])
 
 graph_list = []
 x = 0
 y = 0
 for graph in graphs:
 print "x is " + str(x)
 print "y is " + str(y)
 graph_list.append({
  "resourcetype": graphtype,
  "resourceid": graph,
  "width": "500",
  "height": "100",
  "x": str(x),
  "y": str(y),
  "colspan": "1",
  "rowspan": "1",
  "elements": "0",
  "valign": "0",
  "halign": "0",
  "style": "0",
  "url": "",
  "dynamic": str(dynamic)
 })
 x += 1
# print type(x)
# print type(columns)
 if x == int(columns):
  x = 0
  y += 1
# print graph_list
 return graph_list
 
#定義創(chuàng)建screen的函數(shù)
def screenCreate(url, auth, screen_name, graphids, columns):
 columns = int(columns)
 if len(graphids) % columns == 0:
 vsize = len(graphids) / columns
 else:
 vsize = (len(graphids) / columns) + 1
 
#先使用screen.get判斷給定的screen name是否存在
 values0 = {
  "jsonrpc" : "2.0",
  "method" : "screen.get",
  "params" : {
   "output" : "extend",
   "filter" : {
   "name" : screen_name,
    }
    },
  "auth" : auth,
  "id" : 2
  }
 values = {
  "jsonrpc": "2.0",
  "method": "screen.create",
  "params": {
   "name": screen_name,
   "hsize": columns,
   "vsize": vsize,
   "screenitems": []
  },
  "auth": auth,
  "id": 2
  }
 output0 = requestJson(url,values0)
 print output0
 
#如果給定的screen name不存在則直接創(chuàng)建screen 
 if output0 == []:
 print "The Given Screen Name Not Exists"
 print "Creating Screen %s" %screen_name
 for i in graphids:
  values['params']['screenitems'].append(i)
 output = requestJson(url,values)
 else:
 
 
#如果給定的screen name已經(jīng)存在,直接創(chuàng)建screen是不行的,
#要么先使用screen.delete把原來的screen刪除掉,然后再創(chuàng)建,
#要么直接使用screen.update更新原來那個screen,
#使用screen.delete會產(chǎn)生新的screenid,
#使用screen.update比較合理一點(diǎn)。
 print "The Given Screen Name Already Exists"
 update_screenid=output0[0]["screenid"]
 print update_screenid
 print "Updating Screen Name %s Screen ID %s" %(screen_name,update_screenid)
 values1 = {
  "jsonrpc" : "2.0",
  "method" : "screen.update",
  "params" : {
   "screenid" : update_screenid,
   "screenitems": []
    },
  "auth" : auth,
  "id" : 2
   }
 output1 = requestJson(url,values1)
 print output1
 print "Updating Screen Name %s" %screen_name
 for i in graphids:
  values1['params']['screenitems'].append(i)
 output = requestJson(url,values1)
 
def main():
 url = 'http://zabbixip/zabbix/api_jsonrpc.php'
 username = '****'
 password = '****'
 auth = authenticate(url, username, password)
 host_list = getHosts(groupname,url,auth)
 print host_list
 graph_ids = getGraphs(host_list,graphname, url, auth, columns)
 screenCreate(url, auth, screenname, graph_ids, columns)
if __name__ == '__main__':
 parser = argparse.ArgumentParser(description='Create Zabbix screen from all of a host Items or Graphs.')
 parser.add_argument('-G', dest='graphname', nargs='+',metavar=('grah name'),
   help='Zabbix Host Graph to create screen from')
 parser.add_argument('-H', dest='hostname', nargs='+',metavar=('10.19.111.145'),
   help='Zabbix Host to create screen from')
 parser.add_argument('-g', dest='groupname', nargs='+',metavar=('linux server'),
   help='Zabbix Group to create screen from')
 parser.add_argument('-n', dest='screenname', type=str,
   help='Screen name in Zabbix. Put quotes around it if you want spaces in the name.')
 parser.add_argument('-c', dest='columns', type=int,
   help='number of columns in the screen')
 args = parser.parse_args()
 print args
 hostname = args.hostname
 groupname = args.groupname
 screenname = args.screenname
 columns = args.columns
 graphname = args.graphname
 if columns is None:
 columns = len(graphname)
# print columns
 main()

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn)

    python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn)

    這篇文章主要介紹了python實(shí)現(xiàn)進(jìn)度條的多種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python?RawString與open文件的newline換行符遇坑解決

    Python?RawString與open文件的newline換行符遇坑解決

    這篇文章主要為大家介紹了Python?RawString與open文件的newline換行符遇坑解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Python爬蟲獲取基金變動信息

    Python爬蟲獲取基金變動信息

    這篇文章主要介紹了Python爬蟲獲取基金變動信息,問基于上一篇文章得內(nèi)容介紹圍繞python的相關(guān)資料展開全文,需要的小伙伴可以參考一下
    2022-05-05
  • python調(diào)用staf自動化框架的方法

    python調(diào)用staf自動化框架的方法

    今天小編就為大家分享一篇python調(diào)用staf自動化框架的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解如何通過Python制作一個密碼生成器

    詳解如何通過Python制作一個密碼生成器

    定期更換密碼是一種非常重要的安全措施,這種做法可以有效地保護(hù)你的賬戶和個人信息不受黑客和網(wǎng)絡(luò)攻擊者的侵害。所以本文就來用Python制作一個密碼生成器吧
    2023-05-05
  • 用python畫圣誕樹三種代碼示例介紹

    用python畫圣誕樹三種代碼示例介紹

    大家好,本篇文章主要講的是用python畫圣誕樹三種代碼示例介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • wxPython事件驅(qū)動實(shí)例詳解

    wxPython事件驅(qū)動實(shí)例詳解

    這篇文章主要介紹了wxPython事件驅(qū)動機(jī)制,以一個獲取當(dāng)前位置信息的實(shí)例形式講述了wxPython事件驅(qū)動機(jī)制及其相關(guān)函數(shù)的用法,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-09-09
  • Django的Modelforms用法簡介

    Django的Modelforms用法簡介

    這篇文章主要介紹了Django的Modelforms用法簡介,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Django自定義全局403、404、500錯誤頁面的示例代碼

    Django自定義全局403、404、500錯誤頁面的示例代碼

    這篇文章主要介紹了Django自定義全局403、404、500錯誤頁面的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python實(shí)現(xiàn)PowerPoint演示文稿到圖片的批量轉(zhuǎn)換

    Python實(shí)現(xiàn)PowerPoint演示文稿到圖片的批量轉(zhuǎn)換

    PowerPoint演示文稿作為展示創(chuàng)意、分享知識和表達(dá)觀點(diǎn)的重要工具,被廣泛應(yīng)用于教育、商務(wù)匯報及個人項目展示等領(lǐng)域,用Python代碼可以高效地實(shí)現(xiàn)PowerPoint演示文稿到圖片的批量轉(zhuǎn)換,從而提升工作效率,文本將介紹如何使用Python實(shí)現(xiàn)PowerPoint演示文稿到圖片的轉(zhuǎn)換
    2024-06-06

最新評論

乌拉特中旗| 诏安县| 法库县| 万宁市| 凤山市| 大连市| 杭州市| 石景山区| 龙川县| 闻喜县| 宣武区| 准格尔旗| 合山市| 商丘市| 海丰县| 原阳县| 会东县| 高雄市| 璧山县| 江陵县| 工布江达县| 凤阳县| 临洮县| 开阳县| 南汇区| 乡城县| 积石山| 洪泽县| 天全县| 千阳县| 海城市| 乳山市| 楚雄市| 白城市| 乐业县| 丰原市| 隆林| 安庆市| 浪卡子县| 桃江县| 宜城市|