指标名称已存在-指标注册表

时间:2019-04-18 19:30:07

标签: jmx spring-boot-actuator codahale-metrics

我正在使用度量标准注册表将度量标准登录到jmx。我使用下面的代码

protected void submitMetric(String metricName, long value) {

                mr.register(metricName, new Gauge<Long>() {

                    @Override
                    public Long getValue() {
                        return value;
                    }

                });
}

第一次正常。如果我再次尝试,则会收到错误消息 名为*****的指标已经存在。但是我想为发送到控制器的每个请求记录相同度量的值,以便可以在Grafana中进行可视化。

有什么办法可以为每个请求记录相同度量标准名称的值吗?

还如何每1分钟检查一次记录的所有数据点。我们应该对每分钟的值求和吗?我在metrics.xml中有以下内容

<publish name="****">
            <delay>60</delay>
            <unit>SECONDS</unit>
        </publish>

1 个答案:

答案 0 :(得分:0)

通常,您要创建一个量规并注册一次,例如,通过AtomicLong创建量规。然后,您只需在AtomicLong上设置值即可更新量规的值。在这种情况下,由于您要按名称访问量规,因此可以保留一张AtomicLongs的地图,并在用新量规更新该地图时注册该量规一次:

Microsoft.CodeAnalysis.Scripting.CompilationErrorException
  HResult=0x80131500
  Message=(1,34): error CS0103: The name 'X' does not exist in the current context
  Source=Microsoft.CodeAnalysis.Scripting
  StackTrace:
   at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.ThrowIfAnyCompilationErrors(DiagnosticBag diagnostics, DiagnosticFormatter formatter)
   at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.CreateExecutor[T](ScriptCompiler compiler, Compilation compilation, Boolean emitDebugInformation, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.Script`1.GetExecutor(CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.Script`1.RunAsync(Object globals, Func`2 catchException, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.RunAsync[T](String code, ScriptOptions options, Object globals, Type globalsType, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.Scripting.CSharpScript.EvaluateAsync[T](String code, ScriptOptions options, Object globals, Type globalsType, CancellationToken cancellationToken)
   at Trady.Form1.InitializeScriptEngineAsync() in C:\Users\idf\Form1.cs:line 79
   at Form1..ctor() in C:\Users\idf\Form1.cs:line 56
   at Trady.Program.Main() in C:\Users\idf\Program.cs:line 19