用jq解析jolokia输出

时间:2018-08-30 09:30:09

标签: json regex key wildcard jq

我有一个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

Artemis使用“地址”和“队列”作为单独的实体;出于所有实际目的,两者的名称相同。

我正在尝试制作一个(简单的)脚本,该脚本可以定期监视代理运行状况(队列中没有太多消息,时间太长,队列中没有使用方,诸如此类;所有这些都可以从单个rest调用中获得;我认为,通过以上问题的答案,我应该能够弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:0)

  

有什么办法可以像这样通配密钥:   "org.apache.activemq.artemis:broker=\"*\""

匹配键名上的通配符的最佳方法是使用with_entriesto_entries。由于您尚未提供符合MCVE准则的示例,因此尚不清楚确切的示例方式,但是通过与您给出的示例进行类比,您可以从以下内容开始:

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