【博客708】victoriametrics如何处理counter跳变

2024-03-31 15:04

本文主要是介绍【博客708】victoriametrics如何处理counter跳变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

victoriametrics如何处理counter跳变

背景

监控中我们经常会使用一些counter类型的metrics来计算速率,比如:rate(https_request_total)
但是如果我们的服务突然由于异常导致重启了,那么这时候counter会重新从0开始计算,那么这时候就会有问题,假设我们原来https_request_total是计数到500,然后服务异常重启,启动后https_request_total是0,那么此时如果没有counter跳变的处理,那么rate(https_request_total)就会变成负数,我们期待的是当异常重启后,能够在原来基础上,从500继续计数,但是我们服务又不会记得上一次的值(不是不能处理,其实存下来每次启动读取也能实现,只是不应该把这部分基建层的逻辑侵入到业务里面去),所以就依赖于监控方案来处理!

victoriametrics对counter跳变的处理

counter重置会补上前面的值,同时如果跳变只是一小下,那么补上差值即可,不需要直接加上前一个值:

更多细节的相关issue:https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2787

func removeCounterResets(values []float64) {// There is no need in handling NaNs here, since they are impossible// on values from vmstorage.if len(values) == 0 {return}var correction float64prevValue := values[0]for i, v := range values {d := v - prevValueif d < 0 {if (-d * 8) < prevValue {// This is likely a partial counter reset.// See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2787// 这里做了部分reset的优化correction += prevValue - v} else {// 这里叠加了上一个值,也是就在原来基础上继续计算counter// 这就是为什么服务重启后,明明counter变小了,但是对counter进行计算却不会出错的原因 correction += prevValue}}prevValue = vvalues[i] = v + correction}
}

类似的,victoriametrics会自动处理counter的函数:

// rollupFuncsRemoveCounterResets contains functions, which need to call removeCounterResets
// over input samples before calling the corresponding rollup functions.
var rollupFuncsRemoveCounterResets = map[string]bool{"increase":            true,"increase_prometheus": true,"increase_pure":       true,"irate":               true,"rate":                true,"rollup_increase":     true,"rollup_rate":         true,
}

这篇关于【博客708】victoriametrics如何处理counter跳变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/864619

相关文章

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Java异常捕获及处理方式详解

《Java异常捕获及处理方式详解》异常处理是Java编程中非常重要的一部分,它允许我们在程序运行时捕获并处理错误或不预期的行为,而不是让程序直接崩溃,本文将介绍Java中如何捕获异常,以及常用的异常处... 目录前言什么是异常?Java异常的基本语法解释:1. 捕获异常并处理示例1:捕获并处理单个异常解释:

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的