25.1 降低采集资源消耗的收益和无用监控指标的判定依据

news2024/11/24 5:28:34

本节重点介绍 :

  • 降低采集资源消耗的收益
  • 哪些是无用指标,什么判定依据
    • 通过 grafana的 mysql 表获取所有的 查询表达式expr
    • 通过 获取所有的prometheus rule文件获取所有的 告警表达式expr
    • 通过 获取所有的prometheus 采集器接口 获取所有的采集metrics
    • 计算可得到现在没用到的metrics列表
      • 计算方法为 所有采集到的-(告警的+看图的)

降低采集资源消耗的收益

  • 缓存系统内存使用降低
    • 监控系统为了加快查询速度会在各个环节上设置缓存
    • 那么如果采集指标过多,无疑会使缓存内存使用变多
  • 存储系统磁盘使用降低
    • 持久话存储的磁盘使用量和监控指标的数量是成正比的
  • 组件间网络传输流量降低
    • 更多的监控指标数据意味着,组件间网络传输流量更大
  • 查询速度提升降低
    • 更多的监控指标意味着查询的速度会被拖慢

收益实例

  • 分析cadvisor 和 node_exporter中可以被drop的指标及其采集方式,去掉后 采集qps下降25%
  • drop_result.png

哪些是无用指标,什么判定依据

  • 一句话就可以总结 :always collect ,never used

指标的使用

  • 看图使用
  • 告警使用

那么系统中除了看图和告警使用的指标理论上都可以去掉

  • 但是要注意的点是,有些指标今天没用到是还没发现它的意义
  • 有可能明天就会使用

具体的判定依据

看图侧

  • 假设所有的看图都配置在grafana中
  • 通过grafana 的dashboard 接口或者 grafana的 mysql 表获取所有的 查询表达式expr
  • image.png
  • 对应就是众多的promql,在其中解析出所有的metrics
  • 就可以获得看图侧的 metrics 列表 ,可以命名为graph_metrics_set
python脚本
  • 创建db对象连接grafana 数据库
  • 查询所有的 dashboard
  • 遍历dashboard中的panel 对象获取 expr对象
  • 将expr和prometheus metric 正则匹配,匹配到就是metric
# pip install sqlalchemy PyMySQL
import re
import json
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

METRIC_NAME_RE = re.compile(r'.*?([a-zA-Z_:][a-zA-Z0-9_:]*){.*?')

GRAFANA_SLAVE_DB_HOST = "172.20.70.205"
GRAFANA_SLAVE_DB_PORT = 3306
GRAFANA_SLAVE_DB_USER = "root"
GRAFANA_SLAVE_DB_PASS = "123123"


def init_grafana_db_session():
    engine = create_engine('mysql+pymysql://{}:{}@{}:{}/grafana'.format(
        GRAFANA_SLAVE_DB_USER,
        GRAFANA_SLAVE_DB_PASS,
        GRAFANA_SLAVE_DB_HOST,
        GRAFANA_SLAVE_DB_PORT))
    # 创建DBSession类型:
    dbSession = sessionmaker(bind=engine, autocommit=True)
    return dbSession()


def get_metrics_from_grafana_db():
    ds = init_grafana_db_session()
    res = ds.execute('select  data,slug from dashboard ')
    exprs = set()
    for r in res:
        try:
            data = json.loads(r[0])

            panels = data.get("panels")

            if not panels:
                continue
            for p in panels:
                if not p:
                    continue
                targets = p.get("targets")
                if not targets:
                    continue
                for i in targets:
                    ee = i.get("expr")

                    ddd = METRIC_NAME_RE.findall(ee)
                    exprs.update(set(ddd))
        except Exception as e:
            print(e)
    ss = sorted(list(exprs))
    print(ss)
    return ss


get_metrics_from_grafana_db()

image.png

告警侧

  • 获取所有的prometheus rule文件
  • 根据rule文件中的promql 解析出metrics,可以命名为 alert_metrics_set
