Following is method to send data to zabbix (2.4.6) server written in python 3.
Corresponding Item key should be configured as zabbix trapper on zabbix server to successfully process this request.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def send_zabbix_request(self, data_json): | |
HEADER = "ZBXD\1" | |
data_json_str = json.dumps(data_json) | |
logger.debug("Zabbix Request ----- " + data_json_str) | |
data_len= len(data_json_str) | |
data_header = struct.pack('<Q', data_len) | |
zabbix_req = HEADER.encode() + data_header + data_json_str.encode() | |
try: | |
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
sock.connect ((self.zabbix_host, self.zabbix_port)) | |
sock.send(zabbix_req) | |
except Exception as err: | |
logger.critical("Error connecting to Zabbix Server -- {0}" .format( err)) | |
return json_err("Error connecting to Zabbix Server {0}" .format( err)) | |
else: | |
response_header = sock.recv(5).decode() | |
if not response_header == 'ZBXD\1': | |
logger.critical('Got invalid responsei from Zabbix') | |
return json_err('Got invalid responsei from Zabbix') | |
response_data_header = sock.recv(8) | |
response_len = struct.unpack('<Q', response_data_header)[0] | |
response_raw = sock.recv(response_len) | |
sock.close() | |
return json.loads(response_raw.decode()) |
Zabbix data is a json in following format.
{
"request":"sender data",
"data":[
{
"host":"hostName",
"key":"key-1",
"value":"200",
"clock":1458748060
},
{
"host":"hostName",
"key":"key-4",
"value":"test",
"clock":1458748060}
]}
}
{
"request":"sender data",
"data":[
{
"host":"hostName",
"key":"key-1",
"value":"200",
"clock":1458748060
},
{
"host":"hostName",
"key":"key-4",
"value":"test",
"clock":1458748060}
]}
}