国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

調(diào)用ZABBIX的API獲取節(jié)點(diǎn)主機(jī)信息小記

Maxiye / 1347人閱讀

摘要:因為是獲取相關(guān)信息,所以使用這個函數(shù)。這里需要說明的是,我前面獲取的是所有節(jié)點(diǎn)主機(jī)的信息,而我是每獲取完一個節(jié)點(diǎn)主機(jī)就會錄入數(shù)據(jù)庫,所以采用了循環(huán)遍歷所有節(jié)點(diǎn)主機(jī)信息。就指當(dāng)前的主機(jī)信息。

需求背景

在ZABBIX服務(wù)端可以看到各個節(jié)點(diǎn)客戶端主機(jī)的詳細(xì)信息,但是觀察各個節(jié)點(diǎn)時,同一時刻只能觀察到一個,如下圖所示。

現(xiàn)在想將所有節(jié)點(diǎn)主機(jī)的一些信息通過腳本調(diào)用API讀取出來,錄入到數(shù)據(jù)庫,以供其他模塊使用,查了一些相關(guān)資料,將大概思路記錄下來。

實(shí)現(xiàn)方案

ZABBIX API的官方網(wǎng)址:https://www.zabbix.com/docume...
Python的zabbix-api網(wǎng)址:https://github.com/gescheit/s...
使用zabbix-api這個python第三方庫讓開發(fā)變得更為簡潔。

1、安裝zabbix-api
首先要安裝這個第三方庫,一個命令就可以搞定:

# pip install zabbix-api

這里使用pip進(jìn)行安裝,沒有安裝pip的童鞋請自行百度安裝pip

2、獲取各個節(jié)點(diǎn)主機(jī)的信息
(1)首先要連接并登錄zabbix服務(wù)端,兩條語句就可以搞定(開源是多么重要呀)

#!/usr/bin/env python
#coding=utf-8

from zabbix_api import ZabbixAPI

server = "your server address"
username = "your user name"
password = "your password"

zapi = ZabbixAPI(server=server, path="", log_level=6)
zapi.login(username, password)

看看,是不是很簡單,當(dāng)然也可以自己寫,有興趣的可以看看相關(guān)資料。此時運(yùn)行一下,可以看到相關(guān)打印:

20: url: http://xxxxx/zabbix//api_jsonrpc.php
10: Trying to login with "xxxxx":"md5(xxxxx)"
10: json_obj: {"params": {"password": "xxxxx", "user": "xxxxx"}, "jsonrpc": "2.0", "method": "user.login", "id": 0}
20: Sending: {"params": {"password": "xxxxx", "user": "xxxxx"}, "jsonrpc": "2.0", "method": "user.login", "id": 0}
10: Sending headers: {"Content-Type": "application/json-rpc", "User-Agent": "python/zabbix_api"}
20: Response Code: 200
10: Response Body: {u"jsonrpc": u"2.0", u"result": u"271eca6ecbd4640c33f822cfaea4f0b5", u"id": 0}

Response Code為200,應(yīng)該都知道,表示請求成功了.

(2)獲取節(jié)點(diǎn)主機(jī)
由于我的節(jié)點(diǎn)主機(jī)都在同一"Host groups"下面,因此我一次性獲取全部節(jié)點(diǎn)主機(jī)的信息。好了,這是需要將API文檔拿出來查閱。因為是獲取相關(guān)信息,所以使用hostgroup.get這個API函數(shù)。這個API函數(shù)說明在這里:https://www.zabbix.com/docume...
現(xiàn)在簡單的貼下一代碼:

hostgroup_name = "your host group name"

hostids = zapi.hostgroup.get(
                              {
                                  "filter": 
                                  {
                                      "name": hostgroup_name
                                  }, 
                                  "selectHosts": ["hostid", "host"]
                              }
                             )
print json.dumps(hostids, indent=4)

在這個json語句中,有個關(guān)鍵參數(shù)filter,查閱官方文檔:

這里只返回名為"hostgroup_name",即你自己的hostgroup分組下面的所有主機(jī)。我這里只返回這些主機(jī)的"hostid"和"host"。
注意,zapi.hostgroup.get返回的是python數(shù)據(jù)結(jié)構(gòu),為了方便調(diào)試代碼,print時注意把python數(shù)據(jù)結(jié)構(gòu)在轉(zhuǎn)化為json文件,打印信息如下。

