zabbix_sender

转载一个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

 

转载于:https://www.cnblogs.com/caoguo/p/5709476.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值