千分尺 Timer.start/stop 和 Timer.record 之间的区别

Posted

技术标签:

【中文标题】千分尺 Timer.start/stop 和 Timer.record 之间的区别【英文标题】:Difference between Micrometer Timer.start/stop and Timer.record 【发布时间】:2019-12-06 12:21:29 【问题描述】:

我想检查数据库命中(多个数据库)和请求处理的延迟。 Timer.SampleTimer.record 哪个更好?

我正在使用以 Prometheus 为基础的千分尺。

【问题讨论】:

虽然大多数地方都可以使用,但如果您提供一些代码 sn-ps 可能会对建议有所帮助 【参考方案1】:

主要区别是在manually stop录音中添加选项

您还可以将开始状态存储在示例实例中,以便稍后停止。该示例根据注册表的时钟记录开始时间。启动样例后,执行要计时的代码,在样例上调用 stop(Timer) 结束操作。

【讨论】:

【参考方案2】:

当您计算出事件的持续时间时使用 Timer.record。

default void record(Duration duration)

您通常会使用 Timer.Sample 来传递 Sample 以确定发布指标的点,而不必在完全相同的位置。您还可以更精细地控制使用 Timer 对象发布的内容。 这是一个两步过程。

    在事件开始之前创建一个示例以使用

    返回一个示例对象
    static Sample start(Clock clock) ..
    

    在活动完成后使用 Sample.stop 停止样本并推送指标

    public long stop(Timer timer) ..
    

例如来自TimedAspect -

    Timer.Sample sample = Timer.start(registry);
    try 
        return pjp.proceed();
     finally 
        sample.stop(Timer.builder(timed.value())
                .description(timed.description().isEmpty() ? null : timed.description())
                .tags(timed.extraTags())
                .tags(tagsBasedOnJoinpoint.apply(pjp))
                .publishPercentileHistogram(timed.histogram())
                .publishPercentiles(timed.percentiles().length == 0 ? null : timed.percentiles())
                .register(registry));
    

【讨论】:

以上是关于千分尺 Timer.start/stop 和 Timer.record 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用千分尺在telegraf中获取kafka流和骆驼指标

千分尺和普罗米修斯计时器作为速率

千分尺指标和 Application Insights java 代理 - 指标会累积,尽管它们不应该(或者我错过了啥)

千分尺@Timed 注释

不发送使用千分尺的石墨标签

春季启动普罗米修斯千分尺 - 仪表不更新