Использование подстановочных знаков в ключе JMX для получения списка атрибутов очереди

Я использую Zabbix для мониторинга ActiveMQ Artemis через JMX. Я хотел бы получить объект JSON с количеством сообщений для всех очередей - если это возможно.

Вот мой основной источник понимания по этому вопросу:

Я могу получить все атрибуты для всех очередей следующим образом:

jmx.get[attributes,"org.apache.activemq.artemis:broker=*,component=addresses,address=*,subcomponent=queues,routing-type=*,queue=*"]

Вот пример нескольких элементов из массива:

{
    "name": "Name",
    "description": "name of this queue",
    "type": "java.lang.String",
    "value": "MAO.SOF.User.Import.Queue",
    "object": "org.apache.activemq.artemis:broker=\"0.0.0.0\",component=addresses,address=\"MAO.SOF.User.Import.Topic\",subcomponent=queues,routing-type=\"multicast\",queue=\"MAO.SOF.User.Import.Queue\""
},
{
    "name": "Address",
    "description": "address this queue is bound to",
    "type": "java.lang.String",
    "value": "MAO.SOF.User.Import.Topic",
    "object": "org.apache.activemq.artemis:broker=\"0.0.0.0\",component=addresses,address=\"MAO.SOF.User.Import.Topic\",subcomponent=queues,routing-type=\"multicast\",queue=\"MAO.SOF.User.Import.Queue\""
},
{
    "name": "MessageCount",
    "description": "number of messages currently in this queue (includes scheduled, paged, and in-delivery messages)",
    "type": "java.lang.Long",
    "value": "0",
    "object": "org.apache.activemq.artemis:broker=\"0.0.0.0\",component=addresses,address=\"MAO.SOF.User.Import.Topic\",subcomponent=queues,routing-type=\"multicast\",queue=\"MAO.SOF.User.Import.Queue\""
}

Однако теперь я пытаюсь понять, как фильтровать только MessageCount. Я пробовал эти два, но он возвращает пустой массив:

jmx.get[attributes,"org.apache.activemq.artemis:broker=*,component=addresses,address=*,subcomponent=queues,routing-type=*,queue=*,name=MessageCount"]
jmx.get[attributes,"org.apache.activemq.artemis:broker=*,component=addresses,address=*,subcomponent=queues,routing-type=*,queue=*,attribute=MessageCount"]

[Редактировать]

Вот мое текущее решение для этого. Вот пример ключа, который я использую:

jmx.get[attributes,"org.apache.activemq.artemis:broker=*,component=addresses,address=*,subcomponent=queues,routing-type=*,queue=*"]

Это получает все свойства JMX для всех очередей. Затем на вкладке «Предварительная обработка» я добавляю запрос JSONPath:

$.[?(@.name=='MessageCount')]

Это фильтрует только свойство счетчика сообщений. Затем я использую небольшой javascript для создания строки.

var object = JSON.parse(value);
var returnString = ""; 
for (var i=0; i<object.length; i++) {
  if (object[i].value > 5) {
    returnString = returnString + object[i].object.substring(object[i].object.lastIndexOf("\",queue=\"")+9, object[i].object.length-1) + " has " + object[i].value + " messages pending.\n"; 
  }
}
if (returnString.length==0) {
  returnString = "clear"; 
}
return returnString;

Это просто перебирает массив, и если он находит количество сообщений, превышающее значение (5 в этом примере), он добавляет имя очереди и количество к строке. Если очереди с ›5 не найдены, я устанавливаю строку на очистку.

Затем, когда я создаю действие, я запускаю сообщение, если значение не ясно.


person BenW    schedule 26.12.2020    source источник
comment
Спасибо, Джастин. Я обновил свой вопрос с небольшим прогрессом.   -  person BenW    schedule 27.12.2020
comment
Я обновил свой вопрос своим текущим решением.   -  person BenW    schedule 09.01.2021


Ответы (1)


Согласно документации Zabbix:

При использовании jmx.get[] для обнаружения макросы низкоуровневого обнаружения можно определить отдельно в пользовательском Макрос LLD конфигурации правила обнаружения, используя JSONPath для указания необходимых значений.

Документация по функциям JSONPath также доступна в Zabbix.

Вы не можете просто добавить name=MessageCount или attribute=MessageCount к имени MBean, поскольку на самом деле они не являются частью имени MBean. MessageCount — это атрибут, полученный из MBean. Поэтому вам нужно получить его другим способом (например, с помощью JSONPath).

person Justin Bertram    schedule 27.12.2020