python实现Zabbix-API监控


Posted in Python onSeptember 17, 2018

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

python实现Zabbix-API监控

       大的互联网公司把监控系统和CMDB(资产管理系统|配置管理数据库系统)集成在一起,当上架一台新机器的时候CMDB里面会记录相关的信息,Zabbix根据CMDB里面信息自动Link相关的模块,添加|删除监控。很多小的公司没有资产管理系统,但作为监控的负责人应该每天知道上架了哪些新的机器,确保能添加到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)两个列表取交集,用for循环判断哪些主机名没有监控。
8)发邮件通知监控负责人。

    下面我分享一下我写的Python写的脚本,其中scan_machine.sh是我调用的用Shell写的关于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 = '''mail -s "Report on not monitor Hosts of Zabbix" shifeng_zhang88 < /shell/machine/result/result.txt'''
 return os.system(command)runCmd(nmap_cmd)def nmap_host():
 hostiplst = []
 hostnamelst = []
 f = file('/shell/machine/result/scan_hostname.log')
 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['result'])
 for host in reponse['result']:
   #print "Host ID:",host['hostid'],"Host Name:",host['name']
   zbxhosts=host['name']
   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 = '\n'.join(nomonitorlst)
 f = file('/shell/machine/result/result.txt','w')
 f.write(string)
 f.flush()
 f.close()
 runCmd(mail_cmd)if __name__ == "__main__": 
 main()

把脚本添加到crontab,每台会收到关于那些主机没有添加监控的信息。

python实现Zabbix-API监控

总结:

     1)Zabbix API相关信息可以查看官方详细资料。

     2)通过该脚本可以知道那些主机没有添加监控,希望对大家有帮助,如果有更好的解决方法欢迎多多交流。    

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现跨文件全局变量的方法
Jul 07 Python
python实现从字典中删除元素的方法
May 04 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
Python 实现一个计时器
Jul 28 Python
python 绘制国旗的示例
Sep 27 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 #Python
Python从使用线程到使用async/await的深入讲解
Sep 16 #Python
推荐10款最受Python开发者欢迎的Python IDE
Sep 16 #Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 #Python
python os.path模块常用方法实例详解
Sep 16 #Python
python中的不可变数据类型与可变数据类型详解
Sep 16 #Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 #Python
You might like
文章推荐系统(二)
2006/10/09 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
python实现证件照换底功能
2019/08/20 Python
Python爬虫与反爬虫大战
2020/07/30 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
求职简历自荐信
2013/10/20 职场文书
运动会入场词100字
2014/02/06 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
银行自荐信怎么写
2015/03/05 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书