使用 jq 将 JSON 对象转换为 Prometheus 指标格式

muf*_*fel 2 json newline jq

考虑一个 JSON 对象,如

{
  "foo": 42,
  "baz": -12,
  "bar{label1=\"value1\"}": 12.34
}
Run Code Online (Sandbox Code Playgroud)

jq使用一些数据源构造。实际的键名及其数量可能会有所不同,但结果将始终是一个以数字(整数或浮点数)作为值的对象。键可以包含引号,但不能包含空格。

我可以使用 jq 将对象格式化为与Prometheus兼容的格式,以便我可以使用输出将数据推送到 Prometheus Pushgateway 吗?

所需的结果看起来像

foo 42
bar{label1="value1"} 12.34
baz -12
Run Code Online (Sandbox Code Playgroud)

即用换行符(无\r)和除标签值外没有引号的空格分隔。

我不能使用 bash 进行后处理,因此如果可能的话,我更喜欢纯 jq 解决方案。

ogu*_*ail 5

使用keys_unsorted获得对象键(keys做同样的很好,但前者是更快),生成的字符串内插法所需的输出。

$ jq -r 'keys_unsorted[] as $k | "\($k) \(.[$k])"' file
foo 42
baz -12
bar{label1="value1"} 12.34
Run Code Online (Sandbox Code Playgroud)

而且,通过-j@peak 建议的手动添加选项和打印换行符,您可以使其便携。

  • @hek2mgl 好的,但我使用了 `keys_unsorted`,因为它比 `keys` 和 `to_entries` 都快。 (2认同)