10: json_obj: {"params": {"filter": {"name": "xxxxx"}, "selectHosts": ["hostid", "host"]}, "jsonrpc": "2.0", "method": "hostgroup.get", "auth": u"af7401886734c31defdface109ed171e", "id": 1}
20: Sending: {"params": {"filter": {"name": "xxxxx"}, "selectHosts": ["hostid", "host"]}, "jsonrpc": "2.0", "method": "hostgroup.get", "auth": "af7401886734c31defdface109ed171e", "id": 1}
10: Sending headers: {"Content-Type": "application/json-rpc", "User-Agent": "python/zabbix_api"}
20: Response Code: 200
10: Response Body: {u"jsonrpc": u"2.0", u"result": [{u"hosts": [{u"host": u"pc00000011.mknode.cn", u"hostid": u"10274"}, {u"host": u"pc00000013.mknode.cn", u"hostid": u"10275"}, {u"host": u"pc00000015.mknode.cn", u"hostid": u"10276"}, {u"host": u"pc00000012.mknode.cn", u"hostid": u"10277"}, {u"host": u"pc00000016.mknode.cn", u"hostid": u"10278"},  u"internal": u"0", u"flags": u"0", u"groupid": u"15", u"name": u"xxxxx"}], u"id": 1}
[
    {
        "hosts": [
            {
                "host": "pc00000011.mknode.cn", 
                "hostid": "10274"
            }, 
            {
                "host": "pc00000013.mknode.cn", 
                "hostid": "10275"
            }, 
            {
                "host": "pc00000015.mknode.cn", 
                "hostid": "10276"
            }, 
            {
                "host": "pc00000012.mknode.cn", 
                "hostid": "10277"
            }, 
            {
                "host": "pc00000016.mknode.cn", 
                "hostid": "10278"
            }, 
        ], 
        "internal": "0", 
        "flags": "0", 
        "groupid": "15", 
        "name": "xxxxx"
    }
]

關(guān)于json.dumps()、json.loads():
json.dumps():dict轉(zhuǎn)為str
json.loads():str轉(zhuǎn)為dict

(3)獲取節(jié)點(diǎn)主機(jī)具體信息
這個就太豐富啦,具體問題看具體API,這里以查看內(nèi)存剩余容量為例吧。

memfree_get = zapi.item.get(
                             {
                                "hostids": [host_cnt["hostid"]],
                                "filter": {
                                            "key_": ["vm.memory.size[available]"]
                                             # "name": ["Available memory"]
            }
    })
    memfree_get_last = memfree_get[0]["lastvalue"]
    print json.dumps(memfree_get,indent=4)

查看打印信息:

10: Response Body: {u"jsonrpc": u"2.0", u"result": [{u"itemid": u"29401", u"username": u"", u"snmpv3_contextname": u"", u"inventory_link": u"0", u"mtime": u"0", u"authtype": u"0", u"trends": u"365d", u"snmpv3_authpassphrase": u"", u"snmp_oid": u"", u"snmpv3_securitylevel": u"0", u"port": u"", u"lastns": u"31272984", u"master_itemid": u"0", u"logtimefmt": u"", u"jmx_endpoint": u"", u"delay": u"1m", u"publickey": u"", u"state": u"0", u"params": u"", u"snmpv3_securityname": u"", u"formula": u"", u"type": u"7", u"snmpv3_authprotocol": u"0", u"prevvalue": u"3426082816", u"status": u"0", u"lastlogsize": u"0", u"lastclock": u"1523192709", u"snmp_community": u"", u"description": u"Available memory is defined as free+cached+buffers memory.", u"evaltype": u"0", u"trapper_hosts": u"", u"lastvalue": u"3425476608", u"units": u"B", u"value_type": u"3", u"templateid": u"22181", u"snmpv3_privprotocol": u"0", u"password": u"", u"interfaceid": u"0", u"snmpv3_privpassphrase": u"", u"hostid": u"10276", u"key_": u"vm.memory.size[available]", u"name": u"Available memory", u"privatekey": u"", u"lifetime": u"0", u"valuemapid": u"0", u"flags": u"0", u"error": u"", u"ipmi_sensor": u"", u"history": u"1w"}], u"id": 19}
[
    {
        "itemid": "29401", 
        "username": "", 
        "snmpv3_contextname": "", 
        "inventory_link": "0", 
        "mtime": "0", 
        "authtype": "0", 
        "trends": "365d", 
        "snmpv3_authpassphrase": "", 
        "snmp_oid": "", 
        "snmpv3_securitylevel": "0", 
        "port": "", 
        "lastns": "31272984", 
        "master_itemid": "0", 
        "logtimefmt": "", 
        "jmx_endpoint": "", 
        "delay": "1m", 
        "publickey": "", 
        "state": "0", 
        "params": "", 
        "snmpv3_securityname": "", 
        "formula": "", 
        "type": "7", 
        "snmpv3_authprotocol": "0", 
        "prevvalue": "3426082816", 
        "status": "0", 
        "lastlogsize": "0", 
        "lastclock": "1523192709", 
        "snmp_community": "", 
        "description": "Available memory is defined as free+cached+buffers memory.", 
        "evaltype": "0", 
        "trapper_hosts": "", 
        "lastvalue": "3425476608", 
        "units": "B", 
        "value_type": "3", 
        "templateid": "22181", 
        "snmpv3_privprotocol": "0", 
        "password": "", 
        "interfaceid": "0", 
        "snmpv3_privpassphrase": "", 
        "hostid": "10276", 
        "key_": "vm.memory.size[available]", 
        "name": "Available memory", 
        "privatekey": "", 
        "lifetime": "0", 
        "valuemapid": "0", 
        "flags": "0", 
        "error": "", 
        "ipmi_sensor": "", 
        "history": "1w"
    }
]

這次以json格式打印的優(yōu)勢就凸顯出來了,”Response Body“為未進(jìn)行json轉(zhuǎn)碼前的python數(shù)據(jù)結(jié)構(gòu)。如果不知道剩余內(nèi)存容量該怎么從memfree_get中取出,可以從打印信息中查看,很顯然,字段"lastvalue"就是最新剩余內(nèi)存值:

memfree_get_last = memfree_get[0]["lastvalue"]

這樣我們就將該值取出,錄入數(shù)據(jù)庫就OK了,獲取其他信息也是同樣的道理。

這里需要說明的是,我前面獲取的是所有節(jié)點(diǎn)主機(jī)的信息,而我是每獲取完一個節(jié)點(diǎn)主機(jī)就會錄入數(shù)據(jù)庫,所以采用了循環(huán)遍歷所有節(jié)點(diǎn)主機(jī)信息。"hostids": [host_cnt["hostid"]]就指當(dāng)前的主機(jī)信息。

總結(jié)

1、有問題,看文檔
2、合理利用第三方庫,讓開發(fā)變得更加高效

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41479.html

相關(guān)文章

  • 運(yùn)維 2.0 時代:數(shù)據(jù)聚合和分組

    摘要:靈活查詢,聚合分組并存除開單純的聚合和分組,還支持聚合和分組的復(fù)合查詢。所以,與會聚合為一條曲線,而和的關(guān)系則是分組的關(guān)系。當(dāng)然,的功能在未來,還遠(yuǎn)遠(yuǎn)不止這些,高效運(yùn)維的時代才剛剛開啟。 運(yùn)維 2.0 時代 運(yùn)維 2.0 是指,從技術(shù)運(yùn)維升級為服務(wù)運(yùn)維,向公司提供可依賴的專業(yè)服務(wù)。運(yùn)維 2.0 強(qiáng)調(diào)服務(wù)交付能力,而不是技術(shù)能力,需求可依賴、懂業(yè)務(wù)、服務(wù)化的專業(yè)運(yùn)維。 為了了解運(yùn)維 2....

    skinner 評論0 收藏0
  • 容器監(jiān)控實(shí)踐—Docker原生

    摘要:可以指定一個已停止的容器,但是停止的容器不返回任何數(shù)據(jù)。但它并不意味著你的每個容器都能訪問那么多的內(nèi)存默認(rèn)時命令會每隔秒鐘刷新一次,如果只看當(dāng)前狀態(tài)指定查看某個容器的資源可以指定名稱或本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見 前言 傳統(tǒng)虛機(jī)監(jiān)控一般采用類似Zabbix的方案,但容器出現(xiàn)之后,再使用Zabbix agent來采集數(shù)據(jù)的話就顯得有些吃力了,如果每個容器都像OS那樣監(jiān)控,則me...

    mushang 評論0 收藏0
  • 容器監(jiān)控實(shí)踐—Docker原生

    摘要:可以指定一個已停止的容器,但是停止的容器不返回任何數(shù)據(jù)。但它并不意味著你的每個容器都能訪問那么多的內(nèi)存默認(rèn)時命令會每隔秒鐘刷新一次,如果只看當(dāng)前狀態(tài)指定查看某個容器的資源可以指定名稱或本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見 前言 傳統(tǒng)虛機(jī)監(jiān)控一般采用類似Zabbix的方案,但容器出現(xiàn)之后,再使用Zabbix agent來采集數(shù)據(jù)的話就顯得有些吃力了,如果每個容器都像OS那樣監(jiān)控,則me...

    muddyway 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<