zabbix_sender
2024-09-30 15:46:09
转载一个python写的zabbix sender脚本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import struct
import json
class ZabbixSender:
zbx_header = 'ZBXD'
zbx_version = 1
zbx_sender_data = {u'request': u'sender data', u'data': []}
send_data = ''
def __init__(self, server_host, server_port = 10051):
self.server_ip = socket.gethostbyname(server_host)
self.server_port = server_port
def add(self, host, key, value, clock = None):
add_data = {u'host': host, u'key': key, u'value': value}
if clock != None:
add_data[u'clock'] = clock
self.zbx_sender_data['data'].append(add_data)
return self.zbx_sender_data
def clean(self):
self.zbx_sender_data['data'] = []
return self.zbx_sender_data
def __MakeSendData(self):
zbx_sender_json = json.dumps(self.zbx_sender_data, separators=(',', ':'), ensure_ascii=False).encode('utf-8')
json_byte = len(zbx_sender_json)
self.send_data = struct.pack("<4sBq" + str(json_byte) + "s", self.zbx_header, self.zbx_version, json_byte, zbx_sender_json)
def send(self):
self.__MakeSendData()
so = socket.socket()
so.connect((self.server_ip, self.server_port))
wobj = so.makefile(u'wb')
wobj.write(self.send_data)
wobj.close()
robj = so.makefile(u'rb')
recv_data = robj.read()
robj.close()
so.close()
tmp_data = struct.unpack("<4sBq" + str(len(recv_data) - struct.calcsize("<4sBq")) + "s", recv_data)
recv_json = json.loads(tmp_data[3])
return recv_data
if __name__ == '__main__':
sender = ZabbixSender(u'127.0.0.1')
for num in range(0,2):
sender.add(u'Zabbix server', u'test', u'sent data' + str(num))
res = sender.send()
print sender.send_data
print res
最新文章
- jquery Combo Select 下拉框可选可输入插件
- js获取输入框中当前光标位置并在此位置插入字符串的方法(angularjs+ts)
- 30个你必须记住的CSS选择符
- linker command failed with exit code
- GitLab常见使用方法
- Sonar+Hudson+Maven构建系列之二:迁移Sonar
- TP复习9
- ZOJ 2724 Windows Message Queue (优先级队列,水题,自己动手写了个最小堆)
- java中的getClass()函数
- mmap和普通文件读写的区别和比较 &; mmap的注意点
- if(!!attr)是什么鬼???
- 使用测试思路快速学习Python-适合测试工程师的学习方法
- redis的sorted set类型
- Logback分别打印info日志和error日志
- 三十九、vue中element最原始的分页(未封装的)
- AutoFac - 将 autofac 应用于MVC多层项目
- Excel坐标自动在AutoCad绘图_5
- Filter简易实现.
- 使用VSTS的Git进行版本控制(三)——评审历史记录
- svn提交报错Previous operation has not finished; run &#39;cleanup&#39; if it was interrupted