上一篇讲解了jmxtrans的简单用法,这一批讲解怎么配合jmxtrans agent的使用。jmxtrans agent是啥?一看名字就知道这是jmxtrans的java agent,而且该agent使用时不需要任何依赖。
关于jmxtrans agent的详细介绍请看:here
下载最新版的jmxtrans agent:jmxtrans-agent-1.2.3,其实就是一个单独的jar包。
下面讲解怎么使tomcat在启动时使用jmxtrans agent:
修改tomcat的启动脚本,添加如下参数:
export JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/programs/jmxtrans_254/jmxtrans-254/bin/jmxtrans-agent-1.2.3.jar=jmxtrans-agent.xml"
主要就是配置引用jmxtrans-agent-1.2.3.jar的路径,以及编排jmxtrans-agent.xml配置文件。jmxtrans-agent.xml的路径可以是相对于classpath的路径,也可以是http/https的路径,或者一个绝对路径。使用attribute和attributes去收集单个或者多个属性值,多个属性值以逗号分割。这些属性值是在query块里面配置。若不指定任何属性,则收集这个objeName下的所有的属性。使用resultAlias去制定metric的名称,在resultAlias中使用关键字#attribute#"时, 将指定metric的名字为attribute或attributes中使用的值。下面是官方提供的收集单个属性和多个属性的样例文件:
#单个属性
<query objectName="java.lang:type=Threading" attribute="ThreadCount"
resultAlias="jvm.thread.count"/>
#多个属性
<query objectName="java.lang:type=Threading" attributes="ThreadCount,TotalStartedThreadCount"
resultAlias="jvm.threads.#attribute#"/>
#所有属性
<query objectName="java.lang:type=Threading" resultAlias="jvm.threads.#attribute#"/>
也可指定key关键字,指定收集属性中的那个值,也可以忽略key收集所有值
#收集指定key的值
<query objectName="java.lang:type=Memory" attribute="HeapMemoryUsage" key="used"
resultAlias="jvm.heapMemoryUsage.used"/>
#收集所有key的值
<query objectName="java.lang:type=Memory" attribute="HeapMemoryUsage" resultAlias="jvm.heapMemoryUsage.#key#"/>
也可以通过position关键字,收集多值属性的某一个值
<query objectName="MyApp:type=MyMBean" attribute="MyMultiValuedAttribute" position="2"
resultAlias="myMBean.myMultiValuedAttributeValue"/>
而且该配置文件支持动态加载,可以设置属性收集时间间隔,也可以针对某一个属性设置收集时间间隔
#设置动态加载配置文件时间间隔
<reloadConfigurationCheckIntervalInSeconds>60</reloadConfigurationCheckIntervalInSeconds>
#设置全局属性收集时间间隔
<collectIntervalInSeconds>20</collectIntervalInSeconds>
#设置单个属性的收集时间间隔
<query objectName="java.lang:type=Threading" attributes="ThreadCount,TotalStartedThreadCount"
resultAlias="jvm.threads.#attribute#" collectIntervalInSeconds="5"/>
jmxtrans agent的输出也包括多种后端服务,主要有:GraphitePlainTextTcpOutputWriter、GraphiteUdpOutputWriter、FileOverwriterOutputWriter、SummarizingFileOverwriterOutputWriter、ConsoleOutputWriter、SummarizingConsoleOutputWriter、SummarizingConsoleOutputWriter、RollingFileOutputWriter、StatsDOutputWriter。为了演示方便,我们使用FileOverwriterOutputWriter
下面看看jmxtrans-agent.xml文件的内容:
<jmxtrans-agent>
<queries>
<!-- OS -->
<query objectName="java.lang:type=OperatingSystem" attribute="SystemLoadAverage" resultAlias="os.systemLoadAverage"/>
<!-- JVM -->
<query objectName="java.lang:type=Memory" attribute="HeapMemoryUsage" key="used"
resultAlias="jvm.heapMemoryUsage.used"/>
<query objectName="java.lang:type=Memory" attribute="HeapMemoryUsage" key="committed"
resultAlias="jvm.heapMemoryUsage.committed"/>
<query objectName="java.lang:type=Memory" attribute="NonHeapMemoryUsage" key="used"
resultAlias="jvm.nonHeapMemoryUsage.used"/>
<query objectName="java.lang:type=Memory" attribute="NonHeapMemoryUsage" key="committed"
resultAlias="jvm.nonHeapMemoryUsage.committed"/>
<query objectName="java.lang:type=ClassLoading" attribute="LoadedClassCount" resultAlias="jvm.loadedClasses"/>
<query objectName="java.lang:type=Threading" attribute="ThreadCount" resultAlias="jvm.thread"/>
<!-- TOMCAT -->
<query objectName="Catalina:type=GlobalRequestProcessor,name=*" attribute="requestCount"
resultAlias="tomcat.requestCount"/>
<query objectName="Catalina:type=GlobalRequestProcessor,name=*" attribute="errorCount"
resultAlias="tomcat.errorCount"/>
<query objectName="Catalina:type=GlobalRequestProcessor,name=*" attribute="processingTime"
resultAlias="tomcat.processingTime"/>
<query objectName="Catalina:type=GlobalRequestProcessor,name=*" attribute="bytesSent"
resultAlias="tomcat.bytesSent"/>
<query objectName="Catalina:type=GlobalRequestProcessor,name=*" attribute="bytesReceived"
resultAlias="tomcat.bytesReceived"/>
</queries>
<outputWriter class="org.jmxtrans.agent.RollingFileOutputWriter">
<fileName>rolling.log</fileName>
<maxFileSize>1024</maxFileSize>
<maxBackupIndex>10</maxBackupIndex>
</outputWriter>
<collectIntervalInSeconds>20</collectIntervalInSeconds>
</jmxtrans-agent>
jmxtrans-agent.xml按照export的设置,是应该放到classpath目录下面的,产生的rolling.log文件也在classpath下面。下面看看tomcat的启动过程和产生的rolling.log文件内容:
启动日志:
产生的数据文件:
下一篇讲解jmxtrans agent和statsd、graphite的结合。