Zabbix Python API 应用实战

简介:

    做监控的同学应该知道,公司IDC机房经常有上架、下架、报修和报废的服务器。如果服务器数量很多的时候很容易造成监控遗漏。
    大的互联网公司把监控系统和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 主机名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env python
#create by:sfzhang 20140820
#coding=utf-8
import  os,sys
import  json
import  urllib2
import  datetime,time
from  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  =  []
     =  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)
     =  file ( '/shell/machine/result/result.txt' , 'w' )
     f.write(string)
     f.flush()
     f.close()
     runCmd(mail_cmd)
if  __name__  = =  "__main__" :  
     main()

   把脚本添加到crontab,每台会收到关于那些主机没有添加监控的信息。

wKiom1QWnH2TqA4TAACr-PgcC_U866.jpg     

    总结:

     1)Zabbix API相关信息可以查看官方详细资料,看不懂英文的可以参考下面这篇文档。http://paperplane.ruhoh.com/zabbix/intro-to-zabbix-api/

     2)通过该脚本可以知道那些主机没有添加监控,希望对大家有帮助,如果有更好的解决方法欢迎多多交流。 










本文转自 sfzhang 51CTO博客,原文链接:http://blog.51cto.com/sfzhang88/1552916,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
777 7
|
6月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
6月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
6月前
|
缓存 自然语言处理 API
阿里巴巴国际站关键字搜索 API 实战:3 步搞定多语言适配 + 限流破局,询盘量提升 40%
跨境电商API开发常陷合规、多语言、限流等坑。本文详解从国际合规(GDPR/CCPA)到参数优化、数据结构化及区域化搜索的全链路方案,附Python代码模板与缓存重试架构,助力提升调用成功率至99%+,精准询盘增长42%。
|
6月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
6月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
6月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
266 11
|
6月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
200 12
|
6月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
542 1
|
6月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
1138 1
下一篇
开通oss服务