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

【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)

prometheus 出现NaN场景以及如何去除干扰(Not a Number)

1、在prometheus中使用NaN来表示无效数值或者结果

场景:

一些监控系统使用 NaN 作为空值或缺失值,但在 Prometheus 中 NaN 只是另一个浮点值。Prometheus 表示缺失数据的方式是让数据缺失。Prometheus 支持所有 64 位浮点值,包括正无穷大、负无穷大和 NaN。

出现NaN的情况示例:

  • 除以分母0

  • 用作过时处理一部分的标记。

    然而,这是一个实现细节。在过时实现中使用的特定位模式恰好是 NaN,这对 PromQL 用户来说永远是不可见的,尽管远程存储实现如果自己做任何数学运算,可能必须关心这一点。

NaN参数运算时:

因为任何涉及 NaN 的数学都会返回 NaN。根据标准浮点语义,您可以利用 NaN 的独特属性 NaN != NaN。然而,这种情况的用例通常是平均值或分位数的平均值,这两者在统计上都不是有效的。

PromQL 中有些地方对 NaN 值进行了特殊处理,以便行为符合预期。min并max会分别认为 NaN 值大于/小于所有其他数字。sort并且sort_desc实际上并不对称,NaN 总是排在底部。类似地,bottomk和topk将分别认为 NaN 值大于/小于所有其他数字。换句话说,只要你至少有k非 NaN 值,bottomk就topk不会返回 NaN。在某一时刻changes还需要修复错误才能NaN正确处理。

2、如何处理NaN

2-1、即先求和再除。一般来说,总是最后进行除法

不要用:

avg by (job)(rate(my_sum[5m])/ rate(my_count[5m])
)

要用:

  sum by (job)(rate(my_sum[5m]))
/sum by (job)(rate(my_count[5m]))

2-2、如果 NaN 设法进入对值进行数学运算的函数或运算符的输入,则结果将为 NaN。在这种情况下,消除 NaN 的来源,而不是尝试解决下游的不良数据。

注意:这也是为什么部分开源dashboard中,要对源数据取>0就是要过滤掉NaN,以避免由于个别NaN数值,导致整个Sql的结果为NaN

example:

sum (irate (memcached_commands_total{instance=“memcached-instance”}[5m])) by (command)

结果:

{command="delete"}  0
{command="flush"}   0
{command="get"} 62.733333333333334
{command="incr"}    0
{command="set"} 93.43333333333334
{command="touch"}   NaN
{command="cas"} 0
{command="decr"}    0

sum (irate (memcached_commands_total{instance=“memcached-instance”}[5m]))

{}  NaN

原因: command="touch"是NaN,因此整个计算是NaN

解决办法: 从计算源中去除NaN

sum (irate (memcached_commands_total{instance="memcached-instance"}[5m]) > 0)

3、为什么不设置成 0 , 而设置成 NaN

某些情况下0是正常值,代表某种特殊情况,这样就会混淆

4、Prometheus的函数对NaN处理逻辑:

如果 Metrics 的值里面混有 NaN 的值, 那么会直接污染整个结果, 导致输出的结果就像上面那样, 全部都是 NaN. rate 和 stddev 函数同理

