JMX Checks

Java, Cassandra, Tomcat, ActiveMQ, Solrのインテグレーションで使用しています。

概要

JMX Checks are agents checks that collect metrics from applications that expose them using JMX.

In order to collect these metrics, a lightweight Java plugin named JMXFetch is called by the Datadog Agent to connect to the MBean Server and to collect these metrics. This plugin sends metrics to the Datadog Agent using the DogStatsD server running with the Agent.

JMX Checks have a limit of 350 metrics per instance which should be enough to satisfy your needs as it’s really easy to customize which metrics you want to collect. We are going to see how to do so.

JMXチェックは、JMXを使用してそれらの公開アプリケーションからメトリックを取得するエージェントチェックです。

これらのメトリックを取得するために、JMXFetchという名前の軽量のJavaプラグインを、MBeanサーバーに接続しDatadogエージェントによって呼び出されます。このプラグインは、エージェントで実行されるDogStatsDサーバーを使用してDatadogエージェントにメトリックを送信します。

JMXのチェックでは、あなたが取得するメトリックをカスタマイズすることはとても簡単です、取得するメトリックスはインスタンスごとに350メトリックスまでとなっています。

JMX Checkを有効にする方法

Datadog Agent内でJMXを使ったインテグレーションを設定する手順に関しては、以下のリンクを参照してください:

カスタマイズ

JMX Checkには、JMXアプリケーションから基本的なメトリックを取得するように初期設定してあります。尚、JMXFetchによって読み込まれるYAMLファイルを設定することにより、Datadog Agentに渡されるJMXアプリケーションから取得したメトリクスを指定することができます。

JMX Checkによって取得可能なメトリクスを調べるためのコマンド:

コマンドdatadog-agent jmxは、Datadog Agent version 4.1.0で追加されました。
  • どれかのインスタンスの設定内容に一致したアトリビュート(属性)のリスト:

    sudo /etc/init.d/datadog-agent jmx list_matching_attributes

  • どれかのインスタンスの設定内容に一致したアトリビュート(属性)で、メトリクスの収集制限を超えているために現状取得されていないアトリビュート(属性)のリスト:

    sudo /etc/init.d/datadog-agent jmx list_limited_attributes

  • インスタンスの設定内容に基づいて、実際に取得されるアトリビュート(属性)のリスト:

    sudo /etc/init.d/datadog-agent jmx list_collected_attributes

  • そのインスタンスの設定内容に一致しないアトリビュート(属性)のリスト:

    sudo /etc/init.d/datadog-agent jmx list_not_matching_attributes

  • JMXFetchでサポートされている全てのアトリビュート(属性)のリスト:

    sudo /etc/init.d/datadog-agent jmx list_everything

  • 設定に基づいてJMXからのメトリクスを取得し、コンソールに表示する:

    sudo /etc/init.d/datadog-agent jmx collect

取得するメトリクスをカスタマイズする:

他のAgent Checkと同じようにJMX Checkも2つのメインセクションで構成されています:

  • init_config: 全てのインスタンスに適応される設定
  • instances: 当該インスタンスに適応される設定

詳しくは、「Agent Checkの書き方」のページを参照してください。

JMX checks require a conf section that has to be placed within either the init_config section or the instances section.

The conf section will be used to determine what JMX attributes should be collected and sent as metrics to Datadog.

The configuration section looks like this:

The conf parameter is a list of dictionaries. Only 2 keys are allowed in this dictionary:

  • include (mandatory): Dictionary of filters, any attribute that matches these filters will be collected unless it also matches the “exclude” filters (see below)
  • exclude (optional): Another dictionary of filters. Attributes that match these filters won’t be collected

For a given bean, metrics get tagged in the following manner:

mydomain:attr0=val0,attr1=val1

Your metric will be mydomain (or some variation depending on the attribute inside the bean) and have the tags attr0:val0, attr1:val1, domain:mydomain.

Description of the filters

These dictionaries have some specials keys:

  • domain: The domain of the attribute (e.g. java.lang)
  • bean or bean_name: A list of full bean names (e.g. java.lang:type=Compilation)
  • attribute: A list or a dictionary of attribute names (see below for more details)

On top of these parameters, the filters support “custom” keys which means that you can filter by bean parameters.

Example: Let’s say you want to collect metrics regarding the Cassandra cache. You could use the type: - Caches filter:

The attribute filter

The attribute filter can accept two types of values:

  • A dictionary whose keys are attributes names:

In that case you can specify an alias for the metric that will become the metric name in Datadog. You can also specify the metric type either a gauge or a counter. If you choose counter, a rate per second will be computed for this metric.

  • A list of attributes names:

In that case:

  • The metric type will be a gauge
  • The metric name will be jmx.[DOMAIN_NAME].[ATTRIBUTE_NAME]

Here is another filtering example:

    instances:
      - host: 127.0.0.1
        name: jmx_instance
        port: 9999

    init_config:
      conf:
        - include:
            bean: org.apache.cassandra.metrics:type=ClientRequest,scope=Write,name=Latency
            attribute:
              - OneMinuteRate
              - 75thPercentile
              - 95thPercentile
              - 99thPercentile

Note

フィルターのリストは、Datadog Agent 5.3.0からサポートされました。もし、旧バージョンのDatadog Agentを使っている場合は、bean毎に別のinclude文を記述するようにしてください。

  • Datadog Agent > 5.3.0 を使用している場合

    conf:
        - include:
           domain: domain_name
           bean:
             - first_bean_name
             - second_bean_name
    ...
    
  • Datadog Agent 5.3.0 以前を使用している場合

    conf:
        - include:
            domain: domain_name
            bean: first_bean_name
        - include:
            domain: domain_name
            bean: second_bean_name
    ...
    

トラブルシューティング

送信可能なメトリクス数の上限について (350個)

これらのインテグレーションは、その特性上大量のメトリクスをDatadogへ送信することが可能です。このような状況下、お客様とのコミュケーションの中で分かったことは、「インテグレーションが送信しているメトリクスの全てが必要な訳ではない」ということでした。従って、これらのインテグレーションから送信できるメトリクスを350個に制限しています。

メトリクスを350個以内に収めるために、Datadogではコマンドラインツールを提供しています。上記で紹介したコマンドラインツールを使いどのようなメトリクスが取得可能かを調査し、excludeによるフィルターを設定することによりキーとなるメトリクスを絞り込むことをお勧めします。もし、JMX関連で、350個以上のメトリクスが必要な場合は、support@datadoghq.comまでご連絡ください。