Пересылка потребителя kafka через туннель ssh

... | jq -r '.rows[] |.[] | [.name,.["cpu.total"],.["memory.total"]] | map(tostring) | join(",")'

Это:

  1. Расширяет массив в .rowsв выходной поток (.rows.[]).
  2. Трубы, ведущие к следующему шагу(|).
  3. Разворачивает переданный объект в (в данном случае )единственное значение, которое он содержит(.[]).
  4. Создает массив с результатами .name, .["cpu.total"]и .["memory.total"], каждый из которых оценивается для этого объекта(.[.name,... ]).
  5. Преобразует все значения этого массива в строки(map(tostring)).
  6. Соединяет элементы каждого массива запятой(join(",")).

jq -rвыводит необработанные данные , а не заключает их в кавычки и экранирует. Результатом будет:

foo-01,12,16267368kB
foo-02,12,16264296kB

как вы хотели. В зависимости от вашего парсера CSV и реальных данных,вам могут понадобиться дополнительные кавычки вокруг строк, которые вы можете добавить в или использовать@csvвместо последних двух шагов.

... | jq -r '.rows[] |.[] | [.name,.["cpu.total"],.["memory.total"]] | @csv'

Мы могли бы пропустить map, преобразовав только одно значение внутри, что требует дополнительных скобок:

... | jq -r '.rows[]|.[]|[.name, (.["cpu.total"] | tostring),.["memory.total"]] | join(",")'

И, наверное, самая уродливая альтернатива:

... | jq -r '.rows[]|to_entries|.[]|.key + "," + (.value["cpu.total"] | tostring) + "," +.value["memory.total"]'

В этом случае мы не полагаемся на поле .nameи строим всю строку вручную. Если вам нужен очень индивидуальный формат, это самый гибкий вариант.

6
23.03.2018, 23:06
1 ответ

Поскольку брокер kafka будет перенаправлять потребителя на использование исходных хостов. Смотрите это,https://stackoverflow.com/questions/45854168/consume-from-a-kafka-cluster-through-ssh-tunnel

1
09.03.2020, 13:59

Теги

Похожие вопросы