【发布时间】:2018-08-30 09:30:08
【问题描述】:
我有一个 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 使用地址和队列作为单独的实体;出于所有实际目的,两者都具有相同的名称。
我正在尝试制作一个(简单的)脚本,它可以定期监控代理的健康状况(队列上没有太多消息太久,队列有消费者,诸如此类;所有这些都可以从这个单一的休息调用中获得;我认为通过以上问题的答案,我应该能够弄清楚如何得到这个。
【问题讨论】:
-
请遵循minimal reproducible example 指南,尤其是w.r.t.第二个问题。至少,请发布(或提供指向)broker.json
标签: json regex key wildcard jq