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的urllib库提交WEB表单
Feb 24 Python
Python中让MySQL查询结果返回字典类型的方法
Aug 22 Python
Python制作Windows系统服务
Mar 25 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
python实现梯度下降法
Mar 24 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
Python decorator拦截器代码实例解析
Apr 04 Python
Python中格式化字符串的四种实现
May 26 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
php 过滤危险html代码
2009/06/29 PHP
PHP会话操作之cookie用法分析
2016/09/28 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python的垃圾回收机制深入分析
2014/07/16 Python
Python yield 使用浅析
2015/05/28 Python
python选择排序算法实例总结
2015/07/01 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
.NET方向面试题
2014/11/20 面试题
母亲80寿诞答谢词
2014/01/16 职场文书
酒鬼酒广告词
2014/03/21 职场文书