Forum Discussion

ericatwood's avatar
2 years ago

How can MQ Queues and Topics be monitored in LogicMonitor ?

How can MQ Queues and Topics and possibly channels be monitored in LogicMonitor ? Not much listed under support for LM. 

2 Replies

  • At one point i had a datasource called RabbitMQ Queue_connections and one called RabbitMQ_cluster_status_connection. Not sure if that's what you're looking for. Here are the scripts for those endpoints. Maybe they can help you if you find the right endpoints for queues and topics.

    The collection script:

    import com.santaba.agent.groovyapi.http.*
    import groovy.json.*
    
    def hostName = hostProps.get("system.hostname")
    
    def rabbitPort = hostProps.get("rabbitmq.port")
    def rabbitUser = hostProps.get("rabbitmq.user")
    def rabbitPass = hostProps.get("rabbitmq.pass")
    def rabbitAddr = hostProps.get("rabbitmq.apiurl")
    
    def urlList = ["${rabbitAddr}",
                   "https://${hostName}:${rabbitPort}",
                   "http://${hostName}:${rabbitPort}"]
    
    def getResult(urlList, apiPath, rabbitUser, rabbitPass, rabbitPort){
        def response = null
        urlList.each{url->
            if(url != "null" && !response){
                try{
                    def conn = new URL(url + apiPath).openConnection()
                    conn.setReadTimeout(1500)
                    def authString = "${rabbitUser}:${rabbitPass}".getBytes().encodeBase64().toString()
                    conn.setRequestProperty("Authorization", "Basic ${authString}")
                    response = conn.getInputStream().getText()
                } catch(Exception ex){
                    // println "Exception: " + ex.message // URL Invalid!
                }
            }
        }
        return response
    }
    
    def response = getResult(urlList, "/api/connections", rabbitUser, rabbitPass, rabbitPort)
    if(!response){return 1}
    def slurper = new JsonSlurper()
    def json = slurper.parseText(response)
    json.each{
        def connection = "${it.name.replaceAll(" ","").replaceAll(":","-")}"
        println("${connection}.channels: ${it.channels}")
        println("${connection}.state: ${(it.state=="running") ? 1 : 0}")
        println("${connection}.send_pend: ${it.send_pend}")
        println("${connection}.send_cnt: ${it.send_cnt}")
    }
    
    return 0;

     

    discovery script:

    import com.santaba.agent.groovyapi.http.*
    import groovy.json.*
    
    def hostName = hostProps.get("system.hostname")
    
    def rabbitPort = hostProps.get("rabbitmq.port")
    def rabbitUser = hostProps.get("rabbitmq.user")
    def rabbitPass = hostProps.get("rabbitmq.pass")
    def rabbitAddr = hostProps.get("rabbitmq.apiurl")
    
    def urlList = ["${rabbitAddr}",
                   "https://${hostName}:${rabbitPort}",
                   "http://${hostName}:${rabbitPort}"]
    
    def getResult(urlList, apiPath, rabbitUser, rabbitPass, rabbitPort){
        def response = null
        urlList.each{url->
            if(url != "null" && !response){
                try{
                    def conn = new URL(url + apiPath).openConnection()
                    conn.setReadTimeout(1500)
                    def authString = "${rabbitUser}:${rabbitPass}".getBytes().encodeBase64().toString()
                    conn.setRequestProperty("Authorization", "Basic ${authString}")
                    response = conn.getInputStream().getText()
                } catch(Exception ex){
                    // println "Exception: " + ex.message // URL Invalid!
                }
            }
        }
        return response
    }
    
    def response = getResult(urlList, "/api/connections", rabbitUser, rabbitPass, rabbitPort)
    if(!response){return 1}
    
    def slurper = new JsonSlurper()
    def json = slurper.parseText(response)
    json.each{
        println("${it.name.replaceAll(" ","").replaceAll(":","-")}##${it.name.replaceAll(" ","")}######node=${it.node}&protocol=${it.protocol}&type=${it.type}")
    }
    return 0