Zabbix设备发现原理笔记
该内容灵感来自于我的老师,只不过他的是Python2版本,我进行了Python3的编写,也希望如果有错欢迎大家留言
具体的原理是通过查看Linux文件,进行一系列的过滤,得到结果再经由名单过滤获得最终结果,再通过能够让Zabbix解析的数据格式得到一定的返回值
import subprocess,json
command = '''cat /proc/diskstats |awk '{print $3}'| egrep -v '[0-9]|asm|ofsctl'|sort -u'''
#通过查看diskstats获取到当前的设备信息,通过awk过滤打印出第三行,再去掉数字以及asm,ofsctl等设备信息,最终通过sort -u属性忽略掉同行
#这样子做的原因是为了保证数据的不重复性
result = subprocess.run(command,shell=True,stdout=subprocess.PIPE)
#通过subprocess模块执行Shell命令,使用Shell参数表示这是执行系统命令,标准输出我们采用subprocess.PIPE方式,来保证我们的命令进程的执行顺利
#print(result.stdout)
if result.returncode == 0: #当我们执行成功的时候subprocess会返回一个状态码,为0的时候表示执行成功
disk = [] #创建一个列表,用于存放我们过滤后得到的数据
rs=result.stdout.decode('GB2312').strip().split("\n")
#这里非常重要,通过stdout标准输出的时候会是输出字节信息,我们需要通过decode进行编码转换(具体采用什么编码请根据当前的环境进行选择),再通过strip()函数去除首尾的一些符号,split()以回车键进行分割数据
for i in rs:
disk += [{'{#DISKNAME}':i}] #这个的加入似乎是为了让Zabbix准确的识别到每个数据的信息,因为我们最终会通过JSON格式进行传输
print(json.dumps({'data':disk},sort_keys=True,indent=4)) #进行JSON转换,sort_key进行排序,indent=4使用四个空格表示JSON数据的缩进
else:
print("Error")
以上的这个脚本是使用的过程并没有和Zabbix进行联动,如果需要联动的话需要进行Zabbix对应的脚本设置,或shell脚本的编写进行参数传递。有的大佬可能可以通过Shell脚本直接获取到对应的数据,但是我比较菜只能写写Python来完成该工作

浙公网安备 33010602011771号