异常(缺少API的gethostname())测试JMX插件Collectd

问题描述:

当我们测试JMX插件时Collectd面临NoSuchMethod exception异常(缺少API的gethostname())测试JMX插件Collectd

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

既没有从official api wiki也没有从源代码collectd-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> 

我将不胜感激任何答案。

+0

欢迎来到Stack Overflow!我编辑了你的问题,以正确地格式化内联代码和块引用。我还将代码示例缩进了4个空格,以便它能够正确渲染 - 请参阅编辑帮助以获取有关格式化的更多信息。祝你好运! – Wtower

我修复了这个问题。 从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下载并替换旧的jar后运行良好。

希望它能帮助你。

只是不能相信这样的问题会发生在官方发布。