39.1 用最近1天的内存平均使用率等出业务资源利用率报表

news/2024/12/28 4:47:55/

本节重点介绍 :

  • 纵向聚合VS横向聚合
  • 用最近1天的内存平均使用率等出业务资源利用率报表
    • 为了降低成本
    • 合理配置资源

纵向聚合VS横向聚合

普通的聚合函数是纵向聚合

  • 普通的聚合函数是纵向聚合,也就是多个series进行聚合
  • 如求机器的平均cpu user态利用率
avg(rate(node_cpu_seconds_total{mode="user"}[1m])) by (instance) *100
  • 内置含义是 所有的CPU 核心按照instance算平均值,就是纵向聚合

node_cpu_seconds_total{cpu="0", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
7967.01
node_cpu_seconds_total{cpu="1", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
7498.92
node_cpu_seconds_total{cpu="2", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
7342.36
node_cpu_seconds_total{cpu="3", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
7162.99
node_cpu_seconds_total{cpu="4", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
7108.67
node_cpu_seconds_total{cpu="5", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
6996.87
node_cpu_seconds_total{cpu="6", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
7023.01
node_cpu_seconds_total{cpu="7", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
6846.69
node_cpu_seconds_total{cpu="8", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
6736.39
node_cpu_seconds_total{cpu="9", instance="172.20.70.215:9100", job="node_exporter", mode="user"}
12299.72

agg_over_time 横向聚合

  • 文档地址
  • 可以立即为这个series的时间数据从左到右应用聚合函数,如最近一天内的平均可用内存大小
avg_over_time(node_memory_MemAvailable_bytes[1d])
{instance="172.20.70.215:9100", job="node_exporter"} 12803739069.766266

算机器的使用率

cpu使用率

最近1天内的cpu平均使用率

avg_over_time((avg(rate(node_cpu_seconds_total{mode="user"}[1m])) by (instance) *100)[1d:1m])
  • 解读一下,先纵向将所有核数据聚合成instance节点级别
  • 然后应用avg_over_time,求得instance节点级别自身 1天的平均值,结果如下
{instance="172.20.70.205:9100"} 1.619994350365054
{instance="172.20.70.215:9100"} 0.9007331827367474

最近1天内的cpu最大使用率

max_over_time((avg(rate(node_cpu_seconds_total{mode="user"}[1m])) by (instance) *100)[1d:1m])
  • 结果值

{instance="172.20.70.205:9100"} 3.4466666666655024
{instance="172.20.70.215:9100"} 1.1044444444440966

最近1天内的cpu最小使用率

min_over_time((avg(rate(node_cpu_seconds_total{mode="user"}[1m])) by (instance) *100)[1d:1m])
  • 结果值

{instance="172.20.70.205:9100"} 1.4244444444452202
{instance="172.20.70.215:9100"} 0.7977777777782142

内存使用率

最近1天内的内存平均使用率

avg_over_time(((1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100)[1d:1m])
  • 结果

{instance="172.20.70.205:9100", job="node-targets"} 32.282504064024934
{instance="172.20.70.215:9100", job="node_exporter"} 23.12835541813579

最近1天内的内存最大使用率

max_over_time(((1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100)[1d:1m])
  • 结果
{instance="172.20.70.205:9100", job="node-targets"} 33.12444929397736
{instance="172.20.70.215:9100", job="node_exporter"} 24.209719182042168

最近1天内的内存最小使用率

min_over_time(((1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100)[1d:1m])
  • 结果
{instance="172.20.70.205:9100", job="node-targets"} 31.942019063189264
{instance="172.20.70.215:9100", job="node_exporter"} 22.707273881305955

使用instant-query脚本查询数据

python脚本

import json
import timeimport requests
import logginglogging.basicConfig(format='%(asctime)s %(levelname)s %(filename)s [func:%(funcName)s] [line:%(lineno)d]:%(message)s',datefmt="%Y-%m-%d %H:%M:%S",level="INFO"
)def ins_query(host,expr="node_disk_reads_merged_total"):start_ts = time.perf_counter()uri="http://{}/api/v1/query".format(host)g_parms = {"query": expr,}res = requests.get(uri, g_parms)if res.status_code!=200:msg = "[error_code_not_200]"logging.error(msg)returnjd = res.json()if not jd:msg = "[error_loads_json]"logging.error(msg)returninner_d = jd.get("data")if not inner_d:returnresult = inner_d.get("result")result_series = len(result)end_ts = time.perf_counter()for index,x in enumerate(result):msg = "[series:{}/{}][metric:{}]".format(index+1,result_series,json.dumps(x.get("metric"),indent=4))logging.info(msg)msg = "Load time: {}  Resolution: {}s   Result series: {}".format(end_ts-start_ts,15,result_series)logging.info(msg)
if __name__ == '__main__':ins_query("192.168.0.106:9090",expr='''max(rate(node_network_receive_bytes_total{origin_prometheus=~"",job=~"node_exporter"}[2m])*8) by (instance)''')

总结

可以将服务分组信息通过服务发现打入监控

  • 如之前举例的文件服务发现
[{"targets": ["172.20.70.205:9100"],"labels": {"account": "aliyun-01","region": "ap-south-1","env": "prod","group": "inf","project": "monitor","stree_gpa": "inf.monitor.prometheus"}},{"targets": ["172.20.70.215:9100"],"labels": {"account": "aliyun-02","region": "ap-south-2","env": "prod","group": "inf","project": "middleware","stree_gpa": "inf.middleware.kafka"}}
]
  • 通过查询的时候按照 stree_gpa等标签 聚合,就可以得到每个业务组的cpu和内存数据

生成业务资源利用率报表

  • 最近1天的利用率数据
业务组名称cpu平均值cpu最大值cpu最小值mem平均值mem最大值mem最小值
inf.bigdata.kafka203010405035
inf.bigdata.spark406020608050
web.ad.engine15208203516
  • 由上表可知 inf.bigdata.spark利用率较好, web.ad.engine很差
  • web.ad.engine可以缩容,或者减配置

本节重点总结 :

  • 纵向聚合VS横向聚合
  • 用最近1天的内存平均使用率等出业务资源利用率报表
    • 为了降低成本
    • 合理配置资源

http://www.ppmy.cn/news/1558694.html

相关文章

概率论基础知识点公式汇总

1 概率论的基本概念 1.1 随机事件 样本空间 S S S:将随机实验所有可能的记过组成的集合称为样本空间。样本点:样本空间的每个结果称为样本点。随机试验、随机事件 E E E、基本事件、必然事件、不可能事件、对立事件 A A ‾ A\overline{A} AA、古典概型…

设计模式01:创建型设计模式之单例、简单工厂的使用情景及其基础Demo

一、单例模式 1.情景 连接字符串管理 2.好处 代码简洁:可全局访问连接字符串。性能优化:一个程序一个连接实例,避免反复创建对象(连接)和销毁对象(连接)。线程安全:连接对象不会…

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术,从一张模型图像中提取安全环的特征,并在后续图像中识别多个实例,完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…

GitCode 光引计划投稿|智能制造一体化低代码平台 Skyeye云

随着智能制造行业的快速发展,企业对全面、高效的管理解决方案的需求日益迫切。然而,传统的开发模式往往依赖于特定的硬件平台,且开发过程繁琐、成本高。为了打破这一瓶颈,Skyeye云应运而生,它采用先进的低代码开发模式…

CSS系列(31)-- Backdrop Filter详解

前端技术探索系列:CSS Backdrop Filter详解 🎨 致读者:探索现代UI效果的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Backdrop Filter,这个强大的背景处理特性。 基础效果 🚀 模糊效果 …

C#-调用C++接口

一.静态&动态装载DLL C中接口通过编译为DLL对外提供调用,C#需要将DLL加载至本应用才可实现C接口调用. 1.静态装载 C#应用程序在编译为可执行exe时将外部DLL装载至本应用中,例如在CSC编译指令中添加相关参数可实现DLL引用. csc /reference:user32.dll /out:HelloWorld.exe 2…

Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)

教程概述 本教程先是幽络源初步教学分析掌阅书籍的网络结构,最后提供完整的爬取源码与使用说明,并展示结果,切记勿将本教程内容肆意非法使用。 原文链接:Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明…

Java抽象工厂+单例模式

在前端时间开发过程中,有这样一个业务场景:A;B两家厂商设备进行设备信息的同步功能。 根据实际场景,做了抽象工厂+单例模式实现调用工厂时,生成不同的具体业务引用对象,实现方法的调用。 概念: 抽象工厂模式通过接口或抽象类来创建一系列相关或依赖对象。它定义了一组工…