pyzabbix是zabbixapi的第三方python包裝。從網上莫名其妙地搞到了乙份原始碼,看了一下之後發現實現方法還蠻巧妙的,感覺挺好的就記下來了。那些個原始碼本身其實也是乙個個單獨操作的指令碼,可以用命令列引數直接操作。pyzbx用了json來encode和decode請求資料和返回資料,並且用了urllib2中的一些方法來進行通訊
frompyzabbiximportzabbixapi
zapi=zabbixapi("server")#server是指zabbixweb介面的url,比如"username","password")#指的是zabbix系統裡的使用者名稱和密碼,不是伺服器本身的使用者名稱和密碼
之後就可以用zapi這個物件來實現程式和zabbixapi之間的通訊了。
官方文件位址:
zapi主要可以用的方法:
zapi.host.get , zapi.host.create , zapi.hostgroup.get , zapi.host.update , ........等等。可以看到,這些方法和api的分類是一致的,這是寫了這個pyzabbix模組的人包裝得很巧妙的おかげ,用起來就方便很多了。 此外,這些方法大多都支援string/list的雙重引數格式。意思就是說,當你想操作多次,但是又不想一條一條語句寫的時候,可以直接傳乙個list進去,它會自動給你解析出來的。
■ 使用方法:
zapi.hostgroup.get(filter=,output=[『name『,『groupid『],selecthosts=[『name『,『hostid『])
類似這樣的語句。乙個方法對應了官方api說明中的一種操作,這種對應關係很好懂,比如hostgroup.get就是獲取主機組的資訊,host.update就是更新主機的一些資訊等等。至於每個方法的引數,就是和這個方法對應的那個api操作裡規定的請求json串有關了。看幾個請求串和方法引數的對應就會有感覺了= =。。欄位是引數名,而字段值是引數值。
比如詳細解釋一下上面這條語句,它的意思就是
我要獲取一些主機組的資訊。
這個(些)主機組的groupid是***(filter的功能,如果不寫filter,系統就預設把所有組的資訊都返回給你了,當然通過指定groupid過濾出來的組肯定只有乙個咯,但是返回來的json串仍然是個列表的形式,即使只有一項,這個後面還會說到)
我要得到的是這個(些)組的name和groupid欄位(output的功能,output一定得是乙個列表,可以是空,但是無論如何至少一定會返回groupid這個字段。如果寫[『extend『]則是把所有欄位的資訊都返回)
此外我還要獲取一些這個主機組裡主機的資訊,那麼可以用selecthosts這個引數,列表中的值指定了我想知道的這些主機哪些欄位的資訊。
最後返回回來的json可能是這樣的:[,
],"groupid":"10",
"name":"主機組1"}]
*不要問為什麼hosts不是寫在output裡的乙個引數= =。它的api就是這麼設計的,即使是寫json請求串也是要把selecthosts和output分開兩個欄位寫的。。
このように,利用這類包裝好的方法來獲取json串,然後從json串裡解析出我想要的資訊就是一般的做法了。get基本上就是這樣了,其他的什麼create啦,update啦,主要還是要結合官方給出的請求串的格式以及可用字段,然後思考一下我的引數該怎麼寫,測試一下就好了。總體來時pyzabbix並不難用,只是zabbixapi本身有些邏輯比較異於常理,需要適應適應。。
■ 以下是一些我在使用過程中碰到的一些需要注意的地方:
● 本身引數不存在,或者引數的值不合法的情況下(比如在上面那條語句中加個testpara="testvalue"之類的或者把output寫成[『name『,『groupid『,『testitem『]),zabbixapi不會報錯,而是預設忽略這個引數,這一點比較坑,需要注意的。
● 主機有乙個屬性是status,這個屬性可以在host.update中使用來實現通過api enable和disable某個主機的操作。但是需要注意的是這個status的值是u『0『或者u『1『,不是int也不是str,是unicode
● host.update的時候在確定要update哪台主機的時候用的不是filter引數(事實上可能出了get方法以外,其他的用的都不是filter),而是直接有個hostid引數來指定乙個hostid,從而確定一台特定的主機。這麼做的依據是因為hostid是主機與生俱來且唯一的,可以這麼做。。
●host在create的時候可以加上macros引數來新增巨集。比如macros=[『,『value『:『frankid『},『,『value『:『test_account『}]
Zabbix api的使用方法(python版)
時間2013 12 21 作者 itnihao 郵箱 itnihao qq.com 部落格 如需引用,請註明以上資訊,謝謝合作 zabbix api 具有重要的功能 為第三方呼叫 zabbix 批量操作提供可程式設計介面 從而輕鬆的用於自己的業務系統,運維系統相整合。zabbix api 是基於前端...
控制項的包裝
控制項的包裝,就是把標準控制項包裝一層,是復合控制項的一種特殊形式 比如,比較常見的是對textbox的包裝 public mjtextbox usercontrol 比如 textbox不可調整高度 不可設定padding,所以在布局時會產生困難。namespace winform控制項的包裝 p...
包裝類 包裝類物件 包裝類的型別轉換功能 已完結
在敘述前首先區分三者間的關係 因為在複習過程中,發現自己傻傻分不清 1.包裝類 js提供了三個包裝類 boolean string number 這兒不是基本資料型別中的boolean string number。上述是包裝類,是物件 2.包裝 類 物件 使用new boolean string n...