Home > Backend Development > Python Tutorial > How to implement Zabbix-API monitoring in Python (with code)

How to implement Zabbix-API monitoring in Python (with code)

不言
Release: 2018-09-17 16:33:43
Original
2200 people have browsed it

The content of this article is about how to implement Zabbix-API monitoring in Python (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Friends who do operation and maintenance should know that the company's IDC computer room often has servers that are put on the shelf, taken off the shelf, reported for repair, and scrapped. If there are a large number of servers, it is easy to cause monitoring omissions.
Large Internet companies integrate monitoring systems and CMDB (asset management system | configuration management database system). When a new machine is launched, relevant information will be recorded in the CMDB. Zabbix will automatically link related information based on the information in the CMDB. Module, add|remove monitoring. Many small companies do not have an asset management system, but as the person in charge of monitoring, they should know which new machines have been launched every day and ensure that they can be added to Zabbix monitoring.
First of all, let me tell you the script idea:
1) Use the Nmap tool to scan the network segment and scan out the IP addresses that have been used.
2) Use Nmap to check whether the 3389 or 22 port of the scanned IP is open, and you can determine which ones are Windows machines and which ones are Linux machines.
3) Find the Linux host name through the ssh hostname command under Linux.
4) Under Windows, use the nmblookup -A command to find out the Windows host name.
5) Use a Python script to read the scan result file and write the host name into the list.
6) Use Zabbix python API to call the monitored host name and write it into the list.
7) Take the intersection of the two lists and use a for loop to determine which host names are not monitored.
8) Send an email to notify the person in charge of monitoring.

Below I will share the script I wrote in Python. Scan_machine.sh is the script I called using Shell to write about Nmap scanning. scan_hostname.log is the result of Nmap scanning, and the content inside is the IP host. name.

#!/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()
Copy after login

Add the script to crontab, and each host will receive information about those hosts that have not been monitored.

Summary:

1) For Zabbix API related information, you can check the official details.

2) Through this script, you can know which hosts have not been monitored. I hope it will be helpful to everyone.

The above is the detailed content of How to implement Zabbix-API monitoring in Python (with code). For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template