【Python】 zabbixAPI的封裝pyzabbix

來源:互聯網
上載者:User

標籤:命令列參數   nbsp   unicode   預設   black   filter   sel   系統   程式   

pyzabbix

  pyzabbix是zabbixAPI的第三方python封裝。從網上莫名其妙地搞到了一份源碼,看了一下之後發現實現方法還蠻巧妙的,感覺挺好的就記下來了。那些個源碼本身其實也是一個個單獨操作的指令碼,可以用命令列參數直接操作。pyzbx用了json來encode和decode請求資料和返回資料,並且用了urllib2中的一些方法來進行通訊

  如果不是直接用它的指令碼,而是自己定製相關程式的話基本上只用到ZabbixAPI這個類:

  

from pyzabbix import ZabbixAPIzapi = ZabbixAPI("server")    #server是指zabbixweb介面的url,比如http://192.168.1.101/zabbixzapi.login("username","password")    #指的是zabbix系統裡的使用者名稱和密碼,不是伺服器本身的使用者名稱和密碼

  之後就可以用zapi這個對象來實現程式和zabbixAPI之間的通訊了。

  官方文檔地址:http://www.zabbix.com/documentation/2.4/manual/api

  zapi主要可以用的方法:

    zapi.host.get , zapi.host.create , zapi.hostgroup.get , zapi.host.update , ........等等。可以看到,這些方法和API的分類是一致的,這是寫了這個pyzabbix模組的人封裝得很巧妙的おかげ,用起來就方便很多了。 此外,這些方法大多都支援string/list的雙重參數格式。意思就是說,當你想操作多次,但是又不想一條一條語句寫的時候,可以直接傳一個list進去,它會自動給你解析出來的。

■  使用方法:

zapi.hostgroup.get(filter={‘groupid‘:‘xxx‘},output=[‘name‘,‘groupid‘],selectHosts=[‘name‘,‘hostid‘])

  類似這樣的語句。一個方法對應了官方API說明中的一種操作,這種對應關係很好懂,比如hostgroup.get就是擷取主機群組的資訊,host.update就是更新主機的一些資訊等等。至於每個方法的參數,就是和這個方法對應的那個API操作裡規定的請求json串有關了。看幾個請求串和方法參數的對應就會有感覺了= =。。欄位是參數名,而欄位值是參數值。

  比如詳細解釋一下上面這條語句,它的意思就是

    我要擷取一些主機群組的資訊。

    這個(些)主機群組的groupid是xxx(filter的功能,如果不寫filter,系統就預設把所有組的資訊都返回給你了,當然通過指定groupid過濾出來的組肯定只有一個咯,但是返回來的json串仍然是個列表的形式,即使只有一項,這個後面還會說到)

    我要得到的是這個(些)組的name和groupid欄位(output的功能,output一定得是一個列表,可以是空,但是無論如何至少一定會返回groupid這個欄位。如果寫[‘extend‘]則是把所有欄位的資訊都返回)

    此外我還要擷取一些這個主機群組裡主機的資訊,那麼可以用selectHosts這個參數,列表中的值指定了我想知道的這些主機哪些欄位的資訊。

  最後返回回來的json可能是這樣的:

[    {        "hosts": [            {                "hostid": "10001",                 "name": "主機1"            },             {                "hostid": "10002",                 "name": "主機2"            }        ],         "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=[{‘macro‘:‘{$INSTANCE}‘,‘value‘:‘frankid‘},{‘macro‘:‘{$ACCOUNT}‘,‘value‘:‘test_account‘}]

  ●未完待續。。。

【Python】 zabbixAPI的封裝pyzabbix

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.