преобразовать объект JSON в формат метрики Prometheus, используя jq - PullRequest
0 голосов
/ 02 мая 2019

Рассмотрим объект JSON, подобный

{
  "foo": 42,
  "baz": -12,
  "bar{label1=\"value1\"}": 12.34
}

построено по jq с использованием некоторого источника данных. Фактические имена ключей и их количество могут различаться, но результатом всегда будет объект с числами (int или float) в качестве значений. Ключи могут содержать кавычки, но без пробелов.

Могу ли я использовать jq для форматирования объекта в Prometheus -совместимый формат, чтобы я мог просто использовать выходные данные для передачи данных на Пушгейт Прометея?

Требуемый результат будет выглядеть как

foo 42
bar{label1="value1"} 12.34
baz -12

т.е. разделенные пробелом с символами новой строки (без \r) и без кавычек, за исключением значения метки.

Я не могу использовать bash для постобработки и поэтому предпочел бы чисто jq-решение, если это возможно.

Ответы [ 2 ]

3 голосов
/ 02 мая 2019

Используйте keys_unsorted, чтобы получить ключи объекта (keys делает то же самое, но первый быстрее), генерировать желаемый результат с помощью строковой интерполяции.

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

И, добавив параметр -j и печатая перевод строки вручную, как подсказал @peak, вы можете сделать это переносимым.

2 голосов
/ 02 мая 2019

На платформе Windows jq обычно использует CR-LF для перевода строки;чтобы предотвратить это, используйте параметр командной строки -j и вручную вставьте нужные символы «новой строки», например:

jq -rj 'to_entries[] | "\(.key) \(.value)\n"' file
...