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 09 Python
python中map、any、all函数用法分析
Apr 21 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
python 并发下载器实现方法示例
Nov 22 Python
pymysql的简单封装代码实例
Jan 08 Python
Python 统计位数为偶数的数字代码详解
Mar 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
PHP学习之数组的定义和填充
2011/04/17 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Python中django学习心得
2017/12/06 Python
简单了解python gevent 协程使用及作用
2019/07/22 Python
django使用admin站点上传图片的实例
2019/07/28 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
keras之权重初始化方式
2020/05/21 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
幼儿园消防演练方案
2014/02/13 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB