Python自做的一个zabbix_sender程序

代码如下:

#!/bin/python2
# -*- coding: utf-8 -*-
# 自做一个zabbix_sender程序

import socket
import struct
import json

# Zabbix Agent数据发送协议: <HEADER><DATALEN><DATA>
# <HEADER> - "ZBXD\x01" (5 bytes) , 头部信息"ZBXD"\协议版本"0x01"
# <DATALEN> - 数据长度 (8 bytes). 1将被格式化为01/00/00/00/00/00/00/00 (十六进制数8字节,64位数字)
# <DATA> - (为了不耗尽Zabbix-Server的内存,单次连接数据接收限制128M)

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 AddData(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 ClearData(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.AddData(u'Zabbix server',u'test',u'sent data' + str(num))
        # Zabbix Server为host, test为key, sent data为value
        # 创建一个key为"test"的trapper监控项
    res = sender.Send()
    print(sender.send_data)
    print(res)


# 上例概述:Sender和Server建立Socket连接,发送key的数据(注意头部信息正确性),Server对数据进行处理响应的一个过程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
zabbix_sender一个用于将数据发送到Zabbix服务器的工具。它的作用是通过配合zabbix trapper监控类型,可以直接发送数据给Zabbix服务器,而不需要等待item取值脚本的执行时间,从而实现快速发送items值的功能。\[1\] 在CentOS 7环境下,可以通过以下命令安装zabbix_sender: ``` rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-sender-3.0.25-1.el7.x86_64.rpm ``` \[2\] 要创建一个使用zabbix trapper监控类型的监控项,可以在Zabbix客户端执行以下命令: ``` zabbix_sender -z 10.1.12.188 -s "Zabbix server" -k trapper_test -o "how are you?" ``` 这个命令会将数据"how are you?"发送给Zabbix服务器,并返回发送结果信息。\[3\] #### 引用[.reference_title] - *1* *2* [zabbix_sender安装及使用](https://blog.csdn.net/qq_48644092/article/details/110209734)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [zabbix_sender安装和使用](https://blog.csdn.net/u012062455/article/details/81777190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值