从prometheus监控接口读取CPU和内存信息
prometheus有开发的接口,可以执行Promsql,并读取监控信息,比如下面的函数
def getres(url):
params={}
# 读取内存信息
params['query']='node_memory_MemTotal_bytes'
res=requests.get(url,params).json()['data']['result']
meminfo=[{'instance':i['metric']['instance'],'value':i['value'][-1]} for i in res]
for mem_line in meminfo:
ip_addr=mem_line['instance'].split(':')[0]
value=int(mem_line['value'])
memory=round(value/1024/1024/1024,2)
print(f"{ip_addr},内存为{memory}G")
#读取日平均内存使用率
params['query']="100 - 100*((avg_over_time(node_memory_MemFree_bytes[1d]) + avg_over_time(node_memory_Cached_bytes[1d]) + avg_over_time(node_memory_Buffers_bytes[1d])) / avg_over_time(node_memory_MemTotal_bytes[1d]))"
res=requests.get(url,params).json()['data']['result']
meminfo=[{'instance':i['metric']['instance'],'value':i['value'][-1]} for i in res]
for mem_line in meminfo:
ip_addr=mem_line['instance'].split(':')[0]
value=float(mem_line['value'])
mem_rate=round(value,2)
print(f"{ip_addr},日平均内存使用率为{mem_rate}%")
#读取CPU信息
params['query']='count(count(node_cpu_seconds_total) by(cpu,instance)) by (instance)'
res=requests.get(url,params).json()['data']['result']
cpuinfo=[{'instance':i['metric']['instance'],'value':i['value'][-1]} for i in res]
for cpu_line in cpuinfo:
ip_addr=cpu_line['instance'].split(':')[0]
cpu_cores=int(cpu_line['value'])
print(f"{ip_addr},CPU为{cpu_cores}核")
#日平均CPU使用率
params['query']='100-avg(rate(node_cpu_seconds_total{mode="idle"}[1d])) by(instance)*100'
res=requests.get(url,params).json()['data']['result']
cpu_rate_info=[{'instance':i['metric']['instance'],'value':i['value'][-1]} for i in res]
for cpu_line in cpu_rate_info:
ip_addr=cpu_line['instance'].split(':')[0]
cpu_rate=float(cpu_line['value'])
cpu_rate=round(cpu_rate,2)
print(f"{ip_addr},日平均CPU使用率为{cpu_rate}%")
#引用函数
getres("http://普米的地址:9090/api/v1/query")