天天看點

探索Zabbix API:企業監控管理工具

作者:新钛雲服

Zabbix是一種流行的開源監控解決方案,其強大的API功能為使用者提供了靈活且可擴充的監控管理能力。本文将介紹Zabbix API的基本概念和用法,以及如何利用API來簡化監控配置、資料擷取和自動化任務等方面的工作。

在現代IT環境中,實時監控和管理是確定系統穩定性和性能的關鍵。Zabbix作為一種功能強大的監控解決方案,廣泛應用于各行各業的IT基礎設施。當手動配置和管理大規模的監控系統可能變得繁瑣且耗時,就是Zabbix API發揮作用的時候了。

01什麼是Zabbix API?

Zabbix API是一組基于HTTP/HTTPS的RESTful接口,用于與Zabbix伺服器進行通信。它提供了對Zabbix功能的完全通路權限,允許使用者以程式設計方式執行各種操作,如建立和修改主機、配置觸發器和報警、擷取曆史資料等。

02API身份驗證和權限控制

為了確定安全性,Zabbix API采用了基于令牌的身份驗證機制。使用者需要使用有效的API令牌進行身份驗證,并且可以根據需要為不同的API使用者配置設定不同的權限。這種靈活的權限控制機制使得使用者可以精确地控制API的通路範圍和權限級别。

03通過建立主機來展示基本API操作

通過Zabbix API,使用者可以執行各種基本操作來管理監控系統。我們通過建立主機這個API方法舉例,來展示調用流程。

第一步 擷取token

首先,需要通過API進行身份驗證,擷取通路令牌(API token)。

apiurl = "http://192.168.1.1:8080/api_jsonrpc.php"
header = {"Content-Type":"application/json"}
user="Admin"
password="123456"
def gettoken():
    data = {"jsonrpc": "2.0",
                "method": "user.login",
                "params": {
                    "user": user,
                    "password": password
                },
                "id": 1,
                "auth": None
            }
    auth=requests.post(url=apiurl,headers=header,json=data)
    return json.loads(auth.content)['result']           

這段代碼定義了一個gettoken的函數,用于通過Zabbix API進行身份驗證并擷取通路令牌(token)。

1. data是一個包含API請求參數的字典,包括以下字段:

a. "jsonrpc":指定JSON-RPC版本為2.0,這是Zabbix API所使用的版本。

b. "method":指定要調用的API方法,這裡是user.login,用于進行使用者身份驗證。

c. "params":指定API方法的參數,包括user和password,分别為Zabbix的使用者名和密碼。

d. "id":為API請求配置設定一個唯一的辨別符,用于識别請求。

e. "auth":設定為None,因為我們還沒有進行身份驗證。

f. auth是通過requests.post()發送POST請求來執行API調用。它使用以下參數:

i. url:指定API的URL位址,即Zabbix伺服器的API接口URL。

ii. headers:設定請求頭,這裡是header變量,可能包含一些必要的HTTP頭部資訊。

iii. json:将請求資料以JSON格式發送給API,這裡是data字典。

g. json.loads(auth.content)['result']從API響應中提取傳回的通路令牌。

h. auth.content擷取API響應的内容,然後使用

i. json.loads()将其解析為Python對象(字典),再通過['result']擷取通路令牌的值。

第二步 建立和配置主機

通過API可以動态建立和配置監控主機,包括主機名稱、IP位址等資訊。

建立主機需要搭配一張excel表使用。當我們需要批量建立主機的時候,如果有一千台,那使用excel表格統一格式是最好的。

表格格式如下:

探索Zabbix API:企業監控管理工具

代碼如下:

excel = '/path/host_list.xls'
def read_xml(auth,excel):
    book = xlrd.open_workbook(excel)
    # 擷取第一個sheet頁
    sheet1 = book.sheets()[0]
    # 擷取總行數
    rows = sheet1.nrows
    # 擷取總列數
    cols = sheet1.ncols
    tmp_list = []
    for i in range(1, rows):
        #循環操作
        tmp_list = []
        tmp_dic = {}
        for j in range(1, cols):
            # 循環操作
            ctype = sheet1.cell(i, j).ctype
            cell = sheet1.cell_value(i, j)
            if ctype == 2 and cell % 1 == 0:  # 如果是整形
                cell = int(cell)
            elif ctype == 3:#如果是日期型
                # 轉成datetime對象
                date = datetime(*xldate_as_tuple(cell, 0))
                cell = date.strftime('%Y/%d/%m %H:%M:%S')
            elif ctype == 4: #如果是boolean型
                cell = True if cell == 1 else False
            # print (cell)


            tmp_list.append(cell)
        print(tmp_list)


        data = {
            "jsonrpc": "2.0",
            "method": "host.create",
            "params": {
                "name" : tmp_list[0],
                "host": tmp_list[1],
                "interfaces": [
                    {
                        "type": 1,
                        "main": 1,
                        "useip": 1,
                        # "name" : tmp_list[0],
                        "ip": tmp_list[2],
                        "dns": "",
                        "port": "10050"
                    }
                ],
                "groups": [
                    {
                "groupid": tmp_list[4]
                    }
                ],


                "templates": [
                    {
                "templateid": tmp_list[3]
                    }
                ],
            },
            "auth": auth,
            "id": 1
            }
        # print(data)
        response = requests.post(url=ApiUrl,headers=header,json=data,timeout=2)
        result = response.json()           

