我有一个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调用中获得;我认为,通过以上问题的答案,我应该能够弄清楚如何做到这一点。
答案 0 :(得分:0)
有什么办法可以像这样通配密钥:
"org.apache.activemq.artemis:broker=\"*\""
匹配键名上的通配符的最佳方法是使用with_entries
或to_entries
。由于您尚未提供符合MCVE准则的示例,因此尚不清楚确切的示例方式,但是通过与您给出的示例进行类比,您可以从以下内容开始:
.value
| to_entries[]
| select(.key | test("^org.apache.activemq.artemis:broker=\".*\""))
| .value