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 相关文章推荐
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
Python实现发送QQ邮件的封装
Jul 14 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
Python按钮的响应事件详解
Mar 04 Python
Django 创建新App及其常用命令的实现方法
Aug 04 Python
django实现用户注册实例讲解
Oct 30 Python
Python实现仿射密码的思路详解
Apr 23 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
Python序列化与反序列化相关知识总结
Jun 08 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-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
php实现源代码加密的方法
2015/07/11 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
python 判断自定义对象类型
2009/03/21 Python
python不带重复的全排列代码
2013/08/13 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
python pygame模块编写飞机大战
2018/11/20 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
Python常用断言函数实例汇总
2020/11/30 Python
香港化妆品经销商:我的公主
2016/08/05 全球购物
工程资料员岗位职责
2014/03/10 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
2015元旦感言
2015/12/09 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
APP界面设计技巧和注意事项
2022/04/29 杂记