# contrib/GenericJMX.conf
# -----------------------
#
# This is an example config file for the ‘GenericJMX’ plugin, a plugin written
# in Java to receive values via the “Java Management Extensions” (JMX). The
# plugin can be found in the
#   bindings/java/org/collectd/java/
# directory of the source distribution.
#
# This sample config defines a couple of <MBean /> blocks which query MBeans
# provided by the JVM itself, i. e. which should be available for all Java
# processes. The following MBean blocks are defined:
#
#   +-------------------+------------------------------------------------+
#   ! Name              ! Description                                    !
#   +-------------------+------------------------------------------------+
#   ! classes           ! Number of classes being loaded.                !
#   ! compilation       ! Time spent by the JVM compiling or optimizing. !
#   ! garbage_collector ! Number of garbage collections and time spent.  !
#   ! memory            ! Generic heap/nonheap memory usage.             !
#   ! memory_pool       ! Memory usage by memory pool.                   !
#   +-------------------+------------------------------------------------+
#
<Plugin "java">
  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>

#      # Not that useful, therefore commented out.
#      <Value>
#        Type "threads"
#        #InstancePrefix ""
#        #InstanceFrom ""
#        Table false
#        # Demonstration how to access composite types
#        Attribute "LastGcInfo.GcThreadCount"
#      </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,*"
      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:17264/jmxrmi"
      User "monitorRole"
      Password "queeZie1"
      Host "localhost"
      Collect "classes"
      Collect "compilation"
      Collect "garbage_collector"
      Collect "memory"
      Collect "memory_pool"
    </Connection>
  </Plugin>
</Plugin>
