zabbix 二次開發之調用api接口獲取歷史數據

     前面一篇寫了數據同步和模板綁定,zabbix其實能做的事還蠻多。

    zabbix提供了一個非常好的前端展示頁面,但是我們總覺得不太好看;我們可以進一步調用他的api通過獲取每一個監控項的歷史數據,然後打到我們的監控平臺上;主流的有rrdtool方式和highcharts方式;rrdtool略顯複雜,還要學習rrdtool之類的幾個聚合方式。相對而言我更喜歡highcharts的方式,出圖簡便,只需要提供數據和時間戳組成的json數據就夠了,之前也介紹過具體;那麼這裏我們先拿出我們想要的數據。


    zabbix的api讀取方式如下:

    1、通過post方式傳入用戶名密碼獲取token祕鑰。

    2、獲取所有主機的hostid和name。

    3、通過hostid獲取每個監控項目的item和對應的key。

    4、通過傳入的itemid獲取相對應的歷史數據。


以上步驟都是需要傳入token才能執行操作,pipy已經提供了第三方插件,讓我們省去了這一部分的操作;具體參考:https://pypi.python.org/pypi/zabbix-client/0.1.1;zabbix api文檔請參考官方文檔。想多寫點代碼可以看小馬哥的博客:http://www.xiaomastack.com/2014/08/17/rrdtool-1/。



1、獲取主機的代碼:

    def get_hosts(self):
        data = {
        "output": ["hostid", "name"]
        }
        ret = self.zb.host.get(**data)
        return ret

執行結果:

wKiom1bs2ZeQ8h4-AAAWp5vQUCg265.png


2、獲取每個主機對應的監控項和監控項具體名稱:

     def item_get(self, hostids="10109"):
            data = {
           "output":["itemids","key_"],
           "hostids": hostids,
            }
            ret = self.zb.item.get(**data)
            return ret

執行結果:

wKiom1bs2kCR8dxUAACJFCe8cpY529.png


3、獲取對應的歷史數據:

    def history_get(self, itemid, i ,limit=10):
        data = { "output": "extend",
          "history": i,
          "itemids": itemid,
          "sortfield": "clock",
          "sortorder": "DESC",
          "limit": limit
          }
        ret = self.zb.history.get(**data)
        return ret


wKiom1bs2rCxd8hfAABJdtliRu4984.png


具體代碼:

from zabbix_client import ZabbixServerProxy
class Zabbix():
    def __init__(self):
        self.zb = ZabbixServerProxy("http://192.168.10.100/zabbix")
        self.zb.user.login(user="Admin", password="zabbix")
    def get_hosts(self):
        data = {
        "output": ["hostid", "name"]
        }
        ret = self.zb.host.get(**data)
        return ret
    def item_get(self, hostids="10109"):
        data = {
       "output":["itemids","key_"],
       "hostids": hostids,
        }
        ret = self.zb.item.get(**data)
        return ret
    def history_get(self, itemid, i ,limit=10):
    ###history參數中有0,1,2,3,4表示:float,string,log,integer,text
        data = { "output": "extend",
          "history": i,
          "itemids": itemid,
          "sortfield": "clock",
          "sortorder": "DESC",
          "limit": limit
          }
        ret = self.zb.history.get(**data)
        return ret
if __name__ == "__main__":
    zabbix_server = Zabbix()
#    print zabbix_server.get_hosts()
    print zabbix_server.history_get("24519",3)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章