【问题标题】:Eliminate specific value from Jmx exporter through config Yaml通过配置 Yaml 从 Jmx 导出器中消除特定值
【发布时间】:2021-01-08 03:30:03
【问题描述】:

这是当前的 Jmx 导出器 模式:

pattern: 'metrics<name=resilience4jCircuitbreakerState.name.(.*).state.(.*), type=gauges><>Value'
name: 'x.y.z.resilience4j.circuitbreaker.state'
labels: {name: "$1", kind: "$2" }
type: GAUGE

电流输出:

x_y_z_resilience4j_circuitbreaker_state{kind="open",name="a",} 0.0
x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="b",} 1.0
x_y_z__resilience4j_circuitbreaker_state{kind="half_open",name="c",} 0.0
x_y_z__resilience4j_circuitbreaker_state{kind="half_open",name="d",} 0.0
x_y_z__resilience4j_circuitbreaker_state{kind="forced_open",name="e",} 0.0
x_y_z__resilience4j_circuitbreaker_state{kind="disabled",name="f",} 0.0
x_y_z__resilience4j_circuitbreaker_state{kind="disabled",name="g",} 0.0
x_y_z__resilience4j_circuitbreaker_state{kind="forced_open",name="h",} 0.0
x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="i",} 1.0
x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="j",} 1.0

实际上效果很好。但为了提高基数,我们决定不公开修改 Yml 的 0.0 值(如果有的话)。

上述样本的预期输出是,

x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="b",} 1.0
x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="i",} 1.0
x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="j",} 1.0

欢迎在下方评论。

【问题讨论】:

    标签: java yaml prometheus jmx sre


    【解决方案1】:

    看起来每个name 都有5 个x_y_z__resilience4j_circuitbreaker_state 指标,每个指标都有不同的kind 标签,一个的值为1.0,其他的值为0.0

    在这种情况下,如果您不公开 0.0 并且断路器在所有状态中发生更改,所有指标都将报告 1.0

    要减少基数,您应该删除kind 标签并将值设置为状态。

    而不是这个:

    x_y_z__resilience4j_circuitbreaker_state{kind="disabled",name="a",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="a",} 1.0
    x_y_z__resilience4j_circuitbreaker_state{kind="open",name="a",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="half_open",name="a",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="forced_open",name="a",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="disabled",name="b",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="b",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="open",name="b",} 1.0
    x_y_z__resilience4j_circuitbreaker_state{kind="half_open",name="b",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="forced_open",name="b",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="disabled",name="c",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="closed",name="c",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="open",name="c",} 0.0
    x_y_z__resilience4j_circuitbreaker_state{kind="half_open",name="c",} 1.0
    x_y_z__resilience4j_circuitbreaker_state{kind="forced_open",name="c",} 0.0
    

    你应该这样报告:

    x_y_z__resilience4j_circuitbreaker_state{name="a"} 1.0 # 1 represents "closed"
    x_y_z__resilience4j_circuitbreaker_state{name="b"} 2.0 # 2 represents "open"
    x_y_z__resilience4j_circuitbreaker_state{name="c"} 3.0 # 3 represents "half_open"
    

    【讨论】:

    • 这个想法可行,但代价是重新设计我们所有的仪表板。实际上,我想知道为什么常规发布对我不起作用.*1.*。当我使用这个表达式时,它会过滤掉所有的零值,但会重复创建另一个问题的行。实际上,我想使用 .*[^0.]+,我希望它很合适,但它也无济于事。
    【解决方案2】:

    最后下面的正则表达式对我有用,

    ^(?!0(\.0)?$)
    

    这是我的结果的验证,

    Click here to verify the result

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 1970-01-01
      • 2020-07-30
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多