インテグレーションオートディスカバリーアノテーションを活用するか、オートディスカバリーコンテナ識別子を使用して、Kubernetes のポッドから JMX アプリケーションのメトリクスを収集します。オートディスカバリーアノテーションは、Datadog-JMX インテグレーションを構成するための推奨される方法です。コンフィギュレーションパラメーターのセットが長すぎてアノテーションに収まらない場合は、オートディスカバリーコンテナ識別子メソッドを使用します。

オートディスカバリーアノテーション

オートディスカバリーアノテーションロジックは、Agent が JMX チェックコンフィギュレーション要素を「自動的に検出」し、それに応じて JMX チェックを構成できるように、アノテーションを介して JMX チェックコンフィギュレーション要素をポッドに適用します。

  1. 通常の gcr.io/datadoghq/agent:latest ではなく、gcr.io/datadoghq/agent:latest-jmx イメージ名を使用して、Kubernetes クラスターで Agent を起動します。

  2. JMX アプリケーションを含むコンテナにオートディスカバリーアノテーションを適用します。

    apiVersion: v1
    kind: Pod
    metadata:
        name: <POD_NAME>
        annotations:
            ad.datadoghq.com/<CONTAINER_IDENTIFIER>.check_names: '["<INTEGRATION_NAME>"]'
            ad.datadoghq.com/<CONTAINER_IDENTIFIER>.init_configs: '[{"is_jmx": true, "collect_default_metrics": true}]'
            ad.datadoghq.com/<CONTAINER_IDENTIFIER>.instances: '[{"host": "%%host%%","port":"<JMX_PORT>"}]'
            ad.datadoghq.com/<CONTAINER_IDENTIFIER>.logs: '[{"source":"<INTEGRATION_NAME>","service":"<INTEGRATION_NAME>"}]'
        # (...)
    
    spec:
        containers:
            - name: '<CONTAINER_IDENTIFIER>'
            # (...)
              env:
              - name: POD_IP
                valueFrom:
                  fieldRef:
                    fieldPath: status.podIP
    
              - name: JAVA_OPTS
                value: >-
                  -Xms256m -Xmx6144m
                  -Dcom.sun.management.jmxremote
                  -Dcom.sun.management.jmxremote.authenticate=false
                  -Dcom.sun.management.jmxremote.ssl=false
                  -Dcom.sun.management.jmxremote.local.only=false
                  -Dcom.sun.management.jmxremote.port=<JMX_PORT>
                  -Dcom.sun.management.jmxremote.rmi.port=<JMX_PORT>
                  -Djava.rmi.server.hostname=$(POD_IP)              
    

    Agent が RMI レジストリに接続することを JMX サーバーが許可するように、JAVA_OPTS 環境変数を作成する必要があります。

    :

    • <JMX_PORT> は、JMX メトリクスを公開するポートを参照します。
    • 上記の例で、RMI レジストリへの接続は SSL ではありません。SSL を使用したい場合は、ad.datadoghq.com/<CONTAINER_IDENTIFIER>.instances アノテーションで "rmi_registry_ssl": true を使用し、対応する Dcom.sun.management.jmxremoteJAVA_OPTS から削除します。

JMX 対応のインテグレーション名 <INTEGRATION_NAME> のリストは次のとおりです。

たとえば、ポート 9012 で JMX メトリクスを公開している Tomcat を実行している場合は、次のようにします。

apiVersion: v1
kind: Pod
metadata:
    name: tomcat-test
    annotations:
        ad.datadoghq.com/tomcat.check_names: '["tomcat"]'
        ad.datadoghq.com/tomcat.init_configs: '[{"is_jmx": true, "collect_default_metrics": true}]'
        ad.datadoghq.com/tomcat.instances: '[{"host": "%%host%%","port":"9012"}]'
        ad.datadoghq.com/tomcat.logs: '[{"source":"Tomcat","service":"Tomcat"}]'

spec:
    containers:
        - name: tomcat
          image: tomcat:8.0
          imagePullPolicy: Always
          ports:
              - containerPort: 9012
          env:
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP

            - name: JAVA_OPTS
              value: >-
                -Xms256m -Xmx6144m
                -Dcom.sun.management.jmxremote
                -Dcom.sun.management.jmxremote.authenticate=false
                -Dcom.sun.management.jmxremote.ssl=false
                -Dcom.sun.management.jmxremote.local.only=false
                -Dcom.sun.management.jmxremote.port=9012
                -Dcom.sun.management.jmxremote.rmi.port=9012
                -Djava.rmi.server.hostname=$(POD_IP)                

オートディスカバリーコンテナ識別子

Datadog-JMX インテグレーションのより複雑なコンフィギュレーションを渡す必要がある場合は、オートディスカバリーコンテナ識別子を利用して、カスタムインテグレーションコンフィギュレーションファイルまたはカスタム metrics.yaml ファイルを渡します。

Agent の準備

Agent がクラスターのコンテナとして実行されているか、ホストで直接実行されているかを選択します。

