Разобрать вывод на джолокию с помощью jq - PullRequest
0 голосов
/ 30 августа 2018

У меня есть брокер Apache Artemis, из которого я могу получить некоторую управленческую информацию через jolokia. Этот ответ в формате JSON; У меня также есть JQ, чтобы сделать "JSON вещи" с ним.

curl -s -X GET --url 'http://localhost:8161/console/jolokia/read/org.apache.activemq.artemis:*'

Это работает; и предоставляет ответ JSON.

Я хочу создать некий универсальный скрипт для проверки некоторых значений из этого ответа; отсюда несколько вопросов:

(Для простоты тестирования я сохранил ответ в файле broker.json, обычно я просто перенаправлял вывод из curl в jq или сохранял его в переменной, в зависимости от того, как часто должен вызываться jq)

Один из ключей, которые я хочу запросить, можно получить так:

 jq '."value"."org.apache.activemq.artemis:broker=\"broker1\""' broker.json

Однако в более общем сценарии я не буду знать имя брокера (здесь «broker1»); есть ли какой-нибудь способ, которым я могу подстановить ключ как этот: "org.apache.activemq.artemis:broker=\"*\""? Мои попытки до сих пор ничего не дали мне

Второй вопрос немного сложнее, я думаю. В ответе есть поле, которое можно найти, запросив .request.timestamp значение указывается в секундах с начала эпохи.

В посреднике есть очереди, и некоторые из них могут иметь сообщения; Я хочу найти те, которые имеют сообщения старше, скажем, 5 минут.

Я могу найти один такой объект с помощью этого ключа:

  jq '."value"."org.apache.activemq.artemis:address=\"my.queue\",broker=\"broker1\",component=addresses,queue=\"my.queue\",routing-type=\"anycast\",subcomponent=queues"' broker.json

Этот объект содержит два ключа, которые я могу использовать для этой цели: - FirstMessageAge: возраст в мс - FirstMessageTimestamp: отметка времени в миллисекундах с начала эпохи.

Как бы я запросил это? В идеале я хотел бы получить ответ "my.queue содержит сообщения старше X"; где my.queue также можно получить с помощью ключа «Адрес» или «Имя»

Артемида использует Адрес и Очереди как отдельные объекты; для всех практических целей оба имеют одинаковое имя.

Я пытаюсь создать (простой) скрипт, который может периодически отслеживать состояние брокера (не слишком много сообщений в очередях слишком долго, очереди с потребителями и тому подобное), и все это можно получить с помощью этого единственного вызова rest; Я думаю, что с ответами на вышеуказанные вопросы я смогу понять, как это получить.

1 Ответ

0 голосов
/ 08 сентября 2018

есть ли какой-нибудь способ, которым я могу подстановить ключ следующим образом: "org.apache.activemq.artemis:broker=\"*\""

Лучший способ сопоставления подстановочных знаков в именах ключей - использовать with_entries или to_entries. Поскольку вы не предоставили пример в соответствии с рекомендациями MCVE , неясно, как именно вы это сделаете, но по аналогии с примером, который вы приводите, вы можете начать с:

.value
| to_entries[]
| select(.key | test("^org.apache.activemq.artemis:broker=\".*\""))
| .value
...