当前位置: 首页 > 知识库问答 >
问题:

用千分尺为动态度量设置描述的干净方法是什么?

孟彦
2023-03-14
<MetricType>.builder(<metricName>).description(<description>).tags(<tagsArray>).register(<meterRegistry>)
<meterRegistry>.Counter(<counterName>, <Pairs of labels and their values>).increment()

我能想到的唯一解决方案是在启动度量服务时将描述存储在某个地方。然后围绕increment方法创建一个包装器。现在,当用户调用包装器时,调用register方法(使用存储的描述),然后调用increment方法。afaik,register方法创建一个新的度量,如果它不存在,否则返回现有的度量。

同样的问题在Prometheus中可以很容易地解决,因为他们有一个寄存器方法,允许您设置所有的标签(即仅键)和描述。然后增量方法只需要这些标签的值。

千分尺是否提供类似的功能?为一个简单的应用程序创建包装似乎非常不方便。考虑到micrometer已经是Prometheus(和其他检测服务)的包装器,我不想在它周围创建包装器。

Counter.builder("requests")
    .description("tracks requests from clients)
    .tags("type", "alpha")
    .register(meterRegistry);

然后,无论我想使用这个度量,我都可以运行以下代码:

meterRegistry.Counter("request", "type", <valueOfType>).increment()

我担心的是,在这个解决方案中,我只初始化alpha类型,这似乎不对,因为这是唯一的类型。另一个选择是注册所有3个类型,但是,这是假设所有可能的值在运行时都已知。如果在运行时发现这些值,则此解决方案完全失败,现在您必须像上面描述的那样使用带有包装器的解决方案,或者完全忘记描述。

共有1个答案

公良凯
2023-03-14

当我尝试使用计数器和单个标记的多个值时,我遇到了类似的问题。

以下是我的解决方案:

@RestController
public class HelloController {

    private final Counter.Builder counter;
    private MeterRegistry registry;

    public HelloController(MeterRegistry registry) {
        this.counter = Counter.builder("counter").description("A description");
        this.registry = registry;
    }

    @GetMapping("/count")
    public String count1() {
        counter.tag("tag2", "value1").register(registry).increment();
// I don't provide more description here, but I need to use .register('registry') at each call.
        return "Count";
    }

    @GetMapping("/count2")
    public String count2() {
        counter.tag("tag2", "value2").register(registry).increment();
        return "Count";
    }

}
  • 注意:我必须调用counter...register(registry),以便有一个描述和多个标记值。
 类似资料:
  • 是否有任何方法可以测量实用程序如何使用线程池?我已经浏览了代码,但还没有看到任何直接的选项。

  • 我有一个Spring Boot应用程序,我有以下依赖关系:

  • 问题内容: 我需要使用$ resource 发送带有我的DELETE请求的请求正文 我可以看到的唯一方法是更改​​: https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js 从 至 有没有更好的方法来覆盖此?就像您更改内容类型标头时一样,您可以执行以下操作: 或类似的东西…我已经用谷歌搜索了一下,但也

  • 问题内容: 我在标准库上进行了查找,但未发现类似问题。因此,有没有一种方法可以在不滚动我自己的函数的情况下进行以下操作?如果没有内置的方法,那么如果有人编写了精美的函数,奖励积分就可以了。 问题答案: 将用作:

  • 我试图理解如何在docker中正确添加非root用户,并给他们sudo权限。假设我当前的Ubuntu 18.04系统中janedoe是sudo用户。我想创建一个docker映像,在其中我想添加janedoe作为非root用户,在需要时可以拥有sudo权限。由于我和Docker都是Linux系统新手,我通常希望有人通过一个例子来解释如何做到这一点。 我理解的是,每当我在Dockerfile中发出命令

  • 问题内容: 我有一个DOM元素,应用了以下一些/全部效果: 我正在编写一个调整此元素大小的jQuery插件,我需要暂时禁用这些效果,以便可以平滑地调整其大小。 临时禁用这些效果(然后重新启用它们)的最优雅的方法是什么,因为它们可能是由父母应用的,也可能根本没有应用。 问题答案: 简短答案 使用此CSS: 加上这个JS(没有jQuery)… 或者这个带有jQuery的JS … …或使用您正在使用的任