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使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
Python 字符串大小写转换的简单实例
Jan 21 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
一文读懂python Scrapy爬虫框架
Feb 24 Python
Django利用AJAX技术实现博文实时搜索
May 06 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
PHP详细彻底学习Smarty
2008/03/27 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
python中base64加密解密方法实例分析
2015/05/16 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python适配器模式代码实现解析
2019/08/02 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
英国现代绅士品牌:Hackett
2017/12/17 全球购物
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
shell变量的作用空间是什么
2013/08/17 面试题
银行内勤岗位职责
2014/04/09 职场文书
医学求职信
2014/05/28 职场文书
2015年城市管理工作总结
2015/05/23 职场文书