Agent がクラスターで実行されており、JMX メトリクスを収集するためにコンテナを自動検出する場合:

  1. 通常の gcr.io/datadoghq/agent:latest イメージではなく、必ず Agent イメージ gcr.io/datadoghq/agent:latest-jmx を実行してください。

  2. インテグレーションに関連付けられているコンフィギュレーションファイル conf.yamlmetrics.yaml を取得します。Datadog-JMX ベースのインテグレーションと関連するファイルのリストを以下に示します。

  3. conf.yaml.example ファイルの名前を conf.yaml に変更します。

  4. Agent オートディスカバリーロジックに適合するように、conf.yaml のパラメーター値を置き換えます。コンフィギュレーションファイルにはデフォルトでホストパラメーター値があり、代わりにオートディスカバリーテンプレート変数ロジックを使用します。次の Tomcat チェックの例では、host パラメーター値が localhost から %%host%% に変更されています。

    init_config:
        ## @param is_jmx - boolean - required
        ## Whether or not this file is a configuration for a JMX integration.
        #
        is_jmx: true
    
        ## @param collect_default_metrics - boolean - required
        ## Whether or not the check should collect all default metrics.
        #
        collect_default_metrics: true
    
    instances:
        ## @param host - string - required
        ## Tomcat JMX hostname to connect to.
        #
        - host: '%%host%%'
    
          ## @param port - integer - required
          ## Tomcat JMX port to connect to.
          #
          port: 9012
    
  5. このコンフィギュレーションファイルをアプリケーションコンテナに適用する Agent に指定するには、conf.yaml ファイルの先頭に ad_identifiers パラメーターを構成します。

    ad_identifiers:
        - '<CUSTOM_AD_IDENTIFIER>'
    
    init_config:
        # (...)
    instances:
        # (...)
    

    : 上記の例ではカスタム ad_identifers 値を使用していますが、必要に応じて、コンテナショートイメージad_identifiers として指定できます。

  6. conf.d/<INTEGRATION_NAME>.d/ フォルダーの Agent にコンフィギュレーションファイル (conf.yamlmetrics.yaml) をマウントします。

  7. (任意) - Agent コンテナ (AWS ECS など) で上記のファイルをマウントできない場合は、これら 2 つのコンフィギュレーションファイルを使用して Agent Docker イメージを再構築する必要があります。

    FROM gcr.io/datadoghq/agent:latest-jmx
    COPY <PATH_JMX_CONF_FILE> conf.d/tomcat.d/
    COPY <PATH_JMX_METRICS_FILE> conf.d/tomcat.d/
    

    その後、この新しいカスタムイメージを正規のコンテナ化された Agent として使用します。

Agent がホストで実行されており、JMX メトリクスを収集するためにコンテナを自動検出する場合:

  1. Agent のオートディスカバリーを有効化します

  2. Agent インテグレーションディレクトリの対応する conf.yaml.example ファイルの名前を conf.yaml に変更して、使用する JMX インテグレーションを有効にします。たとえば Tomcat の場合、/etc/datadog-agent/conf.d/tomcat.d/conf.yaml.example の名前を /etc/datadog-agent/conf.d/tomcat.d/conf.yaml に変更します。

  3. Agent オートディスカバリーロジックに適合するように、conf.yaml ファイルのパラメーター値を置き換えます。コンフィギュレーションファイルにはデフォルトでホストパラメーター値があり、代わりにオートディスカバリーテンプレート変数を使用します。次の Tomcat コンフィギュレーションの例では、host パラメーター値が localhost から %%host%% に変更されています。

    init_config:
        ## @param is_jmx - boolean - required
        ## Whether or not this file is a configuration for a JMX integration.
        #
        is_jmx: true
    
        ## @param collect_default_metrics - boolean - required
        ## Whether or not the check should collect all default metrics.
        #
        collect_default_metrics: true
    
    instances:
        ## @param host - string - required
        ## Tomcat JMX hostname to connect to.
        #
        - host: '%%host%%'
    
          ## @param port - integer - required
          ## Tomcat JMX port to connect to.
          #
          port: 9012
    
  4. このコンフィギュレーションファイルをアプリケーションコンテナに適用する Agent に指定するには、conf.yaml ファイルの先頭に ad_identifiers パラメーターを構成します。

    ad_identifiers:
        - '<CUSTOM_AD_IDENTIFIER>'
    
    init_config:
        # (...)
    instances:
        # (...)
    

    : 上記の例ではカスタム ad_identifers 値を使用していますが、必要に応じて、コンテナショートイメージad_identifiers として指定できます。

  5. Agent を再起動します

コンテナの準備

Docker

Agent を構成して実行したら、アプリケーションコンテナの com.datadoghq.ad.check.id:"<CUSTOM_AD_IDENTIFIER>" ラベルを使用して、オートディスカバリーからチェックコンフィギュレーションを適用します。

Dockerfile:

LABEL "com.datadoghq.ad.check.id"= '<CUSTOM_AD_IDENTIFIER>'

docker-compose.yaml:

labels:
    com.datadoghq.ad.check.id: '<CUSTOM_AD_IDENTIFIER>'

docker run command:

-l com.datadoghq.ad.check.id= '<CUSTOM_AD_IDENTIFIER>'

Docker Swarm:

Docker Cloud の Swarm モードを使用する場合は、以下のようにラベルをイメージに適用する必要があります。

version: '1.0'
services:
# ...
project:
    image: '<IMAGE_NAME>'
    labels:
        com.datadoghq.ad.check.id: '<CUSTOM_AD_IDENTIFIER>'

: Agent と JMX コンテナが同じネットワークブリッジ上にある場合は、JMX サーバーを -Djava.rmi.server.hostname=<CONTAINER_NAME>" でインスタンス化する必要があります。<CONTAINER_NAME> は JMX アプリケーションコンテナ名です。

その他の参考資料