Prometheus-从多实例服务中删除指标

时间:2020-07-20 21:31:37

标签: kotlin monitoring prometheus

我在Kotlin中编写了一个服务请求,该服务向其他服务发出了异步请求,他在我的另一个服务中称为回调。收到回调后,我将请求状态更新为已接收并完成请求过程。使用prometheus,当收到如下请求时,我创建了一个计数器来注册指标:

fun registryRequest(requestId: String){
    val counter = Metrics.counter(REQUEST_PENDING_CALLBACK_NAME,
            arrayListOf(Tag.of(REQUEST_PENDING_CALLBACK_TAG, requestId)))
    counter.increment()
}

当我收到回调时,我将删除指标,如下所示:

fun removeRegistryRequest(requestId: String) {
    var meterId = Meter.Id(REQUEST_PENDING_CALLBACK_NAME,
            Tags.of(Tag.of(REQUEST_PENDING_CALLBACK_TAG, REQUEST_PENDING_CALLBACK_NAME)),
    null, null, Meter.Type.COUNTER)
    val meters = Metrics.globalRegistry.meters
    meters.forEach {
        if(it.id.name == REQUEST_PENDING_CALLBACK_NAME 
           && it.id.tags.contains(Tag.of(REQUEST_PENDING_CALLBACK_TAG, requestId)))
            meterId = it.id
    }
    Metrics.globalRegistry.remove(meterId)
}

对于单个容器来说,它工作正常,但是当我复制实例时,Metric是容器A 中的注册表,但是回调到达容器B 中,为此指标未删除。 所以我的答案是,有什么建议可以在不使用数据库的情况下创建像这样的观测系统?我做对了吗

Obs .: REQUEST_PENDING_CALLBACK_NAMEREQUEST_PENDING_CALLBACK_TAG是电表名称和标签名称的常量。

0 个答案:

没有答案