Я хочу отображать статистику использования моего приложения в Graphite. Я пытаюсь запустить Jmxtrans. Объект, который я хочу запросить:
org.glassfish.jersey:type=my-server,subType=Uris,resource="/resource.js",executionTimes=RequestTimes
В моем конфиге есть:
"obj": "org.glassfish.jersey:type=my-server,subType=Uris,resource=\"/resource.js\",executionTimes=RequestTimes"
Но это вызывает следующую ошибку:
[06 Feb 2016 22:12:29] [jmxtrans-query-2] 363453 ERROR (com.googlecode.jmxtrans.jmx.ProcessQueryThread:57) - Error executing query Query(objectName=org.glassfish.jersey:type=reflow-ad-server,subType=Uris,resource=*,executionTimes=RequestTimes, keys=[], attr=[AverageTime[ms]_1m, RequestRate[requestsPerSeconds]_1m], typeNames=[], resultAlias=router_bootstrap_js, useObjDomainAsKey=false, allowDottedKeys=false, useAllTypeNames=false, outputWriterInstances=[BaseOutputWriter(typeNames=[name], debugEnabled=true, settings={}, valueTransformer=com.googlecode.jmxtrans.model.results.IdentityValueTransformer@6d2efbbd), com.googlecode.jmxtrans.model.output.support.ResultTransformerOutputWriter@27916d4b]) on server Server(pid=null, host=log-emea-5, port=9091, url=service:jmx:rmi:///jndi/rmi://log-emea-5:9091/jmxrmi, cronExpression=null, numQueryThreads=0)
java.lang.NullPointerException
at com.googlecode.jmxtrans.model.Query.fetchResults(Query.java:195)
at com.googlecode.jmxtrans.model.Server.execute(Server.java:239)
at com.googlecode.jmxtrans.jmx.ProcessQueryThread.run(ProcessQueryThread.java:54)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Я пробовал объект без кавычек, но неудивительно, что запрос ничего не возвращает.
Оказывается, вызов javax.management.MBeanServerConnection.getAttributes (...) возвращает значение null, однако вызов javax.management.MBeanServerConnection.getAttribute (...) для каждого атрибута в цикле работает нормально.
Похоже на ошибку в javax.management.MBeanServerConnection.getAttributes (...), а не на проблему с самим jmxtrans.
Смотрите этот код для исправления:
https://github.com/jmxtrans/jmxtrans/compare/master...jdudmesh:master