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中from module import * 的一个坑
Jul 20 Python
python进阶教程之词典、字典、dict
Aug 29 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
python编程实现归并排序
Apr 14 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
Python 通配符删除文件的实例
Apr 24 Python
python中退出多层循环的方法
Nov 27 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 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 json_encode奇怪问题说明
2011/09/27 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
Underscore源码分析
2015/12/30 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python 实现UTC时间加减的方法
2018/12/31 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
Python安装selenium包详细过程
2019/07/23 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
澳大利亚百货公司:David Jones
2018/02/08 全球购物
火锅店营销方案
2014/02/26 职场文书
设计师求职信模板
2014/05/06 职场文书
计算机求职信
2014/07/02 职场文书
办理信用卡工作证明
2014/09/30 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
python元组打包和解包过程详解
2021/08/02 Python
Redis主从复制操作和配置详情
2022/09/23 Redis