zabbix_agent port auto-discovery service

Application Background:

      zabbix monitoring system introduction and installation, refer to Daniel operation and maintenance of survival time , here not long-winded

To zabbix-agent terminal can automatically report server service port to zabbix server end, port monitor their survival if available,

With the following script: service_scan.py agent deployed to end /usr/local/zabbix-agent/bin/service_scan.py

Deployment Readiness:

  1. service_scan.py script library in accordance with psutil lazy python2.7 version,
  2. Python2.7 version needs to be installed in the agent side,
  3. Installation Related psutil library with python2.7
1
/usr/local/python27/bin/pip  install  psutil

  

Server port auto-discovery script:  service_scan.py

 

#!/usr/local/python27/bin/python
# author: [email protected]
#


import os, sys, time
import commands
import psutil
import socket
import json


del_list = ["rpc.statd","java"]
def Handle_Connects():
rows = []
lc = psutil.net_connections('inet')
for c in lc:
(ip, port) = c.laddr
if ip == '0.0.0.0' or ip == '::':
if c.type == socket.SOCK_STREAM and c.status == psutil.CONN_LISTEN:
proto_s = 'tcp'
#elif c.type == socket.SOCK_DGRAM:
# proto_s = 'udp'
else:
continue
pid_s = str(c.pid) if c.pid else '(unknown)'
#print pid_s,port
rows.append('%s:%s'%(pid_s,port))

dedup_list = {}.fromkeys(rows).keys()
return dedup_list

def handler_pid(pid,port):

service_dict = {}
p = psutil.Process(int(pid))
if p.as_dict()['name'] == 'jsvc':
service_pname = p.as_dict()['environ']['HOME'].split('/')[3]
service_dict['{#PNAME}'] = service_pname
service_dict['{#PPORT}'] = port
else:
service_pname = p.as_dict()['name']
service_dict['{#PNAME}'] = service_pname
service_dict['{#PPORT}'] = port


return service_dict

 

def main():
zb_dict = {}
service_list = []
result_list = []
clist = []
for i in Handle_Connects():
pid = i.split(':')[0]
port = i.split(':')[1]

service_list.append(handler_pid(pid,port))
for dictlist in service_list:
if dictlist["{#PNAME}"] in del_list:
result_list.append(dictlist)
#service_list.remove(dictlist)
#print result_list
for delname in service_list:
if delname not in result_list:
clist.append(delname)
zb_dict['data'] = clist
print json.dumps(zb_dict,sort_keys=True,indent=4)


if __name__ == "__main__":
main()

Guess you like

Origin www.cnblogs.com/jianghanyang/p/11069953.html