前言
具体脚本全部使用python
网络设备的资产管理重要性,如果我们可以保证zbx里面的设备信息正确性,完整性,实时性,那么我们就可以把利用zbx官方api随时获取设备信息,使用脚本进行自动化管理和其他系统联动,类似于LDAP一样。
实际环境和思路
1.在实际网络环境中我们可以手动更新汇聚/核心层网络设备资产,纳入zabbix管理,但是还拥有大量的接入交换机设备,大部分可能由负责该区域的同事配置管理。我希望能够通过尽量完善所有网络设备加入zabbix纳管。
2.zabbix自带的自动发现规则,依赖于2个必须条件,①access-sw与zbx的网络可达。②已经配置了snmp。在实际情况中有可能配置的人只配置可telnet/ssh等远程管理和一些基础配置,遗漏了默认路由,snmp配置的情况,那么zbx的自动发现规则是无法成功添加的。
我的思路:使用zbx的api获取当前已经纳管的网络设备的IP列表,然后顺序通过snmp协议获取该网络设备的管理vlan的ARP表,然后与列表进行比对,发现不在列表中的发送邮件通知,进行手动刷入交换机模板配置,再由zbx自动发现规则进行添加。
自动发现脚本
准备工作
1.python
2.easysnmp库 #easysnmp好像不兼容Windows,建议直接在zbx服务器上进行脚本测试。
3.MIB&OID #以华为为例子查询官方mib得到arp的oid是enterprises.2011.5.25.123.1.17.1.12.
4.snmpwalk
脚本步骤
1.使用API获取zabbix中指定分组/全部主机信息,返回一个List列表。#每一个元素是一台主机
2.循环list,使用snmp库获取该网络设备的全部arp信息列表
2.1.依次循环arp列表使用if筛选出管理vlan的arp
2.2.判断这个IP是否存在zbx
3.输出未加入zabbix网络设备的IP和异常信息
脚本参考如下
from easysnmp import snmp_walk,snmp_get
import json,re,requests
import csv
import time
#function area
#登录令牌
def get_token():
data = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": username,
"password": password
},
"id": 0
}
r = requests.get(zaurl, headers=header, data=json.dumps(data))
auth = json.loads(r.text)
return auth["result"]
#获取指定groupid的所有主机,如果不加第二个参数"分组名称"就返回zbx中全部主机信息
def getHosts(token,group=Non