zabbix api python使用

 

API使用

zabbix官網文檔:https://www.zabbix.com/documentation/2.2/manual/apiphp

Zabbix API是基於JSON-RPC 2.0規格,具體實現能夠選擇任何本身愛好的編程語言,能夠採用Perl、Ruby、PHP之類的。html

本文已python爲例。python zabbix api模塊較多,使用較爲方便。python

下面是各個語言zabbix模塊及github鏈接,可共參考。git

 

數據流程

下面的流程圖表明瞭Zabbix API 工做的典型工做流。驗證(方法user.login)是獲取驗證ID的強制步驟。這個ID又容許咱們調用API提供的任何權限容許的方法來進行操做。在以前的例子中沒有提到user.logout方法,這也是一次驗證ID可以重複使用的緣由所在。使用user.logout方法後將會使驗證ID失效,後面的操做將不能再使用此ID。github

zabbix%E6%95%B0%E6%8D%AE%E6%B5%81%E7%A8%

Python

  • py-zabbixby Alexey Dubkov - Zabbix Modules for Python (PyPI py-zabbix, no python3)express

  • ZabbixPythonApiby Frank Yao - Zabbix API for Python (no python3)編程

  • zabbixby gescheit - a Python library (PyPI zabbix-api)json

  • PyZabbixby Luke Cyca - a Python module (PyPI pyzabbix, depends-on requests)c#

  • zabbix_apiby Grigoriy Netsman - scripts for creating and deleting hosts (depends on zabbix-api)api

  • zabbix-clientby Jesús Losada - a Python library (PyPI zabbix-client)

  • zabbix-api-erigonesby Erigones - a Python library (PyPI zabbix-api-erigones)

  • pyZabbixSenderby Kurt Momberg - a zabbix_sender replacement for Python.

Ruby

  • Zabbix APIby nelsonab (latest code seems to be on github) - a Ruby wrapper

  • Rubixby Dhruv Bansal - a Ruby library for working with the API and both retrieving and sending data to Zabbix server

  • zabbixapiby Express 42 - a Ruby gem, see README on github

  • zabbyby Farzad Farid - a Ruby library and client for Zabbix

Perl

  • Zabbix-APIby SFR-ZABBIX - Perl distribution to access the Zabbix API

  • ZabbixAPIby Tomohiro Ikeda - a Perl library

  • Zabipiby Andrey Konovalov - Monitoring::Zabipi module that lets you use official Zabbix API documentation to create Perl applications interacting with Zabbix. Contains additional methods (such as queue.get) and hacks (such as expandNames parameter for item.get). Many examples of usage included in distributive.

  • Net-Zabbixby ksyz - Perl wrapper for Zabbix API

  • Zabbix-API-Clientby Matsumoto Ryosuke - Zabbix API client for Perl

Java

  • zabbix-api by hengyunabc - Java library to access Zabbix API

  • zabbix-sender by hengyunabc - Java library to use Zabbix sender protocol

PHP

  • PhpZabbixApi by confirm IT solutions GmbH - a PHP wrapper class and a wrapper code generator

  • microzabbixapiconnector by Alex Kashin - a Micro-Zabbix-Api-Connector with proxy usage support

PowerShell

  • ZabbixPosh Api by simsaull - A Zabbix PowerShell Module

  • Zabbix by Benjamin RIOUAL - An other Zabbix module, based on Invoke-RestMethod

JavaScript

  • jqzabbix by Kodai Terashima - jQuery plugin for Zabbix API

  • zabbix.js by Kristoffer Berdal - a library based around request.js

C#

Go

  • zabbixby Ryan Day - Zabbix API for Go

  • go-zabbix "by Alexey Dubkov" - Zabbix Packages for Go

  • zabbix-senderAlexey Palazhchenko - push data to Zabbix server's trapper items from Go application

  • zabbix.goAlexey Palazhchenko - Zabbix API for Go

 轉自 ··https://www.cnblogs.com/jiayun/archive/2015/12/17/5054915.html

自動化簡介

    目前咱們使用pyzabbix模塊,用json定義template 文件。

       下文講解用法(api 參考官網手冊):

