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使用random和tertools模块解一些经典概率问题
Jan 28 Python
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
django实现前后台交互实例
Aug 07 Python
python2.7到3.x迁移指南
Feb 01 Python
使用python生成目录树
Mar 29 Python
Python实现按中文排序的方法示例
Apr 25 Python
使用python实现滑动验证码功能
Aug 05 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
分享unittest单元测试框架中几种常用的用例加载方法
Dec 02 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
pycharm代码删除恢复的方法
Jun 26 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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
python中的sort方法使用详解
2014/07/25 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
python在文本开头插入一行的实例
2018/05/02 Python
django连接oracle时setting 配置方法
2019/08/29 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
python实现查找所有程序的安装信息
2020/02/18 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
保险专业大学生职业规划书
2014/03/03 职场文书
班主任新年寄语
2014/04/04 职场文书
大一新生学期自我评价
2014/04/09 职场文书
学校课外活动总结
2014/05/08 职场文书
2014年国庆标语
2014/06/30 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书