首页 > 解决方案 > 如何将json值转换为prometheus?

问题描述

运行此命令后:

mtr -jnbz www.google.com |jq .report.hubs|jq -r 'keys_unsorted[] as $k | "\(.[$k])"'

我得到这个结果:

{"count":"1","host":"1.1.1.1","ASN":"AS???","Loss%":0,"Snt":10,"Last":36.28,"Avg":39.43,"Best":34.77,"Wrst":62.37,"StDev":8.15}
{"count":"2","host":"2.2.2.2","ASN":"AS???","Loss%":100,"Snt":10,"Last":0,"Avg":0,"Best":0,"Wrst":0,"StDev":0}

我怎样才能得到这个结果(prometheus 格式):

mtr_loss{"count"="1","host"="1.1.1.1","ASN"="AS???"} 0
mtr_snt{"count"="1","host"="1.1.1.1","ASN"="AS???"} 10
mtr_last{"count"="1","host"="1.1.1.1","ASN"="AS???"} 36.28
mtr_avg{"count"="1","host"="1.1.1.1","ASN"="AS???"} 39.43
mtr_best{"count"="1","host"="1.1.1.1","ASN"="AS???"} 34.77
mtr_wrst{"count"="1","host"="1.1.1.1","ASN"="AS???"} 67.37
mtr_stdev{"count"="1","host"="1.1.1.1","ASN"="AS???"} 8.15

以此类推第二个字符串

我将不胜感激任何提示和技巧

问候

标签: jsonjqprometheus

解决方案


以下内容可能更易于遵循、维护和重用:

# produce the {"k"="value", ...} representation:
def kv:
  . as $in
  | reduce keys_unsorted[] as $k ([]; . + ["\"\($k)\"=\"\($in[$k])\""] )
  | join(",")
  | "{" + . + "}" ;

# downcase and remove %
def ht($s):
  keys_unsorted[] as $key
  | .[$key] as $value
  | "mtr_\($key|ascii_downcase|gsub("%";""))\($s) \($value)";

({count,host,ASN} | kv) as $s
| {"Loss%", Snt, Last, Avg, Best, Wrst, StDev}
| ht($s)

推荐阅读