【问题标题】:Parse jolokia output with jq使用 jq 解析 jolokia 输出
【发布时间】: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 使用地址和队列作为单独的实体;出于所有实际目的,两者都具有相同的名称。

我正在尝试制作一个(简单的)脚本,它可以定期监控代理的健康状况(队列上没有太多消息太久,队列有消费者,诸如此类;所有这些都可以从这个单一的休息调用中获得;我认为通过以上问题的答案,我应该能够弄清楚如何得到这个。

【问题讨论】:

标签: json regex key wildcard jq


【解决方案1】:

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

在键名上匹配通配符的最佳方法是使用with_entriesto_entries。由于您没有根据MCVE 指南提供示例,因此尚不清楚您将如何做,但通过类比您提供的示例,您可以从:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多