测试Collectd的JMX插件时出现异常(缺少API getHostname())

时间:2016-03-02 09:37:58

标签: java jmx collectd

我在测试Collectd的NoSuchMethod exception插件时遇到了JMX

  

java.lang.NoSuchMethodError:找不到方法org.collectd.api.Collectd.getHostname()Ljava/lang/String;

我们无法从official api wikicollectd-api.jar的源代码中找到此方法定义。

另外,我们不知道为什么要调用这个API。以下是collectd.conf的相关内容:

LoadPlugin "java"

    <Plugin "java">
        JVMARG "-Djava.class.path=/usr/share/collectd/java/collectd-api.jar:/usr/share/collectd/java/generic-jmx.jar"
        LoadPlugin "org.collectd.java.GenericJMX"

        <Plugin "GenericJMX">
            ################
            # MBean blocks #
            ################
            # Number of classes being loaded.
            <MBean "classes">
                ObjectName "java.lang:type=ClassLoading"
                #InstancePrefix ""
                #InstanceFrom ""

                <Value>
                  Type "gauge"
                  InstancePrefix "loaded_classes"
                  #InstanceFrom ""
                  Table false
                  Attribute "LoadedClassCount"
                </Value>
            </MBean>

            # Time spent by the JVM compiling or optimizing.
            <MBean "compilation">
                ObjectName "java.lang:type=Compilation"
                #InstancePrefix ""
                #InstanceFrom ""

                <Value>
                  Type "total_time_in_ms"
                  InstancePrefix "compilation_time"
                  #InstanceFrom ""
                  Table false
                  Attribute "TotalCompilationTime"
                </Value>
            </MBean>

            # Garbage collector information
            <MBean "garbage_collector">
                ObjectName "java.lang:type=GarbageCollector,*"
                InstancePrefix "gc-"
                InstanceFrom "name"

                <Value>
                  Type "invocations"
                  #InstancePrefix ""
                  #InstanceFrom ""
                  Table false
                  Attribute "CollectionCount"
                </Value>

                <Value>
                  Type "total_time_in_ms"
                  InstancePrefix "collection_time"
                  #InstanceFrom ""
                  Table false
                  Attribute "CollectionTime"
                </Value>

            </MBean>

            ######################################
            # Define the "jmx_memory" type as:   #
            #   jmx_memory  value:GAUGE:0:U      #
            # See types.db(5) for details.       #
            ######################################

            # Generic heap/nonheap memory usage.
            <MBean "memory">
                ObjectName "java.lang:type=Memory"
                #InstanceFrom ""
                InstancePrefix "memory"

                # Creates four values: committed, init, max, used
                <Value>
                  Type "jmx_memory"
                  #InstancePrefix ""
                  #InstanceFrom ""
                  Table true
                  Attribute "HeapMemoryUsage"
                  InstancePrefix "heap-"
                </Value>

                # Creates four values: committed, init, max, used
                <Value>
                  Type "jmx_memory"
                  #InstancePrefix ""
                  #InstanceFrom ""
                  Table true
                  Attribute "NonHeapMemoryUsage"
                  InstancePrefix "nonheap-"
                </Value>
            </MBean>

                # Memory usage by memory pool.
                <MBean "memory_pool">
                ObjectName "java.lang:type=MemoryPool,*"
                InstancePrefix "memory_pool-"
                InstanceFrom "name"

                <Value>
                  Type "jmx_memory"
                  #InstancePrefix ""
                  #InstanceFrom ""
                  Table true
                  Attribute "Usage"
                </Value>
            </MBean>

            ### MBeans by Catalina / Tomcat ###
            # The global request processor (summary for each request processor)
            <MBean "catalina/global_request_processor">
                ObjectName "Catalina:type=GlobalRequestProcessor,*"
                InstancePrefix "request_processor-"
                InstanceFrom "name"

                <Value>
                  Type "io_octets"
                  InstancePrefix "global"
                  #InstanceFrom ""
                  Table false
                  Attribute "bytesReceived"
                  Attribute "bytesSent"
                </Value>

                <Value>
                  Type "total_requests"
                  InstancePrefix "global"
                  #InstanceFrom ""
                  Table false
                  Attribute "requestCount"
                </Value>

                <Value>
                  Type "total_time_in_ms"
                  InstancePrefix "global-processing"
                  #InstanceFrom ""
                  Table false
                  Attribute "processingTime"
                </Value>
            </MBean>

            # Details for each  request processor
            <MBean "catalina/detailed_request_processor">
                ObjectName "Catalina:type=RequestProcessor,*"
                InstancePrefix "request_processor-"
                InstanceFrom "worker"

                <Value>
                  Type "io_octets"
                  #InstancePrefix ""
                  InstanceFrom "name"
                  Table false
                  Attribute "bytesReceived"
                  Attribute "bytesSent"
                </Value>

                <Value>
                  Type "total_requests"
                  #InstancePrefix ""
                  InstanceFrom "name"
                  Table false
                  Attribute "requestCount"
                </Value>

                <Value>
                  Type "total_time_in_ms"
                  InstancePrefix "processing-"
                  InstanceFrom "name"
                  Table false
                  Attribute "processingTime"
                </Value>
            </MBean>

            # Thread pool
            <MBean "catalina/thread_pool">
                ObjectName "Catalina:type=ThreadPool,name=*"
                InstancePrefix "request_processor-"
                InstanceFrom "name"

                <Value>
                  Type "threads"
                  InstancePrefix "total"
                  #InstanceFrom ""
                  Table false
                  Attribute "currentThreadCount"
                </Value>

                <Value>
                  Type "threads"
                  InstancePrefix "running"
                  #InstanceFrom ""
                  Table false
                  Attribute "currentThreadsBusy"
                </Value>
            </MBean>
            #####################
            # Connection blocks #
            #####################
            <Connection>
              ServiceURL "service:jmx:rmi:///jndi/rmi://localhost:8899/jmxrmi"
              Host "localhost"
              Collect "classes"
              Collect "compilation"
              Collect "garbage_collector"
              Collect "memory"
              Collect "memory_pool"
              Collect "catalina/thread_pool"
              Collect "catalina/detailed_request_processor"
              Collect "catalina/global_request_processor"
            </Connection>
        </Plugin>
    </Plugin>

我很感激任何答案。

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。 从Collectd GITHUB https://github.com/collectd/collectd/blob/master/bindings/java/org/collectd/api/OConfigItem.java,我们可以看到java api文件是最新版本,并且定义了缺少的API getHostname()。

对于安装了最新collectd 5.5版本的collect-api.jar,java文件不包含新API。

在编译完成后,它运行良好包装代码从github下载并更换旧罐子。

希望它可以帮助你。

无法相信这样的问题会在官方发布时发生。