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处理python编码问题
Mar 13 Python
python搜索指定目录的方法
Apr 29 Python
Python中的pass语句使用方法讲解
May 14 Python
python中使用序列的方法
Aug 03 Python
Python批量修改文本文件内容的方法
Apr 29 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
python匿名函数的使用方法解析
Oct 10 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
在python3中实现更新界面
Feb 21 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 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原理之变量(Variables inside PHP)
2013/08/09 PHP
php中apc缓存使用示例
2013/12/25 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
Python创建日历实例
2014/08/21 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python 自动刷博客浏览量实例代码
2017/06/14 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
python处理document文档保留原样式
2019/09/23 Python
解析Python3中的Import
2019/10/13 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
模具毕业生推荐信
2014/02/15 职场文书
C++程序员求职信范文
2014/04/14 职场文书
个人委托书范本汇总
2014/10/01 职场文书
职称评定个人总结
2015/03/05 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
公司档案管理制度
2015/08/05 职场文书
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers