生成csv和json文件作为结果;可以用来发现利用率低的主机以提升性能。
import requests
import json
import csv
def getTargetsStatus(serverip):
url = 'http://' + serverip + ':9090' + '/api/v1/targets'
#print("获取节点IP地址:%s" % url)
response = requests.request('GET', url)
aliveNum, totalNum = 0, 0
#存活主机列表
uplist = []
#宕机主机列表
downList = []
joblist=[]
hostlist=[]
if response.status_code == 200:
targets = response.json()['data']['activeTargets']
# print(type(targets))
# print(targets)
for target in targets:
totalNum += 1
if target['health'] == 'up':
aliveNum += 1
uplist.append(target['discoveredLabels']['__address__'])
joblist.append(target['discoveredLabels']['job'])
hostlist.append(target.get('discoveredLabels', {}).get('hostname'))
else:
downList.append(target['labels']['instance'])
#去掉localhost
#todo 需要将去掉localhost改成IP
# print(uplist.index('localhost:9090'))
#if uplist.index('localhost:9100') != None:
#uplist.remove('localhost:9100')
#print(uplist)
return uplist,downList,joblist,hostlist
def getCpu(serverip,nodeip,interval):
heard = 'http://'+serverip+':9090'+'/api/v1/query?query='
expr = '(1-(avg(irate(node_cpu_seconds_total{instance="'+ nodeip+ '",mode="idle"}[30d])))) * 100'
expr2 ='100 - ((avg_over_time(node_memory_MemAvailable_bytes{instance="'+ nodeip+ '"}[30d]) * 100) / node_memory_MemTotal_bytes{instance="'+ nodeip+ '"})'
url = heard+expr
url2 = heard+expr2
response = requests.request('GET', url)
if response.status_code == 200:
# todo 有没有别的方法
if len(response.json()['data']['result']) != 0:
value = response.json()['data']['result'][0]['value'][1]
else:
value = 0
#logger.error("获取结果为空")
#print("获取结果为空")
else:
value = 0
#logger.error("请求失败")
print("请求失败")
response = requests.request('GET', url2)
if response.status_code == 200:
if len(response.json()['data']['result']) != 0:
value2 = response.json()['data']['result'][0]['value'][1]
else:
value2 = 0
# logger.error("获取结果为空")
#print("获取结果为空")
else:
value2 = 0
# logger.error("请求失败")
print("请求失败")
return value,value2
def main():
serverip="10.30.17.170"
uplist,downlist,joblist,hostlist=getTargetsStatus(serverip)
#print(uplist)
#print(downlist)
all_data={}
all_data_list=[]
for i in range(len(uplist)):
every_data = {}
value,value2=getCpu(serverip, uplist[i], 30)
#print(joblist[i],hostlist[i],value,value2)
every_data['IPaddress']=uplist[i]
every_data['jobmane']=joblist[i]
every_data['hostname']=hostlist[i]
every_data['cpu_usage']=float(value)
every_data['memory_usage']=float(value2)
all_data_list.append(every_data)
#all_data[uplist[i]]=every_data
all_data_list=sorted(all_data_list, key=lambda i: i['cpu_usage'])
for i in all_data_list:
a=i['IPaddress']
all_data[a]=i
json_str = json.dumps(all_data)
#print(json_str)
json.dump(all_data, open('text1.json', 'w'), indent=4)
header_list = ['IPaddress','jobmane', 'hostname', 'cpu_usage','memory_usage']
with open("30d资源占用排名.csv", mode="w", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, header_list)
writer.writeheader()
writer.writerows(all_data_list)
return json_str
if __name__ == "__main__":
main()