python 脚本
  • 打开rule yaml 文件,逐行获取
  • 用正则匹配,匹配到的即为metric
import re

METRIC_NAME_RE = re.compile(r'.*?([a-zA-Z_:][a-zA-Z0-9_:]*){.*?')


def get_metrics_from_rule_file(rule_file):
    exprs = set()
    with open(rule_file, encoding='UTF-8') as f:
        for i in f.readlines():
            if not "expr" in i:
                continue
            ddd = METRIC_NAME_RE.findall(i)
            exprs.update(set(ddd))

    ss = sorted(list(exprs))
    print(ss)
    return ss


get_metrics_from_rule_file("rule.yml")

采集侧

  • 根据所有的采集器的接口获取其对应的metrics列表,对应接口如下
/api/v1/label/__name__/values
  • 意思是获取__name__标签的values列表,也就是所有的metircs_name
  • 截图
  • image.png
  • 可以命名为 scrape_metrics_set
python脚本
import requests


def get_metrics_names(host):
    url = "http://{}/api/v1/label/__name__/values".format(host)
    res = requests.get(url)
    print(res.status_code)
    exprs = res.json().get("data")
    if not exprs:
        return
    ss = sorted(list(exprs))
    print(ss)
    return ss


get_metrics_names("172.20.70.215:8091")

计算可得到现在没用到的metrics列表

  • 计算方法为 所有采集到的-(告警的+看图的)
scrape_metrics_set - (alert_metrics_set + graph_metrics_set)

本节重点总结 :

  • 降低采集资源消耗的收益
  • 哪些是无用指标,什么判定依据
    • 通过 grafana的 mysql 表获取所有的 查询表达式expr
    • 通过 获取所有的prometheus rule文件获取所有的 告警表达式expr
    • 通过 获取所有的prometheus 采集器接口 获取所有的采集metrics
    • 计算可得到现在没用到的metrics列表
      • 计算方法为 所有采集到的-(告警的+看图的)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot——静态资源访问的四种方式

1.默认的静态资源目录 /static /public /resources /META-INF/resources 动态资源目录:/templates 2.resources静态资源目录图片存放 3. 静态资源访问 3.1.通过路径访问静态资源 http://localhost:8080/a.jpg http://localhost:8080/b.jpg …

《深度学习》OpenCV 物体跟踪 原理及案例解析

目录 一、物体跟踪 1、什么是物体跟踪 2、步骤 1)选择跟踪算法 2)初始化跟踪器 3)在每个视频帧上执行跟踪 4)可选的重新初始化 3、原理 二、案例实现 1、完整代码 1)使用方式 2)运行结果 2、关…

用python做一个简单的画板

一,画板的介绍 画板(Paint Board)是一个提供用户绘图、涂鸦和创作的平台。现代数字画板通常是由软件程序实现的,具有多种功能。以下是画板的一些主要特征和功能: 1. 基本绘图工具 画笔和铅笔:用户可以选…

Java——数组的定义与使用

各位看官:如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论,感谢您的支持!!! 一:数组的概念以及定义,初始化 1.1:数组概念以及定义 数组概念:可以看成…

红黑树:c++实现

1. 红⿊树的概念 红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。 通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路 径⻓出2倍,因⽽是接近平…

用LaTeX写一篇帅帅的算法学习题解

前言 先来看看用 LaTeX \text{LaTeX} LaTeX 写出来的题解是啥样,内容是瞎写的。 前提知识与环境 默认已经掌握了 LaTeX \text{LaTeX} LaTeX 的一些用法,特别是公式如何写,如果你对这块还是很了解,可以先学着使用 Typora \…

DEEP TEMPORAL GRAPH CLUSTERING.md

