如何使用 jmxtrans 将 infinispan jmx 指标推送到 Graphite?

How can you push infinispan jmx metrics to graphite with jmxtrans?

我有这个配置文件

{
   "servers": [
      {
         "url": "service:jmx:rmi:///jndi/rmi://192.168.167.166:6000/jmxrmi ",
         "alias": "infinispan",
         "username":"admin",
         "password": "admin",
         "queries": [
            {
               "obj": "java.lang:type=Memory",
               "attr": [
                  "HeapMemoryUsage",
                  "NonHeapMemoryUsage"
               ],
               "outputWriters": [
                  {
                     "@class": "com.googlecode.jmxtrans.model.output.GraphiteWriterFactory",
                     "port": 2003,
                     "host": "127.0.0.1",
                     "typeNames": [
                        "name"
                     ]
                  }
               ]
            }
         ],
         "numQueryThreads": 2
      }
   ]
}

graphite 在本地主机上 运行ning,当我连接到 jconsole 时,它​​连接正常并显示指标。

我从 /jmxtrans-jmxtrans-parent-260/jmxtrans 文件夹中 运行 './jmxtrans.sh 启动 infinispan.json'。

在 jmxtrans.log 文件中,我不断收到此异常:

[13 Dec 2016 09:27:04] [Stormpot-pool-3-thread-1] 2448   ERROR (com.googlecode.jmxtrans.model.output.support.pool.RetryingAllocator:77) - Error allocating slot
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.googlecode.jmxtrans.model.output.support.pool.SocketAllocator.allocate(SocketAllocator.java:61)
    at com.googlecode.jmxtrans.model.output.support.pool.SocketAllocator.allocate(SocketAllocator.java:37)
    at com.googlecode.jmxtrans.model.output.support.pool.RetryingAllocator.call(RetryingAllocator.java:89)
    at com.googlecode.jmxtrans.model.output.support.pool.RetryingAllocator.call(RetryingAllocator.java:86)
    at com.github.rholder.retry.AttemptTimeLimiters$NoAttemptTimeLimit.call(AttemptTimeLimiters.java:78)
    at com.github.rholder.retry.Retryer.call(Retryer.java:160)
    at com.googlecode.jmxtrans.model.output.support.pool.RetryingAllocator.allocate(RetryingAllocator.java:86)
    at stormpot.ReallocatingAdaptor.allocate(ReallocatingAdaptor.java:37)
    at stormpot.BAllocThread.alloc(BAllocThread.java:225)
    at stormpot.BAllocThread.increaseSizeByAllocating(BAllocThread.java:131)
    at stormpot.BAllocThread.replenishPool(BAllocThread.java:106)
    at stormpot.BAllocThread.continuouslyReplenishPool(BAllocThread.java:88)
    at stormpot.BAllocThread.run(BAllocThread.java:80)
    at java.lang.Thread.run(Thread.java:745)

最终我发现问题出在 vagrant 将它转发到的端口,在这种情况下为 22003:

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'mayflower/trusty64-puppet3' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 443 (guest) => 8443 (host) (adapter 1)
    default: 8125 (guest) => 8125 (host) (adapter 1)
    default: 2003 (guest) => 22003 (host) (adapter 1)