当前位置: 首页 > article >正文

从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")

http://www.kler.cn/news/338902.html

相关文章:

  • [Python] 编程入门:理解变量类型
  • python+selenium+unittest自动化测试框架
  • [C++]使用纯opencv部署yolov11-seg实例分割onnx模型
  • 【C++】模拟实现hash_table(哈希表)
  • docker minio进行数据迁移
  • MCU订阅-发布模式
  • Vue2电商平台(六)、注册登录,请求头配置token,token持久化存储;导航守卫(重点);组件内守卫、路由独享守卫
  • QtConcurrent::run 更新UI控件方式,避免主界面卡顿
  • 【数据结构与算法】LeetCode:图论
  • 获取外盘期货高频数据的方法以及量化分析
  • sql练习:计算次日留存率
  • Linux运维02:WM虚拟机安装Centos7操作系统
  • C++网络编程之TCP协议
  • Nuxt.js 应用中的 app:mounted 钩子详解
  • vue的h函数和template语法如何混用?
  • Linux——kubernetes 容器编排调度的平台
  • Redis BigKey问题
  • 「Java开发指南」如何用MyEclipse为iPhone搭建Spring应用程序?
  • 【网络】用网线连接两台电脑实现远程桌面
  • 【算法】拓扑排序