Jmxtrans

        监控jvm虚拟机有很多很多种方法,最为常见的一种就是通过jmx来获取jvm运行时的各种数据,目前也有很多开源的工具,各大主流监控工具基本都支持jmx监控。但是感觉在客户端配置起来比较麻烦,比如zabbix、nagios这些监控系统,需要你自己写脚本获取jvm数据,然后再上报给监控服务端。今天我尝试的是一种不需要我自己写脚本的方法,那就是jmxtrans。

        jmxtrans是什么呢?看这里,我也就不废话了。各种版本的jmxtrans,官方提供了很多打包好的安装包,有rpm、deb、tar等等。因为rpm依赖的是jdk1.8,而生产环境是jdk1.7,所以我使用tar包的方式来安装jmxtrans。

        下载jmxtrans-254:here

        实验环境:CentOS release 6.5 

                       java version "1.7.0_67"

        部署目录:/opt/programs/jmxtrans_254


解压:

cd /opt/programs/jmxtrans_254
tar zxvf jmxtrans-254-dist.tar.gz


查看目录结构:

tree -L 3 jmxtrans_254
 

    总共四个目录:bin里面是启动脚本,test.json是我编排的配置文件,doc是样例编排文件,lib里面是jmxtrans.sh启动的时候需要引用的jar文件,tools里面是两个文件转换工具。


下面看看test.json文件的内容:

{
  "servers": [
    {
      "numQueryThreads": "2",
      "host": "10.203.50.34", 
      "port": "9080", 
      "queries": [ 
        {
          "outputWriters": [ 
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter" 
            }
          ],
          "obj": "java.lang:type=OperatingSystem", 
          "attr": [ 
            "SystemLoadAverage",
            "AvailableProcessors",
            "TotalPhysicalMemorySize",
            "FreePhysicalMemorySize",
            "TotalSwapSpaceSize",
            "FreeSwapSpaceSize",
            "OpenFileDescriptorCount",
            "MaxFileDescriptorCount"
          ]
        },
        {
          "outputWriters": [
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"
            }
          ],
          "resultAlias": "heap",
          "obj": "java.lang:type=Memory",
          "attr": [
            "HeapMemoryUsage",
            "NonHeapMemoryUsage"
          ]
        },
        {
          "outputWriters": [
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"
            }
          ],
          "resultAlias": "cmsoldgen",
          "obj": "java.lang:name=CMS Old Gen,type=MemoryPool",
          "attr": [
            "Usage"
          ]
        },
        {
          "outputWriters": [
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"
            }
          ],
          "resultAlias": "gc",
          "obj": "java.lang:type=GarbageCollector,name=*",
          "attr": [
            "CollectionCount",
            "CollectionTime"
          ]
        },
        {
          "outputWriters": [
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter",
              "settings": {}
            }
          ],
          "resultAlias": "memorypool",
          "obj": "java.lang:type=MemoryPool,name=*",
          "attr": [
            "Usage"
          ]
        },
        {
          "outputWriters": [
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"
            }
          ],
          "resultAlias": "threads",
          "obj": "java.lang:type=Threading",
          "attr": [
            "DaemonThreadCount",
            "PeakThreadCount",
            "ThreadCount",
            "TotalStartedThreadCount"
          ]
        },
        {
          "outputWriters": [
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"
            }
          ],
          "resultAlias": "tomcat8-connectors",
          "obj": "Catalina:type=ThreadPool,name=*",
          "attr": [
            "currentThreadCount",
            "currentThreadsBusy"
          ]
        },
        {
          "outputWriters": [
            {
              "@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"
            }
          ],
          "resultAlias": "tomcat8-requests",
          "obj": "Catalina:type=GlobalRequestProcessor,name=*",
          "attr": [
            "bytesReceived",
            "bytesSent",
            "errorCount",
            "processingTime",
            "requestCount"
          ]
        }
      ]
    }
  ]
}

    你可以根据你想查询的jvm type进行编排queries中的具体内容。

    其中host和port是开启jmx服务的机器的ip和端口,numQueryThreads是针对下面的queries的工作线程数。jmxtrans支持把收集到的jvm信息写入多个后端服务中,例如:StdOutWriter、GangliaWriter、GraphiteWriter、OpenTSDBWriter、RRDWriter、StatsDWriter、StdoutWriter、TCollectorUDPWriter、Log4JWriter、InfluxDBWriter等等。为了演示方便,我使用的是StdOutWriter,也就是打印到标准输出中。


启动jmxtrans:

    使用jmxtrans.sh [ start conf.json ]来启动jmxtrans服务。但是,因为我选用的是打印结果到标准输出,如果使用jmxtrans.sh来启动,还要在标准能输出看到结果,就需要修改启动脚本,当然这个很容易,只需要在脚本内部的启动命令上设置标准输出重定向即可,但是为了保持jmxtrans.sh的原生行,我采用原始命令启动,命令如下:

/opt/programs/jdk1.7.0_67/bin/java -server -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true \
	-Djmxtrans.log.level=DEBUG -Djmxtrans.log.dir=. -Xms512m -Xmx512m -XX:PermSize=384m \
	-XX:MaxPermSize=384m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false  \
	-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=2101   \
	-jar /opt/programs/jmxtrans_254/jmxtrans-254/lib/jmxtrans-all.jar -e -f ./test.json -s 60

    注意我的jdk是oracle jdk,采用tar包安装。 


        可以看到已经开始收集配置文件中编排的jvm的相关信息了,-f 是制定配置文件,-s 是制定收集时间间隔。


        下一篇讲解怎么使用jmxtrans agent配合jmxtrans使用。


 

转载于:https://my.oschina.net/guol/blog/669251

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值