python 监视图_Python抓取zabbix性能监控图

#-*- coding: UTF-8 -*-

importurllib2,json,cookielib,urllib,datetime,os,threadingfrom urllib2 importRequest, urlopen, URLError, HTTPErrorglobalauth_code,zabbix_url,zabbix_header,login_url,graph_url,login_data,pic_save_path_dir,yesterday9,opener#zabbix接口地址、登录地址、图片地址

zabbix_url="http://10.16.2.4/zabbix/api_jsonrpc.php"login_url= 'http://10.16.2.4/zabbix/index.php'graph_url= 'http://10.16.2.4/zabbix/chart2.php'zabbix_header= {"Content-Type":"application/json"}

zabbix_user= "admin"zabbix_pass= "password"auth_code= ""auth_data=json.dumps({"jsonrpc":"2.0","method":"user.login","params":

{"user":zabbix_user,"password":zabbix_pass

},"id":0

})#定义登录所需要用的信息,如用户名、密码等,使用urllib进行编码

login_data =urllib.urlencode({"name": zabbix_user,"password": zabbix_pass,"autologin": 1,"enter": "Sign in"})#新建以当天日期为名的文件夹保存图片

today = datetime.datetime.now().date().strftime('%Y%m%d')

pic_save_path_dir= os.path.join('d:\\pic',today ) #修改图片保存位置

if notos.path.exists(pic_save_path_dir):

os.makedirs(pic_save_path_dir)#定义graph的starttime参数,从前一天的9:00开始

yesterday = (datetime.datetime.now()-datetime.timedelta(days=1))

yesterday9= datetime.datetime(yesterday.year,yesterday.month,yesterday.day,9).strftime('%Y%m%d%H%M%S')#登录zabbix,设置一个cookie处理器,负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie

cj =cookielib.CookieJar()

opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

urllib2.install_opener(opener)

opener.open(login_url,login_data)#.read()

request=urllib2.Request(zabbix_url,auth_data)for key inzabbix_header:

request.add_header(key,zabbix_header[key])try:

result=urllib2.urlopen(request)exceptHTTPError, e:print 'The server couldn\'t fulfill the request, Error code:', e.codeexceptURLError, e:print 'We failed to reach a server.Reason:', e.reasonelse:

response=json.loads(result.read())#print response

result.close()#判断SESSIONID是否在返回的数据中

if 'result' inresponse:

auth_code=response['result']else:print response['error']['data']defHttp_access(data):

request=urllib2.Request(zabbix_url,data)for key inzabbix_header:

request.add_header(key,zabbix_header[key])

result=urllib2.urlopen(request)

response=json.loads(result.read())#print result.read()

#print response

result.close()if len(response['result']) >0:return response['result'][0]defget_hostid(ip):

get_host_data= ''

if len(auth_code) <>0:

get_host_data=json.dumps({"jsonrpc": "2.0","method": "host.get","params": {"output": "extend","filter": {"host": [

ip,

]

}

},"auth": auth_code,"id": 1})returnget_host_datadefget_itemid(hostid,itemtype):

get_item_data= ''

if (len(auth_code) <> 0) and (hostid is notNone):

get_item_data=json.dumps({"jsonrpc": "2.0","method": "item.get","params": {"output": "extend","hostids": hostid,"search":{"name": itemtype

},"sortfield": "name"},"auth": auth_code,"id": 1})returnget_item_datadefget_graphid(itemid):

get_graph_data= ''

if (len(auth_code) <> 0) and (itemid is notNone):

get_graph_data=json.dumps({"jsonrpc": "2.0","method": "graphitem.get","params": {"output": "extend","expandData": 1,"itemids": itemid

},"auth": auth_code,"id": 1})returnget_graph_datadefpic_save(ip,name,graphid):

graph_args=urllib.urlencode({"graphid":graphid,"width":'400', #定义图片宽度

"height":'156', #定义图片高度

"stime":yesterday9, #图形开始时间

"period":'86400'}) #定义时长,取1天的数据

data=opener.open(graph_url,graph_args).read()#pic_save_path = pic_save_path_dir + ip + '-' + name +'.png'

picname = ip + '-' + name +'.png'pic_save_path=os.path.join(pic_save_path_dir,picname)

file=open(pic_save_path,'wb')

file.write(data)#file.flush()

file.close()#多线程并发调用该函数

defpic_save_th(ip):#根据ip获取hostid

host_data =get_hostid(ip)

host_result=Http_access(host_data)if host_result is notNone: #判断该IP是否在zabbix中存在

hostid= host_result['hostid']#根据监视器名称获取相应的itemid

cpuname = 'CPU Usage'memoryname= 'Memory - Memory available'diskname= 'Disk - Current Disk Queue Length'netcard= 'Traffic for Public Receive'item_cpu=get_itemid(hostid,cpuname)

item_memory=get_itemid(hostid,memoryname)

item_disk=get_itemid(hostid,diskname)

item_netcard=get_itemid(hostid,netcard)

itemid_cpu= Http_access(item_cpu)['itemid']

itemid_memory= Http_access(item_memory)['itemid']

itemid_disk= Http_access(item_disk)['itemid']

itemid_netcard= Http_access(item_netcard)['itemid']#根据itemid获取相应的graphid

graphdata_cpu =get_graphid(itemid_cpu)

graphdata_memory=get_graphid(itemid_memory)

graphdata_disk=get_graphid(itemid_disk)

graphdata_netcard=get_graphid(itemid_netcard)

graphid_cpu= Http_access(graphdata_cpu)['graphid']

graphid_memory= Http_access(graphdata_memory)['graphid']

graphid_disk= Http_access(graphdata_disk)['graphid']

graphid_netcard= Http_access(graphdata_netcard)['graphid']print ip#,graphid_cpu,graphid_memory,graphid_disk,graphid_netcard

#调用pic_save函数保存图片到本地

pic_save(ip,cpuname,graphid_cpu)

pic_save(ip,memoryname,graphid_memory)

pic_save(ip,diskname,graphid_disk)

pic_save(ip,netcard,graphid_netcard)else:print '%s doesnot exist in zabbix' %ip#定义线程数控制函数,num表示每次并发的线程数

deflstg(num,lst):#定义每段的个数num

l =len(lst)

g= l/num #取分成几组

last = l%num #判断是否有剩余的数

lstn =[]if num >=l:

lstn.append(lst)else:for i inrange(g):

i=i+1n=i*num

m=n-num

lstn.append(lst[m:n])if last <>0:

lstn.append(lst[-last:])returnlstn#serverip=['10.160.26.30','10.160.26.31','10.160.26.32']#for ip in serverip:#pic_save_th(ip)

if __name__ =='__main__':#定义线程数量

tnum = 5serverips=['10.160.26.30','10.160.26.31','10.160.26.32','10.160.31.31','10.160.31.32','10.160.31.36','10.160.34.250','10.160.34.251','192.168.200.250','192.168.200.251']for ips inlstg(tnum,serverips):

threads=[]for ip inips:#创建并启动进程

t = threading.Thread(target=pic_save_th,args=(ip,))#t.setName('th-'+ ip)

t.setDaemon(True)

t.start()

threads.append(t)#等待每个线程结束

for t inthreads:#print t.name,t.is_alive(),ctime()

t.join()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值