這段代碼的目的是從Excel檔案中讀取每行的資料,并使用Zabbix API建立主機。對于每一行的資料,它建構一個包含主機資訊的字典,然後通過API請求發送給Zabbix伺服器來建立主機。

1. 這段代碼是一個函數read_xml(auth, excel),用于從Excel檔案中讀取資料并使用Zabbix API建立主機。

2. auth是之前通過Zabbix API獲得的通路令牌,用于進行API請求的身份驗證。

3. excel是要讀取資料的Excel檔案的路徑。

以下是代碼的詳細資訊:

1. excel表格操作段

a. book = xlrd.open_workbook(excel):使用xlrd庫打開指定的Excel檔案。

b. sheet1 = book.sheets()[0]:擷取Excel檔案中的第一個sheet頁。

c. rows = sheet1.nrows:擷取sheet頁的總行數。

d. cols = sheet1.ncols:擷取sheet頁的總列數。

e. tmp_list = []:建立一個空清單,用于存儲每行資料。

f. for i in range(1, rows)::周遊從第二行開始的每一行資料,跳過标題行。

g. tmp_list = []:在處理每一行資料之前,清空tmp_list清單。

h. tmp_dic = {}:建立一個空字典,用于存儲每個單元格的資料。

i. for j in range(1, cols)::周遊每一行中除去第一列的每個單元格。

j. ctype = sheet1.cell(i, j).ctype:擷取單元格的資料類型。

k. cell = sheet1.cell_value(i, j):擷取單元格的值。

l. 根據不同的資料類型進行适當的處理:如果是整型,将其轉換為整數。如果是日期型,将其轉換為特定格式的日期字元串。如果是布爾型,将其轉換為True或False。否則,保留原始值。

m. tmp_list.append(cell):将處理後的值添加到tmp_list清單中。

2. zabbix API data資料請求段

a. data = {...}:根據每行資料建構一個包含主機資訊的字典。

b. "interfaces"字段用于指定主機的接口配置,它是一個包含接口資訊的清單。

c. "type"表示接口類型,這裡的值為1,表示使用IP位址進行通信。

d. "main"表示是否為主要接口,這裡的值為1,表示是主要接口。

e. "useip"表示使用IP位址進行通信,這裡的值為1,表示使用IP位址。

f. "ip"表示主機的IP位址,它是從Excel檔案中讀取的tmp_list[2]值。

g. "dns"表示主機的DNS名稱,這裡為空字元串。

h. "port"表示與主機通信的端口,這裡的值為"10050"。

i. "groups"字段用于指定主機所屬的分組,它是一個包含分組資訊的清單。

j. "groupid"表示分組的ID,它是從Excel檔案中讀取的tmp_list[4]值。

k. "templates"字段用于指定應用于主機的模闆,它是一個包含模闆資訊的清單。

l. "templateid"表示模闆的ID,它是從Excel檔案中讀取的tmp_list[3]值。

3. 處理傳回值段

a. response = requests.post(url=ApiUrl,headers=header,json=data,timeout=2):使用requests.post()方法發送POST請求來建立主機,其中包括以下參數:

b. url:指定Zabbix API的URL位址。

c. headers:設定請求頭,可能包含一些必要的HTTP頭部資訊。

d. json:将請求資料以JSON格式發送給API,這裡是data字典。

e. timeout:設定請求逾時時間。

f. result = response.json():将API響應解析為JSON格式,并将結果存儲在result變量中。

代碼執行,添加主機成功會傳回Successfully:

探索Zabbix API:企業監控管理工具

代碼執行,添加主機失敗會傳回Failed:

探索Zabbix API:企業監控管理工具

04拓展使用方法

資料擷取和監控:使用API可以擷取實時的監控資料,如CPU使用率、記憶體使用率等,以及曆史資料的查詢。

報警和通知:使用API可以配置報警規則和通知方式,使系統能夠及時響應異常情況并通知相關人員。

自動化任務:結合API和其他腳本或工具,可以實作監控系統的自動化任務,如自動發現和注冊主機、配置模闆等。

05實際應用案例

Zabbix API的應用非常廣泛,以下是一些實際應用案例:

自動化部署:通過API可以實作監控系統的自動化部署和配置,減少了手動操作的工作量和錯誤率。

多租戶管理:使用API可以為不同的租戶或使用者提供獨立的監控環境,并根據需要進行權限控制。

第三方內建:許多第三方工具和系統可以通過API與Zabbix內建,實作自定義的監控和管理功能。

報表生成:通過API可以擷取監控資料并生成各種格式的報表,友善系統管理者和決策者進行資料分析和決策。

06結論

Zabbix API為使用者提供了一個強大而靈活的工具,可以簡化監控系統的配置和管理工作。它的應用範圍廣泛,可以用于自動化部署、第三方內建、報表制作等方面。通過利用Zabbix API,可以更高效地管理和監控我們的IT基礎設施,提升系統的可靠性和性能。

如需完整代碼,可以背景留言擷取

繼續閱讀