• 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
  • 相关阅读:
    前端国际化如何对中文——>英文自动化翻译小demo
    4K投影仪为什么比1080P投影仪更值得买?答案显而易见!
    nodejs 入门基本操作
    Linux系列---【查看mac地址】
    OpenGL基础入门及准备
    2023.10.01 homework
    ​PNAS:alpha频率经颅电刺激调控大脑默认网络
    关于AD9777芯片的说明以及FPGA控制实现 I
    继承【C++】
    墨迹天气商业版UTF-8模板,Discuz3.4灰白色风格(带教程)
  • 原文地址:https://blog.csdn.net/XLL20001022/article/details/126849793