zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    git的使用
    模块化的 require 和 import的区别
    Javascript模块化编程(三):require.js的用法
    Javascript模块化编程(二)commonJS规范和AMD规范
    Javascript模块化编程发展历史
    GULP的使用流程
    jQuery事件对象
    jQuery文档处理 |
    Vue学习笔记【12】——过滤器
    Vue学习笔记【11】——Vue调试工具vue-devtools的安装步骤和使用
  • 原文地址:https://www.cnblogs.com/caoguo/p/5709476.html
Copyright © 2011-2022 走看看