python如何实现Zabbix-API监控

  介绍

这篇文章给大家分享的是有关python如何实现Zabbix-API监控的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

做运维的朋友应该知道,公司IDC机房经常有上架,下架,报修和报废的服务器。如果服务器数量很多的时候很容易造成监控遗漏。

 python如何实现Zabbix-API监控”> <br/> </p> <p>,,,,,,大的互联网公司把监控系统和CMDB(资产管理系统|配置管理数据库系统)集成在一起,当上架一台新机器的时候CMDB里面会记录相关的信息,Zabbix根据CMDB里面信息自动链接相关的模块,添加|删除监控。很多小的公司没有资产管理系统,但作为监控的负责人应该每天知道上架了哪些新的机器,确保能添加到Zabbix监控里面。<br/> </p> <p>,,,,,首先给大家说一下脚本思路:<br/> </p> <p> 1)通过Nmap工具扫描网段,扫描出已经使用的IP地址。<br/> 2)通过Nmap检测已经扫描IP的3389或者22端口是否开放,可以判断那些事窗口机器,那些是Linux机器。<br/> 3) Linux下面通过ssh +主机名命令找出Linux主机名。<br/> 4) windows下面通过nmblookup——命令找出windows主机名。<br/> 5)用Python脚本读扫描结果文件,把主机名写到列表里面。<br/> 6)用Zabbix Python API调用已经监控的主机名,写到列表里面。<br/> 7)两个列表取交集,用对循环判断哪些主机名没有监控。<br/> 8)发邮件通知监控负责人。</p> <p>,,,下面我分享一下我写的Python写的脚本,其中scan_machine.sh是我调用的用贝壳写的关于Nmap扫描的脚本,scan_hostname。日志是Nmap扫描的结果,里面内容是IP主机名。</p> <pre类= # !/usr/bin/env  python # create : sfzhang  20140820 #编码=utf-8import 操作系统,sysimport  jsonimport  urllib2import  datetime, timefrom  urllib2  import  URLError   时间=nmap_cmd “/壳/机/scan_machine.sh" def  runCmd(命令):   global  mail_cmd=,mail_cmd  & # 39; & # 39; & # 39; mail  -s “Report 提醒not  monitor  Hosts  of  Zabbix", shifeng_zhang88  & lt;,/shell/机/结果/result.txt& # 39; & # 39; & # 39;   ,return  os.system(命令)runCmd (nmap_cmd) def  nmap_host ():=,hostiplst  []=,hostnamelst  []=,f 文件(& # 39;/shell/机/结果/scan_hostname.log& # 39;)   ,for  line  f.readlines拷贝():   时间=hostip 才能;line.split () [0]   时间=hostname 才能;line.split () [1]   hostiplst.append才能(hostip)   hostnamelst.append才能(主机名)   ,hostnamelst.sort ()   # print  hostiplst   return  hostnamelst   ,f.close () def  zabbix_host ():   ,zabbixhostlst=[]   ,# based  url 以及required 头=,url “http://192.168.161.128/api_jsonrpc.php"   ,header =, {“Content-Type":,“应用程序/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 对象=,,request  urllib2.Request (url,数据)   ,for  key 头:拷贝,   ,request.add_header(键,头(例子))   # get  host 列表   ,试一试:=,,result  urllib2.urlopen(请求)   ,except  URLError  as  e:   ,print “;从而,server  could  not  fulfill ,要求干净,e.reason 其他:   时间=reponse 才能;json.loads (result.read ())   ,result.close ()   ,# print “Number  of 主机:“,len(响应[& # 39;结果# 39;])   ,for  host 拷贝响应[& # 39;结果# 39;):   ,,# print “Host  ID:“主机(& # 39;hostid& # 39;],“Host ,名字:“主机(& # 39;名字# 39;】   ,,zbxhosts=主机[& # 39;名字# 39;】   ,,zabbixhostlst.append (zbxhosts)   zabbixhostlst.sort才能()   return 才能;zabbixhostlst  def 主要():=,,nmaphostlst  nmap_host (),=,,zbxhostlst  zabbix_host (),=,diff 列表(设置(nmaphostlst), ^,集(zbxhostlst)),=,content “\ n"=,nomonitorlst  [],   len (diff), if  !=, 0:,   for 才能;host  diff:拷贝,   ,,if  host  nmaphostlst:拷贝,   ,,,nomonitorlst.append(主机)   ,,,,   其他:大敌;   sys.exit才能()   # print  zbxhostlst=,string  & # 39; \ n # 39; . join (nomonitorlst)=,f 文件(& # 39;/shell/机/结果/result.txt& # 39;, & # 39; w # 39;)   ,f.write(字符串)   ,f.flush ()   ,f.close ()   ,runCmd (mail_cmd) if  __name__ ==,“__main__":,   之前,main ()

python如何实现Zabbix-API监控