ICLR23 推荐指数: #paper/⭐ 原因的话,可以找找前人的一篇文章(可以看,但是当你阅读前人文章会发现。) 动机/优点 很明确,时序图只需要考虑时间相近的点,因此开销特别小。但是邻接矩阵,就要考虑所有点的关…

Dockerfile最佳实践:如何创建高效的容器

在微服务和云计算时代,Docker就已经成为应用开发和部署不可或缺的工具。如今虽处大模型时代,但这些基础技术仍然是我们需要掌握的。 容器化允许开发者将应用程序及其依赖打包到一个单一的、可移植的单元中,确保了可预测性、可扩展性和快速部…

反射机制(Reflection)

1. 反射 Java的反射机制(reflection)是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反…

创建一个c#程序,实现字符串类型转整数类型

首先,创建一个c#程序 在代码编辑器中编写代码,点击Run按钮或者按下F5键来运行程序。 下面,编写将字符串类型转换为整数类型的代码。 sing System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Task…

安装samples/1_Utilities/deviceQuery等文件

本文章摘抄来自https://zhuanlan.zhihu.com/p/666647168 从cuda11.6开始cuda toolkit就不自带cuda-samples了,而deviceQuery又是cuda-sample的一个子库,所以需要自己手动装一下。 我的系统是ubuntu20.04,已经安装了CUDA Toolkit 12.2。 第…

【深度学习】使用FasterRCNN模型训练自己的数据集(记录全流程

此处用的FasterRCNN模型使用的是B导的源码,读者可以去B站搜B导的视频进行了解和学习,视频中B导非常细心讲解了如何训练自己的数据集以及预测。 文章目录 前言一、准备数据集二、环境配置2.1 基础环境2.2 其他依赖包安装2.3 预训练权重下载 二、训练数据集…

程序员成长秘籍:是迈向管理巅峰,还是深耕技术架构?

专业在线打字练习平台-巧手打字通,只输出有价值的知识。 一 管理和架构 做技术的同学一般有两条职业发展路径,横向的管理路线和纵向的技术路线。管理路线对应的是管理岗,讲究的是排兵布阵,通过各种资源的优化配置发挥价值。技术路…

(Linux驱动学习 - 10).MISC驱动实验

一.MISC介绍 1.MISC定义 misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某 些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱 动,通常嵌套在 platform 总线驱动中&…

智能贴身监测,健康生活建议,圆道妙医智能手表体验

如今热衷于运动和健康生活的爱好者越来越多,相关的赛事等活动也是逐年增多,很多朋友为了能够直观的了解自己的健康状况,都会配备一款智能手表,这样戴在身上就可以随时了解自己的心率、血氧等数据。最近我尝试了一款圆道妙医推出的…

MobaXterm连接Cloudflare Tunnel内网穿透的SSH

背景 如官方文档所示,Cloudflare Tunnel要求我们对SSH客户端进行配置,使本地的cloudflared软件代理SSH才能连接。 存在问题 由于MobaXterm的Session实质为嵌入式PuTTY,不使用OpenSSH样式的配置文件(即~/.ssh/config&#xff09…

SpringBoot框架下购物推荐网站的设计模式与实现

3系统分析 3.1可行性分析 通过对本东大每日推购物推荐网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本东大每日推购物推荐网站采用JAVA作为开发语言&…

对层级聚类树进行模块分割,定位基因在哪个模块中

拷贝数据到 ImageGP (http://www.ehbio.com/Cloud_Platform/front/#/analysis?pageb%27Ng%3D%3D%27),并设置参数. ID untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011 ENSG000…

【ROS2实操二】服务通信

简介 服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即:一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。比如如下场景:机器人巡逻过程中&#xff0…

cuda入门学习

最近接触cuda 编程,记录一下。 1 工作实现一个【0-100)的加法 如果用python sum 0 for i in range(200):sumi print(sum)2 cuda 的一些简单的概念 一维情况下大概是这样的 (1个grid * 2个blocks * 4个thread) 3 代码直接上代码 我把100分为20个b…