spring-boot - 用千分尺查询数据

标签 spring-boot kotlin influxdb micrometer spring-micrometer

我们有这个奇特的监控系统,我们的 spring-boot 服务通过千分尺将指标发布到流入数据库。有一个不错的 grafana 前端,但问题是我们现在处于这样一个阶段:我们必须在其他服务中提供其中一些指标来进行推理。 整个体系是我的前任建立的,我现在对它的了解几乎为零。我可以添加和发布新指标,但我一生都无法从中获得任何东西。

这是一个简短的示例: 我们的网关会为相机向其发送的每张图像增加计数器。计数器的定义如下所示:

private val imageCounters = mutableMapOf<String, Counter>()
private val imageCounter = { camera: String ->
    imageCounters.getOrPut(camera) {
        registry.counter("gateway.image.counter", "camera", camera)
    }

计数器在代码中递增,如下所示:

imageCounter("placeholder-id").increment()

现在我们正在改进计费,计费服务需要知道某个摄像机有多少图像通过了网关。因此,我尝试的第一件事自然是这样的:

class MonitoringService(val metrics: MeterRegistry) {

    private val log = logger()
    private val imageCounters = mutableMapOf<String, Counter>()
    private val imageCounter = { camera: String ->
        imageCounters.getOrPut(camera) {
            metrics.counter("gateway.image.counter", "camera", camera)
        }
    }

    fun test() {
        val test = imageCounter("16004").count()
        val bugme = true
        log.info("influx test: $test")
    }
}

这有两个问题:首先它总是返回零,所以显然我做错了。我就是不明白那是什么。 其次,即使它会返回一个合理的值,我也没有找到一种方法来限制时间(我通常需要当月上传的图像数量)。

令我担心的是,虽然我可以找到很多有关如何使用千分尺发布数据的文档,但我似乎找不到任何有关如何查询的文档。 Micrometer是不是只能发布监控数据,不能查询? .getOrPut() 方法表明它可以同时执行这两种操作,但据我所知,由于查询数据似乎没有记录,这可能是我的误解。

有一个 Java 的 influx-db 客户端,我接下来会尝试一下,但最终我不希望我的应用程序中的多个组件仅仅因为我不熟悉而做同样的事情我继承的工具。

最佳答案

InfluxMeterRegistry 是一个 StepMeterRegistry,因此从中创建的 Counter 是一个 StepCounterStepCounter.increment() 增加当前步骤中的计数,但 StepCounter.count() 将返回上一步中的计数。这就是为什么您在 count() 中看到 0,尽管您已经调用了 increment() 多次。您可以在下一步中看到它,默认的步骤是1分钟,所以您必须等待1分钟才能看到它。

请参阅以下测试以了解其工作原理:https://github.com/izeye/sample-micrometer-spring-boot/blob/influx/src/test/java/com/izeye/sample/InfluxMeterRegistryTests.java

关于spring-boot - 用千分尺查询数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52661701/

相关文章:

java - jar 文件的 shell 脚本

css - VersionResourceResolver 破坏 CSS 相对 URL

未调用 Android MotionLayout 转换监听器

内联函数无法访问非公共(public) API : @PublishedApi vs @Suppress vs @JvmSynthetic

docker 重启时数据库丢失

java - 为什么spring boot maven插件需要一个主类来打包war?

java - @Component Scan 无法在 Spring Boot 中跨 jar 和 war 使用 @Component

kotlin - 在 Kotlin 中组合/合并数据类

excel - 通过 WinHttpRequest 将多个测量值发布到 influxDB 的正确行分隔符是什么?

python - django 时间序列 postgres 初学者