// sum
func funcSumOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) Vector {return aggrOverTime(vals, enh, func(values []Point) float64 {var sum float64for _, v := range values {sum += v.V                   // 这里可以看到, 直接累加全部的收集到的 Metrics 的值, }return sum})
}// avg
func funcAvgOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) Vector {return aggrOverTime(vals, enh, func(values []Point) float64 {var mean, count float64for _, v := range values {count++mean += (v.V - mean) / count  // 这里也是类似, 把和现在差值直接加上去}return mean})
}

max 和 min 函数不受影响:

// Max
func funcMaxOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) Vector {return aggrOverTime(vals, enh, func(values []Point) float64 {max := values[0].Vfor _, v := range values {if v.V > max || math.IsNaN(max) {  // 过滤 NaNmax = v.V}}return max})
}// Min
func funcMinOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) Vector {return aggrOverTime(vals, enh, func(values []Point) float64 {min := values[0].Vfor _, v := range values {if v.V < min || math.IsNaN(min) {  // 过滤 NaNmin = v.V}}return min})
}

相关文章:

【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)

prometheus 出现NaN场景以及如何去除干扰(Not a Number) 1、在prometheus中使用NaN来表示无效数值或者结果 场景&#xff1a; 一些监控系统使用 NaN 作为空值或缺失值&#xff0c;但在 Prometheus 中 NaN 只是另一个浮点值。Prometheus 表示缺失数据的方式是让数据缺失。Prom…...

【计算机网络】网络层协议 -- ICMP协议

文章目录 1. ICMP协议简介2. ICMP协议格式3. ping命令4. ping命令与端口号没有关系&#xff01;&#xff01;&#xff01;5. traceroute命令 1. ICMP协议简介 ICMP&#xff08;Internet Control Message Protocol&#xff0c;控制报文协议&#xff09;&#xff0c;用于在IP主机…...

机器学习---facebook的案例学习

import pandas as pd import matplotlib.pyplot as plt import seaborn as sbn from sklearn.model_selection import train_test_split,GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier # 使用pandas读…...

OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展。除了图像输入之外&#xff0c;最近的研究成果还结合了文本模式来提高性能。添加文本模态后&#xff0c;通用检测算法的一些非常好的属性开始出现&#xff0c;例如&#xff1a; 可以利用大量…...

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日&#xff0c;周三晚上 今天我看到了这样的两行代码&#xff1a; std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问&#xff1a; 为什么有时候用ios_base::o…...

PostgreSQL 使用SQL

发布主题 设置发布为true 这个语句是针对 PostgreSQL 数据库中的逻辑复制功能中的逻辑发布&#xff08;Logical Publication&#xff09;进行设置的。 PostgreSQL 中&#xff0c;逻辑复制是一种基于逻辑日志的复制方法&#xff0c;允许将数据更改从一个数据库实例复制到另一…...

Shell编程基础(十四)文本三剑客(grep)

文本三剑客&#xff08;grep&#xff09; 使用场景基本使用返回值参数 使用场景 主要用于查找&#xff0c;过滤文本数据&#xff1b;该数据可以来自文件&#xff0c;也可以来自管道流等等。 grep除了原有的实现&#xff0c;后来还出现了以下扩展实现 egrep&#xff1a;支持扩展…...

Linux root用户执行修改密码命令,提示 Permission denied

问题 linux系统中&#xff08;ubuntu20&#xff09;&#xff0c;root用户下执行passwd命令&#xff0c;提示 passwd: Permission denied &#xff0c;如下图&#xff1a; 排查 1.执行 ll /usr/bin/passwd &#xff0c;查看文件权限是否正确&#xff0c;正常情况是 -rwsr-xr…...

Java面向对象学习第三部分

一、Static修饰符 static是静态的意思&#xff0c;基本概念如下&#xff1a; Static分类&#xff1a; 一般我们分类都是按照是否使用static修饰进行分类。分为静态变量&#xff08;类变量&#xff09;、实例变量。 静态变量和实例变量的比较&#xff1a; 比较&#xff0c;…...

python+vue生成条形码码并展示

需求 最近想做一个小工具&#xff0c;大概要实现这样的效果&#xff1a;后端生成条形码后&#xff0c;不保存到服务器&#xff0c;直接返回给前端展示。 大概思路是&#xff0c;通过 python-barcode库 生成条码的字节流&#xff0c;生成字节流后直接编码成base64格式返回给前…...

在线高精地图生成算法调研

1.HDMapNet 整体的网络架构如图所示&#xff0c;最终的Decoder输出三个分支&#xff0c;一个语义分割&#xff0c;一个embedding嵌入分支&#xff0c;一个方向预测。然后通过后处理将这些信息处理成向量化的道路表示。 img2bev的方式之前有IPM&#xff0c;通过假设地面的高度都…...

【干货】商城系统的重要功能特性介绍

电子商务的快速发展&#xff0c;商城系统成为了企业开展线上销售的重要工具。一款功能强大、用户友好的商城系统能够有效提升企业的销售业绩&#xff0c;提供良好的购物体验。下面就商城系统的重要功能特性作一些简单介绍&#xff0c;帮助企业选择合适的系统&#xff0c;打造成…...

MYSQL06高级_为什么使用索引、优缺点、索引的设计、方案、聚簇索引、联合索引、注意事项

文章目录 ①. 为什么使用索引②. 索引及其优缺点③. InnoDb - 索引的设计④. InnoDb中的索引方案⑤. 索引 - 聚簇索引⑥. 索引 - 二级索引⑦. B树索引的注意事项⑧. MyISAM中索引方案 ①. 为什么使用索引 ①. 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比去图书馆…...

LeetCode 130. 被围绕的区域

题目链接&#xff1a;130. 被围绕的区域 题目描述 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 ‘X’ 和 ‘O’ &#xff0c;找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例1&#xff1a; 输入&#xff1a;board [[“…...

python中2等于2.0吗,python中【1:2】

本篇文章给大家谈谈python中2等于2.0吗&#xff0c;以及python中【1:2】&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 变量和赋值 Python中的变量不需要声明, 直接定义即可. 会在初始化的时候决定变量的 “类型” 使用 来进行初始化和赋值操作 定义变量时…...

【2023年11月第四版教材】《第2章-信息技术发展(第一部分)》

《第2章-信息技术发展&#xff08;第一部分&#xff09;》 章节说明1 计算机软硬件2 计算机网络2.1 网络的作用范围2.2 OSI模型2.3 广域网协议2.4 网络协议2.5 TCP/IP2.6 软件定义网络&#xff08;SDN&#xff09;2.7 第五代移动通信技术 章节说明 大部分为新增内容&#xff0…...

【CSS】说说对BFC的理解

目录 一、概念 二、BFC的布局规则 三、设置BFC的常用方式 四、BFC的应用场景 1、解决浮动元素令父元素高度坍塌的问题 2、解决非浮动元素被浮动元素覆盖问题 3、解决外边距垂直方向重合的问题 五、总结 一、概念 我们在页面布局的时候&#xff0c;经常出现以下情况&am…...

ES6学习-Class类

class constructor 构造方法 this 代表实例对象 方法之间不需要逗号分隔&#xff0c;加了会报错。 typeof Point // "function" Point Point.prototype.constructor // true类的数据类型就是函数&#xff0c;类本身就指向构造函数。 类的所有方法都定义在类的pr…...

C语言经典小游戏之扫雷(超详解释+源码)

“少年气&#xff0c;是历尽千帆举重若轻的沉淀&#xff0c;也是乐观淡然笑对生活的豁达&#xff01;” 今天我们学习一下扫雷游戏怎么用C语言来实现&#xff01; 扫雷小游戏 1.游戏介绍2.游戏准备3.游戏实现3.1生成菜单3.2游戏的具体实现3.2.1初始化棋盘3.2打印棋盘3.3布置雷…...

算法leetcode|67. 二进制求和(rust重拳出击)

文章目录 67. 二进制求和&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 67. 二进制求和&#xff1a; 给你两个二进制字符串 a 和 b &a…...

小白也能学会:MogFace透明蒙版可视化,人脸检测不再难

小白也能学会&#xff1a;MogFace透明蒙版可视化&#xff0c;人脸检测不再难 1. 为什么需要透明蒙版可视化&#xff1f; 想象一下这样的场景&#xff1a;你拍了一张全家福&#xff0c;想用AI工具检测照片中有多少人。传统的检测工具会在每个人脸上画一个绿色的方框&#xff0…...

Ubuntu14.04下用USRP B100实现多模式无线传输:从PSK到QAM的实战配置

Ubuntu 14.04环境下USRP B100多模式无线传输实战指南 在软件定义无线电(SDR)领域&#xff0c;USRP设备配合GNU Radio软件平台已经成为研究和开发无线通信系统的黄金标准组合。本文将带您深入探索如何在Ubuntu 14.04系统中配置USRP B100硬件&#xff0c;实现从基础PSK到复杂QAM等…...

KEPServerEX与SQLServer数据库的无缝集成指南

1. KEPServerEX与SQLServer集成的核心价值 在工业自动化和数据采集领域&#xff0c;KEPServerEX作为领先的通信平台&#xff0c;与SQLServer数据库的集成能够实现设备数据到关系型数据库的高效流转。这种组合特别适合需要长期存储设备运行数据、生成生产报表或进行数据分析的场…...

3步告别桌面混乱:开源免费的NoFences桌面分区管理工具

3步告别桌面混乱&#xff1a;开源免费的NoFences桌面分区管理工具 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在杂乱无章的桌面图标中浪费宝贵时间&#x…...

提升开发效率:Android Studio零障碍IDE本地化配置指南

提升开发效率&#xff1a;Android Studio零障碍IDE本地化配置指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 开发人员在使用…...

OpenClaw数据安全:Qwen3.5-4B-Claude本地处理敏感合同

OpenClaw数据安全&#xff1a;Qwen3.5-4B-Claude本地处理敏感合同 1. 为什么法律行业需要本地化AI处理 去年我参与了一个法律科技项目&#xff0c;团队最初尝试用公有云API处理合同文本时&#xff0c;遭遇了客户对数据出海的强烈抵触。某次演示中&#xff0c;当法务总监看到合…...

Amlogic S9XXX设备系统改造完全指南:从入门到进阶

Amlogic S9XXX设备系统改造完全指南&#xff1a;从入门到进阶 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk35…...

Z-Image-Turbo商业应用探索:稳定可靠的AI绘画方案推荐

Z-Image-Turbo商业应用探索&#xff1a;稳定可靠的AI绘画方案推荐 1. 商业级AI绘画的新选择 在数字内容创作需求爆炸式增长的今天&#xff0c;Z-Image-Turbo作为阿里通义实验室开源的文生图模型&#xff0c;凭借其卓越的稳定性和高效性&#xff0c;正在成为商业应用领域的新宠…...

别再手动调格式了!用C#和FastReport.Net搞定标签批量打印与90度旋转(附完整源码)

C#与FastReport.Net实战&#xff1a;打造高可用的标签批量打印与旋转解决方案 在仓储管理、物流配送和零售价签打印等场景中&#xff0c;开发人员经常需要处理各种规格的标签打印需求。传统的手动调整方式不仅效率低下&#xff0c;而且难以应对频繁变化的业务需求。本文将分享如…...

Buck电路设计避坑指南:为什么你的小信号模型仿真总是不收敛?

Buck电路小信号模型仿真收敛问题实战解析 在电力电子系统设计中&#xff0c;Buck变换器的小信号模型仿真对于理解系统动态特性至关重要。然而&#xff0c;许多工程师在从理论转向实践时&#xff0c;常常遇到仿真不收敛、波形异常等问题。本文将深入剖析这些问题的根源&#xff…...