複製代碼
1 #!/usr/bin/env python
  2 #jiayun
  3 #version 1.3
  4 from pyzabbix import ZabbixAPI
  5 import json
  6 import os,sys
  7 import re,time
  8 import logging
  9 rule = json.load(file('D:\pycharm\project\REGION Manage Script\qn_rolerule.json'))    #template 文件
 10 def login():
 11         zapi= ZabbixAPI("http://10.4.0.247")                                          #登陸zabbix
 12         zapi.login("admin","zabbix")
 13         return zapi
 14 def get_hostgroups(group_name):
 15         return zapi.hostgroup.get(search={"name":group_name },output="extend")        #搜索輸入的組別,提取組id
 16 def get_hosts(groupid):
 17         groupids = [groupid]
 18         return zapi.host.get(groupids=groupids,output="extend")                       #返回該組id 下的全部host 信息
 19 def get_drules():
 20         return zapi.drule.get(output="extend")
 21 def get_templates_by_names(template_names):
 22         return zapi.template.get(filter={"host": template_names})
 23 def create_group(group_name):                                                         #建立組
 24     if not zapi.hostgroup.exists(name=group_name):
 25         zapi.hostgroup.create(name=group_name)
 26 def create_host(group_name,host_name,ip):                                             #建立主機並附加指定模板
 27     groups=get_hostgroups(group_name)
 28     host_name=host_name.lower()
 29     ip_tail=ip.split(".")[-1]
 30     domain = "server-"+ ip_tail +".0." + host_name + ".ustack.in"
 31     for hostgroup in groups:
 32         groupid=hostgroup['groupid']
 33         ip_tail=ip.split(".")[-1]
 34         role = None
 35         for ru in rule:
 36             range = rule[ru]['range']
 37             if "-" in range:
 38                 head = range.split("-")[0]
 39                 tail = range.split("-")[1]
 40                 if int(ip_tail) <= int(tail) and int(ip_tail) >=int(head):
 41                     role = ru
 42             else:
 43                 if ip_tail == range:
 44                     role = ru
 45         template_names = rule[role]['templates']
 46         template_ids = get_templates_by_names(template_names)
 47         print domain,ip,groupid,template_ids
 48         zapi.host.create(host=domain,interfaces=[{
 49             "type":1,
 50             "main":1,
 51             "useip":1,
 52             "ip":ip,
 53             "dns":"",
 54             "port":'10050'
 55         }],groups=[{"groupid":groupid}],templates=template_ids)
 56         print  "Add Successfull!!!!!"
 57         #logging.info("%s,%s,%s,%s Add Successfull!!!!!"%(domain,ip,groupid,template_ids))
 58 def create_macro(group_name,traffic,value):                                           #建立macro,不一樣主機有不一樣的macro
 59     groups=get_hostgroups(group_name)
 60     for group in groups:
 61         hosts=get_hosts(group['groupid'])
 62         for host in hosts:
 63             hostname=host["name"]
 64             hostid=host["hostid"]
 65             if not re.search("^server",hostname):continue
 66             m=re.search("[0-9]+",hostname).group()
 67             if m == "1":continue
 68             if m in ['64','65','66','67']:
 69                 zapi.host.update(hostid=hostid,macros=[{"macro":"{$INP}","value":"35000"},
 70                                                   {"macro":"{$OUP}","value":"35000"},
 71                                                   {"macro":"{$INT}","value":"%s"%traffic},
 72                                                   {"macro":"{$OUT}","value":"%s"%traffic},
 73                                                   {"macro":"{$PDISK}","value":"%s"%value}])
 74             else:
 75                 zapi.host.update(hostid=hostid,macros=[{"macro":"{$PDISK}","value":"%s"%value}])
 76             print hostname ,hostid,m,traffic,value
 77 if __name__ == "__main__":
 78     zapi=login()
 79     region="qn"
 80     host_list=["31","32","35","36","39","40","44","45","46","47","48","49","50","53","54","61","62","63","64","65",
 81                "68","69","70","71","72","73","74","75","76","77","79","80","81","82","83","84","85","86","87","88","89","90","91"]       #添加主機,不建議用discovery
 82     ip_list=host_list
 83     if type(ip_list) == str:
 84         print "%s Must be a list,please checking !!!"%sys.argv[2]
 85         sys.exit()
 86     group_name="Region [%s 0]"% region.upper()
 87     if not zapi.hostgroup.exists(name=group_name):
 88        create_group(group_name)
 89     ip={"qn":"10.4.0."}
 90     if region in ip:
 91         for num in ip_list:
 92             value="20"
 93             traffic="300M"
 94             ipaddress=ip[region]+str(num)
 95             print group_name,region,ipaddress
 96             create_host(group_name,region,ipaddress)                                  #傳參至函數
 97             time.sleep(5)
 98             create_macro(group_name,traffic,value)
 99     else:
100         print "you input region error,please checking"
相關文章
相關標籤/搜索