我有一个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 :年龄在ms - FirstMessageTimestamp:时间戳(以毫秒为单位)。
我将如何查询这一点?理想情况下,我希望得到"my.queue的消息早于X“的答案;其中,my.queue也可以通过拥有”地址“或”名称“来获得。
Artemis使用Address和Queue作为单独的实体;在这里的所有实际用途中,两者都有相同的名称。
我正在尝试制作一个(简单的)脚本,它可以定期监视代理的运行状况(在队列上的消息不太多,队列中有消费者,诸如此类的东西;所有这些都可以从这个rest调用中得到;我认为,通过对上述问题的回答,我应该能够弄清楚如何获得这些信息。
发布于 2018-09-08 19:54:43
有什么办法我可以通配符的密钥如下:
"org.apache.activemq.artemis:broker=\"*\""
在密钥名上匹配通配符的最佳方法是使用with_entries或to_entries。由于您没有按照MCVE准则提供示例,所以不清楚您将如何做到这一点,但与您所举的示例进行类比,您可以从以下几个方面开始:
.value
| to_entries[]
| select(.key | test("^org.apache.activemq.artemis:broker=\".*\""))
| .valuehttps://stackoverflow.com/questions/52093635
复制相似问题