Я использую 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 не найдены, я устанавливаю строку на очистку.
Затем, когда я создаю действие, я запускаю сообщение, если значение не ясно.