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实现ID3决策树算法
Dec 20 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
Python获取指定字符前面的所有字符方法
May 02 Python
基于python实现学生管理系统
Oct 17 Python
python 生成图形验证码的方法示例
Nov 11 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
Django如何开发简单的查询接口详解
May 17 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 Python
pandas中DataFrame重置索引的几种方法
May 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中实现字符串翻转的方法
2017/02/22 PHP
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python random模块用法解析及简单示例
2017/12/18 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
美国网上花店:JustFlowers
2017/02/12 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
应届生程序员求职信
2013/11/05 职场文书
服装公司总经理岗位职责
2013/11/30 职场文书
读书活动总结范文
2014/04/26 职场文书
建设工地安全标语
2014/06/07 职场文书
2014年应急工作总结
2014/12/11 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Python OpenCV实现图像模板匹配详解
2022/04/07 Python