Friday, March 25, 2016

Python 3- Send Data to Zabbix Server

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.

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}
     ]}
}

No comments:

Post a Comment