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之传说中的函数编写条规
Oct 11 Python
使用grappelli为django admin后台添加模板
Nov 18 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Python运行DLL文件的方法
Jan 17 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
python实现三壶谜题的示例详解
Nov 02 Python
python基于turtle绘制几何图形
Jun 15 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
PHP 模板高级篇总结
2006/12/21 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
html读出文本文件内容
2007/01/22 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
德国PC硬件网站:CASEKING
2016/10/20 全球购物
C++面试题目
2013/06/25 面试题
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
大学生个人自我鉴定
2013/12/03 职场文书
仓库主管的岗位职责
2013/12/04 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
三峡人家导游词
2015/01/31 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python