使用jq解析jolokia输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jq解析jolokia输出相关的知识,希望对你有一定的参考价值。
我有一个Apache Artemis经纪人,我可以通过jolokia获得一些管理信息。此响应采用json格式;我也有jq用它来做“json stuff”。
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:自epoch以来以毫秒为单位的时间戳。
我该如何查询?理想情况下,我想得到答案“my.queue的消息早于X”;其中my.queue也可以通过键“地址”或“名称”获得
Artemis使用地址和队列作为单独的实体;出于所有实际目的,两者都有相同的名称。
我正在尝试创建一个(简单)脚本,可以定期监视代理运行状况(队列中的消息太长,队列中有消费者,类似的东西;所有这些都可以从这个单独的休息呼叫中获得;我认为对于上述问题的答案,我应该能够弄清楚如何得到这个。
有没有什么方法可以像这样通配钥匙:
"org.apache.activemq.artemis:broker="*""
在关键名称上匹配通配符的最佳方法是使用with_entries
或to_entries
。由于您没有按照MCVE指南提供示例,因此不清楚您是如何做到这一点的,但通过类比您给出的示例,您可以从以下开始:
.value
| to_entries[]
| select(.key | test("^org.apache.activemq.artemis:broker=".*""))
| .value
以上是关于使用jq解析jolokia输出的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 jq 输出中的双引号以在 bash 中解析 json 文件?