• ActiveMQ JMX监控信息


    ActiveMQ JMX监控信息

    activemq 启用jmx

    1.运行一个代理,将代理属性 useJmx 设置为 true ,并将连接物 createConnector 设置为 true ,connectorPort 设置为 要代理的端口号

    # conf/activemq.xml
    
     ...
     
     
     # conf/activemq.xml
     
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.设置账号密码

    # 如果未设置密码,将无法开启远程连接,如下将注释打开即可
    
    
    # conf/jmx.access
    ...
    admin readwrite
    
    monitorRole readonly
    controlRole readwrite
    ...
    
    # conf/jmx.password
    ...
    admin activemq
    
    monitorRole abc123
    controlRole abcd1234
    ...
     
    # bin/env
    ...
    # ---
    #
    # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099 "
    # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
    # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
    # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
    #ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
    
     ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099 "
     ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
     ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
     ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
     ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
     ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Djava.rmi.server.hostname=192.168.31.65"
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    3.设置拥有者可读写,其他人不可读写执行

     chmod 600 conf/jmx.*
    
    • 1

    4.重新启动

     bin/activemq restart
     bin/activemq start
     bin/activemq stop
    
    • 1
    • 2
    • 3

    验证当前服务器的ActiveMQ JMX 是否开启

    #如果存在即开启成功
    netstat -an |grep 11099
    
    • 1
    • 2

    用到的cjmx jar包

    cjmxGitHub


    ActiveMQ用到的 mbeabs

    cjmx

    java -cp $JAVA_HOME/lib/tools.jar:cjmx_2.12-2.8.1-app.jar cjmx.Main  "remote-connect 127.0.0.1:11099" "mbeans 'org.apache.activemq:type=Broker&brokerName=localhost' select BrokerName"
    
    • 1

    example

    org.apache.activemq:type=Broker&brokerName=localhost
    ------------------------------
        BrokerName = localhost
    
    • 1
    • 2
    • 3

    cjmx

    java -cp $JAVA_HOME/lib/tools.jar:cjmx_2.12-2.8.1-app.jar cjmx.Main  "remote-connect 127.0.0.1:11099" "mbeans 'org.apache.activemq:type=Broker&brokerName=localhost' select *"
    
    • 1

    example

    java.lang:type=OperatingSystem
    ------------------------------
        BrokerName = localhost
        ...
    
    • 1
    • 2
    • 3
    • 4

    cjmx

    java -cp $JAVA_HOME/lib/tools.jar:cjmx_2.12-2.8.1-app.jar cjmx.Main  "remote-connect 127.0.0.1:11099" "mbeans 'org.apache.activemq:type=Broker&brokerName=localhost' select *" |grep BrokerName|cut -f 4 -w
    
    • 1

    example

    localhost
    
    • 1

    Node /index.js

    const { exec } = require("child_process");
    
    let jmx_jar = 'cjmx_2.12-2.8.1-app.jar';
    let java_cmd = 'java -cp $JAVA_HOME/lib/tools.jar:' + jmx_jar + ' cjmx.Main ';
    
    let kafka_jmx_url = '127.0.0.1:9999';
    let username = '';
    let password = '';
    let jmx_remoteConnect = 'remote-connect ' + kafka_jmx_url;
    let jmx_cmd = username ? `${java_cmd} "${jmx_remoteConnect} ${username}"` : `${java_cmd} "${jmx_remoteConnect}"` ;
    
    let mbeans = "mbeans 'kafka.controller:name=LeaderElectionRateAndTimeMs,type=ControllerStats' select OneMinuteRate";
    let child = exec(`${jmx_cmd} "${mbeans}"`,null, (err, stdout, stderr) => {
        if(err){
            console.error(err)
        } else if(stdout) {
            console.log(stdout.split('\n'))
        }
    })
    
    if(username) {
        child.stdin.write(password+'\n');
        child.stdin.end();
    }
    
    // let grep = "|grep OneMinuteRate|cut -f 4 -w"
    // exec(`${jmx_cmd} "${mbeans}" ${grep}`,null, (err, stdout, stderr) => {
    //     if(err){
    //         console.error(err)
    //     } else if(stdout) {
    //         console.log(stdout)
    //     }
    // })
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    多探头球面近场天线测试效率提升方法
    如何在现货贵金属白银中超越自我
    linux的常用命令
    rapidjson之内存分配器
    Windows下Qt读取系统的内存、CPU、GPU等使用信息
    Spring Boot与Netty:构建高性能的网络应用
    浅谈分布式任务调度系统Celery的设计与实现
    Ubuntu16.04上安装Docker
    012 Spring Boot + Vue 电影购票系统
    C语言类型占内存大小
  • 原文地址:https://blog.csdn.net/XLL20001022/article/details/126849793