instances:
  - host: localhost
    port: 9999 # This is the JMX port on which Kafka exposes its metrics (usually 9999)
  #   user: username
  #   password: password
  #   process_name_regex: .*process_name.* # Instead of specifying a host, and port. The agent can connect using the attach api.
  #                                                                       #   This requires the JDK to be installed and the path to tools.jar to be set below.
  #   tools_jar_path: /usr/lib/jvm/java-7-openjdk-amd64/lib/tools.jar # To be set when process_name_regex is set
  #   name: kafka_instance
  #   # java_bin_path: /path/to/java # Optional, should be set if the agent cannot find your java executable
  #   # trust_store_path: /path/to/trustStore.jks # Optional, should be set if ssl is enabled
  #   # trust_store_password: password
  #   tags:
  #     env: stage
  #     newTag: test

init_config:
  is_jmx: true

  # Metrics collected by this check. You should not have to modify this.
  conf:
    #
    # Aggregate cluster stats
    #
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsBytesOutPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.net.bytes_out
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsBytesInPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.net.bytes_in
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsMessagesInPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.messages_in

    #
    # Request timings
    #
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsFailedFetchRequestsPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.request.fetch.failed
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsFailedProduceRequestsPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.request.produce.failed
    - include:
        domain: '"kafka.network"'
        bean: '"kafka.network":type="RequestMetrics",name="Produce-TotalTimeMs"'
        attribute:
          Mean:
            metric_type: gauge
            alias: kafka.request.produce.time.avg
          99thPercentile:
            metric_type: gauge
            alias: kafka.request.produce.time.99percentile
    - include:
        domain: '"kafka.network"'
        bean: '"kafka.network":type="RequestMetrics",name="Fetch-TotalTimeMs"'
        attribute:
          Mean:
            metric_type: gauge
            alias: kafka.request.fetch.time.avg
          99thPercentile:
            metric_type: gauge
            alias: kafka.request.fetch.time.99percentile
    - include:
        domain: '"kafka.network"'
        bean: '"kafka.network":type="RequestMetrics",name="UpdateMetadata-TotalTimeMs"'
        attribute:
          Mean:
            metric_type: gauge
            alias: kafka.request.update_metadata.time.avg
          99thPercentile:
            metric_type: gauge
            alias: kafka.request.update_metadata.time.99percentile
    - include:
        domain: '"kafka.network"'
        bean: '"kafka.network":type="RequestMetrics",name="Metadata-TotalTimeMs"'
        attribute:
          Mean:
            metric_type: gauge
            alias: kafka.request.metadata.time.avg
          99thPercentile:
            metric_type: gauge
            alias: kafka.request.metadata.time.99percentile
    - include:
        domain: '"kafka.network"'
        bean: '"kafka.network":type="RequestMetrics",name="Offsets-TotalTimeMs"'
        attribute:
          Mean:
            metric_type: gauge
            alias: kafka.request.offsets.time.avg
          99thPercentile:
            metric_type: gauge
            alias: kafka.request.offsets.time.99percentile

    #
    # Replication stats
    #
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="ReplicaManager",name="ISRShrinksPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.replication.isr_shrinks
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="ReplicaManager",name="ISRExpandsPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.replication.isr_expands
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="ControllerStats",name="LeaderElectionRateAndTimeMs"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.replication.leader_elections
    - include:
        domain: '"kafka.server"'
        bean: '"kafka.server":type="ControllerStats",name="UncleanLeaderElectionsPerSec"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.replication.unclean_leader_elections

    #
    # Log flush stats
    #
    - include:
        domain: '"kafka.log"'
        bean: '"kafka.log":type="LogFlushStats",name="LogFlushRateAndTimeMs"'
        attribute:
          MeanRate:
            metric_type: gauge
            alias: kafka.log.flush_rate