ホームページ  >  記事  >  バックエンド開発  >  Python で Zabbix-API モニタリングを実装する方法 (コード付き)

Python で Zabbix-API モニタリングを実装する方法 (コード付き)

不言
不言オリジナル
2018-09-17 16:33:432184ブラウズ

この記事の内容は、PythonでZabbix-API監視を実装する方法(コード付き)ですので、ある程度参考になる内容ですので、困っている方は参考にしていただければ幸いです。

運用とメンテナンスを行う友人は、会社の IDC コンピュータ ルームには、棚に置かれたり、棚から取り外されたり、修理のために報告されたり、廃棄されたりするサーバーが頻繁にあることを知っておく必要があります。 。サーバの台数が多いと監視漏れが発生しやすくなります。
大手インターネット企業では、監視システムとCMDB(資産管理システム | 構成管理データベースシステム)を統合しており、新しいマシンが起動されると関連情報がCMDBに記録され、Zabbixはその情報をもとに関連情報を自動的に連携させます。 CMDB. モジュール、監視を追加/削除します。多くの中小企業には資産管理システムがありませんが、監視の責任者として、どの新しいマシンが毎日起動されるかを把握し、それらが Zabbix 監視に追加できるようにする必要があります。
まず最初に、スクリプトのアイデアを説明します。
1) Nmap ツールを使用してネットワーク セグメントをスキャンし、使用されている IP アドレスをスキャンします。
2) Nmap を使用して、スキャンされた IP の 3389 ポートまたは 22 ポートが開いているかどうかを確認すると、どれが Windows マシンでどれが Linux マシンであるかを判断できます。
3) Linux で ssh hostname コマンドを使用して Linux ホスト名を検索します。
4) Windows では、nmblookup -A コマンドを使用して Windows ホスト名を調べます。
5) Python スクリプトを使用してスキャン結果ファイルを読み取り、ホスト名をリストに書き込みます。
6) Zabbix Python API を使用して監視対象ホスト名を呼び出し、リストに書き込みます。
7) 2 つのリストの共通部分を取得し、for ループを使用して、どのホスト名が監視されていないかを決定します。
8) 監視担当者に通知するメールを送信します。

以下に、私が Python で書いたスクリプトを共有します。Scan_machine.sh は、Nmap スキャンについて記述するためにシェルを使用して呼び出したスクリプトです。scan_hostname.log は、Nmap スキャンの結果であり、内部のコンテンツは IP です。ホスト名。

#!/usr/bin/env python#create by:sfzhang 20140820#coding=utf-8import os,sysimport jsonimport urllib2import datetime,timefrom urllib2 import URLError
nmap_cmd = "/shell/machine/scan_machine.sh"def runCmd(command):
    global mail_cmd
    mail_cmd = &#39;&#39;&#39;mail -s "Report on not monitor Hosts of Zabbix" shifeng_zhang88 < /shell/machine/result/result.txt&#39;&#39;&#39;
    return os.system(command)runCmd(nmap_cmd)def nmap_host():
    hostiplst = []
    hostnamelst = []
    f = file(&#39;/shell/machine/result/scan_hostname.log&#39;)
    for line in f.readlines():
        hostip = line.split()[0]
        hostname = line.split()[1]
        hostiplst.append(hostip)
        hostnamelst.append(hostname)
    hostnamelst.sort()
    #print hostiplst
    return hostnamelst
    f.close()def zabbix_host():
    zabbixhostlst= []
    #based url and required header
    url = "http://192.168.161.128/api_jsonrpc.php"
    header = {"Content-Type": "application/json"}
    #request json
    data = json.dumps(
    {  
    "jsonrpc": "2.0",
      "method": "host.get",
      "params":{
          "output":["hostid","name"],
         "filter":{"host":""}
    },    
    #auth id
    "auth":"Zabbix Auth ID",
    "id": 1,
    })
    #create request object
    request = urllib2.Request(url,data)
    for key in header:    
    request.add_header(key,header[key])
    #get host list
    try:
    result = urllib2.urlopen(request)
    except URLError as e:
    print "The server could not fulfill the request.",e.reason    else:
        reponse = json.loads(result.read())
    result.close()
    #print "Number of Hosts:",len(reponse[&#39;result&#39;])
    for host in reponse[&#39;result&#39;]:
            #print "Host ID:",host[&#39;hostid&#39;],"Host Name:",host[&#39;name&#39;]
            zbxhosts=host[&#39;name&#39;]
            zabbixhostlst.append(zbxhosts)
        zabbixhostlst.sort()
        return zabbixhostlst    def main():
    nmaphostlst = nmap_host()  
    zbxhostlst = zabbix_host()  
    diff = list(set(nmaphostlst) ^ set(zbxhostlst))  
    content = "\n"
    nomonitorlst = [] 
    if len(diff) != 0:  
        for host in diff:  
            if host in nmaphostlst:  
                nomonitorlst.append(host)
                
    else:  
        sys.exit()
    #print zbxhostlst
    string = &#39;\n&#39;.join(nomonitorlst)
    f = file(&#39;/shell/machine/result/result.txt&#39;,&#39;w&#39;)
    f.write(string)
    f.flush()
    f.close()
    runCmd(mail_cmd)if __name__ == "__main__":  
    main()

スクリプトを crontab に追加すると、各ホストは監視されていないホストに関する情報を受け取るようになります。

概要:

1) Zabbix API関連の情報については、公式の詳細を確認できます。

2) このスクリプトにより、どのホストが監視されていないのかを知ることができます。

以上がPython で Zabbix-API モニタリングを実装する方法 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。