すべてのプロダクト
Search
ドキュメントセンター

:Kubernetes JVM からのモニタリングデータの収集

最終更新日:Mar 08, 2025

Kubernetes Java 仮想マシン(JVM)のデータモニタリングは、Kubernetes クラスタ内のすべての JVM ベースのサービスのための柔軟なエンドツーエンドのメトリック収集ソリューションです。データモニタリングは、Kubernetes に適合した Logtail 構成と自動サービス検出でサポートされています。

前提条件

  • Full-stack Observability インスタンスが作成されていること。詳細については、「インスタンスの作成」をご参照ください。

実装

Java Management Extensions(JMX)テクノロジーは、Java SE プラットフォームの標準的な部分です。JMX は、主に Java アプリケーションと JVM サーバーおよびリソースのステータスなどの情報の監視と管理に使用されます。 JMX は、Prometheus エクスポーターと同様の方法で機能するデータインジェスチョンのために、Remote Method Invocation(RMI)をサポートしています。Java エージェントを使用するよりも、RMI を呼び出すことで、メトリックの読み取りがより安全になり、データ統合の費用対効果が高くなります。

Kubernetes クラスタでは、JVM メトリック収集コンポーネントとログ収集コンポーネントの両方に DaemonSet デプロイメントモデルが使用されます。 JVM からモニタリングデータを収集する場合、環境変数、Kubernetes ラベル、名前空間、ポッド名、およびコンテナ名を使用してデータをフィルタリングできます。データフィルタリングは、Kubernetes リソースの多次元選択をサポートするログ収集コンポーネントを使用して実装されます。RMI では Java プロセス間の通信が必要であり、Kubernetes リソースの選択では、多数の無関係なプロセスにヒットする可能性があります。この場合、Logtail は環境変数 ILOGTAIL_JMX_PORT を使用して、データの範囲をさらに絞り込みます。

JVM监控

開始する前に

Kubernetes クラスタにデプロイされた Java アプリケーションの JVM から Logtail を使用してモニタリングデータを自動的に収集するには、次の操作を実行する必要があります。

  1. 環境変数に POD_IP 宣言を追加します。

    例:

                - name: POD_IP
                  valueFrom:
                    fieldRef:
                      fieldPath: status.podIP
  2. JVM 起動パラメータを構成します。

    JMX リモートアクセスを有効にするには、次の com.sun.management.jmxremote パラメータを構成します。

    • com.sun.management.jmxremote.local.only パラメータを false に設定します。

    • com.sun.management.jmxremote.ssl パラメータと com.sun.management.jmxremote.authenticate パラメータの両方を false に設定するか、Logtail 構成で [JMX パスワード] パラメータを構成します。

    • com.sun.management.jmxremote.port パラメータと com.sun.management.jmxremote.rmi.port パラメータを宣言済みの RMI ポートに設定します。

    • java.rmi.server.hostname パラメータを POD_IP 環境変数の値に設定します。

       -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=9999
        -Dcom.sun.management.jmxremote.rmi.port=9999
        -Djava.rmi.server.hostname=$(POD_IP)
  3. 環境変数に ILOGTAIL_JMX_PORT 宣言を追加します。 この宣言は、公開されているメトリックポートを指定し、com.sun.management.jmxremote.port パラメータの値によって示されます。

  4. 上記の操作が完了したら、必要なポッドに接続し、jps コマンドを実行して JVM 起動パラメータを表示できます。 jps コマンドの JAVA_TOOL_OPTIONS="" 宣言は、ポートの競合を回避するために使用されます。 jps コマンドの実行時に環境変数 JAVA_TOOL_OPTIONS が使用されている場合、ポートの競合が発生する可能性があります。

    image.png

  5. 環境変数を確認します。必要なポッドに接続し、env|grep ILOGTAIL_JMX_PORT コマンドを実行します。

手順

  1. Simple Log Service コンソール にログインします。

  2. [ログアプリケーション] セクションで、[インテリジェント O&M] タブをクリックします。次に、[full-stack Observability] をクリックします。

  3. [simple Log Service Full-stack Observability] ページで、管理するインスタンスをクリックします。

  4. 左側のナビゲーションウィンドウで、[フルスタック監視] をクリックします。

    インスタンスで [フルスタック監視] を初めて使用する場合は、[有効化] をクリックします。

  5. 左側のナビゲーションウィンドウで、[データインポート] をクリックします。 [データインポート構成] ページで、[kubernetes 監視] セクションの [kubernetes JVM 監視] スイッチを見つけます。

    ホスト監視データの Logtail 構成を初めて作成する場合は、スイッチをオンにして構成ページに移動します。 Logtail 構成を作成した場合は、创建 アイコンをクリックして構成ページに移動します。

  6. [既存のマシングループを使用する] をクリックします。

    監視コンポーネントがインストールされると、Simple Log Service は、k8s-group-${your_k8s_cluster_id} 形式の名前を持つマシングループを自動的に作成します。 このマシングループを使用できます。

  7. k8s-group-${your_k8s_cluster_id} マシングループを選択し、[ソースサーバーグループ] セクションから [適用済みサーバーグループ] セクションにマシングループを移動し、[次へ] をクリックします。

    重要

    マシングループのハートビートステータスが [失敗] の場合は、[自動再試行] をクリックできます。 問題が解決しない場合は、「Logtail マシングループにハートビートがない場合の対処方法」をご参照ください。

  8. [データソースの指定] ステップで、パラメータを構成し、[完了] をクリックします。次の表にパラメータを示します。

    構成が完了すると、Simple Log Service は Metricstore などのアセットを自動的に作成します。

    パラメータ

    説明

    一般構成

    構成名

    Logtail 構成の名前。カスタム名を指定できます。

    クラスタ

    Kubernetes クラスタの名前。カスタム名を入力できます。

    このパラメータを構成すると、Simple Log Service は、Logtail 構成を使用して収集された Kubernetes JVM 監視データに cluster=クラスタ名 タグを追加します。

    重要

    クラスタ名が一意であることを確認してください。 そうしないと、データの競合が発生する可能性があります。

    JMX ユーザー名

    JMX サーバーへのアクセスに使用するユーザー名。

    Kubernetes クラスタでは、このパラメータを構成しないことをお勧めします。

    JMX パスワード

    JMX サーバーへのアクセスに使用するパスワード。

    Kubernetes クラスタでは、このパラメータを構成しないことをお勧めします。

    グローバルタグ

    収集された Kubernetes JVM 監視データに追加されるカスタムタグ。 タグはキーと値のペアです。

    このパラメータを構成すると、Simple Log Service は、Logtail 構成を使用して収集された JVM 監視データにカスタムタグを追加します。

    K8s セレクタの構成

    名前空間

    データが収集される名前空間の名前を照合するために使用される正規表現。

    ポッド名

    データが収集されるポッドの名前を照合するために使用される正規表現。

    コンテナ名

    データが収集されるコンテナの名前を照合するために使用される正規表現。

    環境変数ホワイトリスト

    環境変数ホワイトリスト。 ホワイトリストは、データが収集されるコンテナを指定します。 デフォルトでは、このパラメータは空であり、システムがすべてのコンテナから JVM 監視データを収集することを示します。 環境変数ホワイトリストを構成する場合、キーパラメータは必須です。 値パラメータはオプションです。

    • EnvValue パラメータが空の場合、EnvKey で指定されたキーを含む環境変数を持つコンテナが照合されます。

    • EnvValue パラメータが空でない場合、EnvKey および EnvValue で指定されたキーと値のペアで構成される環境変数を持つコンテナが照合されます。

      デフォルトでは、EnvValue パラメータの値に対して文字列照合が実行されます。 環境変数の値が EnvValue パラメータの値と同じ場合にのみ、コンテナが照合されます。 EnvValue パラメータに、キャレット(^)で始まりドル記号($)で終わる値を指定すると、正規表現照合が実行されます。 たとえば、[envkey] パラメータを NGINX_SERVICE_PORT に設定し、[envvalue] パラメータを ^(80|6379)$ に設定すると、ポート番号が 80 のコンテナとポート番号が 6379 のコンテナが照合されます。

    キーと値のペアは、OR 演算子を使用して接続されます。 コンテナに、指定されたキーと値のペアのいずれかで構成される環境変数が含まれている場合、そのコンテナは照合されます。

    環境変数ブラックリスト

    環境変数ブラックリスト。 ブラックリストは、データが収集されないコンテナを指定します。 デフォルトでは、このパラメータは空であり、システムがすべてのコンテナからデータを収集することを示します。 環境変数ブラックリストを構成する場合、キーパラメータは必須です。 値パラメータはオプションです。

    • EnvValue パラメータが空の場合、EnvKey で指定されたキーを含む環境変数を持つコンテナは除外されます。

    • EnvValue パラメータが空でない場合、EnvKey および EnvValue で指定されたキーと値のペアで構成される環境変数を持つコンテナは除外されます。

      デフォルトでは、EnvValue パラメータの値に対して文字列照合が実行されます。 環境変数の値が EnvValue パラメータの値と同じ場合にのみ、コンテナが照合されます。 EnvValue パラメータに、キャレット(^)で始まりドル記号($)で終わる値を指定すると、正規表現照合が実行されます。 たとえば、[envkey] パラメータを NGINX_SERVICE_PORT に設定し、[envvalue] パラメータを ^(80|6379)$ に設定すると、ポート番号が 80 のコンテナとポート番号が 6379 のコンテナが照合されます。

    キーと値のペアは、OR 演算子を使用して接続されます。 コンテナに、指定されたキーと値のペアのいずれかで構成される環境変数が含まれている場合、そのコンテナは除外されます。

    K8s ラベルホワイトリスト

    Kubernetes ラベルホワイトリスト。 ホワイトリストは、データが収集されないコンテナを指定します。 Kubernetes ラベルホワイトリストを構成する場合、キーパラメータは必須であり、値パラメータはオプションです。

    • LabelValue パラメータが空の場合、LabelKey で指定されたキーを含む Kubernetes ラベルを持つコンテナが照合されます。

    • LabelValue パラメータが空でない場合、LabelKey および LabelValue で指定されたキーと値のペアで構成される Kubernetes ラベルを持つコンテナが照合されます。

      デフォルトでは、LabelValue パラメータの値に対して文字列照合が実行されます。 Kubernetes ラベルの値が LabelValue パラメータの値と同じ場合にのみ、コンテナが照合されます。 キャレット(^)で始まりドル記号($)で終わる値を指定すると、正規表現照合が実行されます。 たとえば、[labelkey] パラメータを app に設定し、[labelvalue] パラメータを ^(test1|test2)$ に設定すると、app:test1 または app:test2 で構成される Kubernetes ラベルを持つコンテナが照合されます。

    キーと値のペアは、OR 演算子を使用して接続されます。 コンテナに、指定されたキーと値のペアのいずれかで構成される Kubernetes ラベルが含まれている場合、そのコンテナは照合されます。

    K8s ラベルブラックリスト

    Kubernetes ラベルブラックリスト。 ブラックリストは、データが収集されないコンテナを指定します。 Kubernetes ラベルブラックリストを構成する場合、キーパラメータは必須であり、値パラメータはオプションです。

    • LabelValue パラメータが空の場合、LabelKey で指定されたキーを含む Kubernetes ラベルを持つコンテナは除外されます。

    • LabelValue パラメータが空でない場合、LabelKey および LabelValue で指定されたキーと値のペアで構成される Kubernetes ラベルを持つコンテナは除外されます。

      デフォルトでは、LabelValue パラメータの値に対して文字列照合が実行されます。 Kubernetes ラベルの値が LabelValue パラメータの値と同じ場合にのみ、コンテナが照合されます。 キャレット(^)で始まりドル記号($)で終わる値を指定すると、正規表現照合が実行されます。 たとえば、[labelkey] パラメータを app に設定し、[labelvalue] パラメータを ^(test1|test2)$ に設定すると、app:test1 または app:test2 で構成される Kubernetes ラベルを持つコンテナが照合されます。

    キーと値のペアは、OR 演算子を使用して接続されます。 コンテナに、指定されたキーと値のペアのいずれかで構成される Kubernetes ラベルが含まれている場合、そのコンテナは除外されます。

    コンテナラベルホワイトリスト

    コンテナラベルホワイトリスト。 ホワイトリストは、データが収集されるコンテナを指定します。 デフォルトでは、このパラメータは空であり、システムがすべてのコンテナから JVM 監視データを収集することを示します。 コンテナラベルホワイトリストを構成する場合、キーパラメータは必須です。 値パラメータはオプションです。

    • LabelValue パラメータが空の場合、LabelKey で指定されたキーを含むコンテナラベルを持つコンテナが照合されます。

    • LabelValue パラメータが空でない場合、LabelKey および LabelValue で指定されたキーと値のペアで構成されるコンテナラベルを持つコンテナが照合されます。

      デフォルトでは、LabelValue パラメータの値に対して文字列照合が実行されます。 コンテナラベルの値が LabelValue パラメータの値と同じ場合にのみ、コンテナが照合されます。 LabelValue パラメータに、キャレット(^)で始まりドル記号($)で終わる値を指定すると、正規表現照合が実行されます。 たとえば、[labelkey] パラメータを io.kubernetes.container.name に設定し、[labelvalue] パラメータを ^(nginx|cube)$ に設定すると、nginx という名前のコンテナと cube という名前のコンテナが照合されます。

    キーと値のペアは OR 演算子を使用して接続されます。 コンテナに指定されたキーと値のペアのいずれかで構成されるコンテナラベルがある場合、そのコンテナは照合されます。

    コンテナラベルブラックリスト

    コンテナラベルブラックリスト。 ブラックリストは、データが収集されないコンテナを指定します。 デフォルトでは、このパラメータは空であり、すべてのコンテナからデータを収集することを示します。 コンテナラベルブラックリストを構成する場合、キーパラメータは必須です。 値パラメータはオプションです。

    • LabelValue パラメータが空の場合、LabelKey で指定されたキーを含むコンテナラベルを持つコンテナは除外されます。

    • LabelValue パラメータが空でない場合、LabelKey および LabelValue で指定されたキーと値のペアで構成されるコンテナラベルを持つコンテナは除外されます。

      デフォルトでは、LabelValue パラメータの値に対して文字列照合が実行されます。 コンテナラベルの値が LabelValue パラメータの値と同じ場合にのみ、コンテナが照合されます。 LabelValue パラメータに、キャレット(^)で始まりドル記号($)で終わる値を指定すると、正規表現照合が実行されます。 たとえば、[labelkey] パラメータを io.kubernetes.container.name に設定し、[labelvalue] パラメータを ^(nginx|cube)$ に設定すると、nginx という名前のコンテナと cube という名前のコンテナが照合されます。

    キーと値のペアは OR 演算子を使用して接続されます。 コンテナに指定されたキーと値のペアのいずれかで構成されるコンテナラベルがある場合、そのコンテナは除外されます。

    詳細構成

    Kubernetes ラベルの収集

    Kubernetes ラベルが構成されると、Simple Log Service は、収集された JVM 監視データに Kubernetes ラベル関連のフィールドを追加します。

    たとえば、ラベルの名前を app に設定し、名前のエイリアスを k8s_label_app に設定します。 Kubernetes クラスタに app=serviceA などの app という名前のラベルが含まれている場合、Simple Log Service は JVM 監視データに k8s_label_app: serviceA フィールドを追加します。

    環境変数の収集

    環境変数ラベルが構成されると、Simple Log Service は収集された JVM 監視データに環境変数ラベル関連のフィールドを追加します。

    たとえば、環境変数の名前を VERSION に設定し、名前のエイリアスを env_version に設定した場合、コンテナには VERSION=v1.0.0 などの VERSION という名前の環境変数が含まれており、Simple Log Service は JVM 監視データに env_version: v1.0.0 フィールドを追加します。

    新バージョンの JMX ガベージコレクタ

    スイッチをオンにすると、G1 などの新バージョンの JMX ガベージコレクタがサポートされます。

    デフォルトの JVM メトリック

    スイッチをオンにすると、Logtail は事前定義されたコア JVM メトリックを収集します。

    JMX メトリック収集フィルタ

    JMX Bean 範囲、JMX Bean 正規表現、JMX Bean タイプ、および JMX 属性範囲を使用したフィルタリングと収集がサポートされています。

構成例

たとえば、default という名前空間に SpringBoot デモサービスを開始できます。 その後、ILOGTAIL_JMX_PORT 宣言を使用してポート 9999 を公開できます。 環境変数 JAVA_TOOL_OPTIONS では、公開されているポート 9999 に対応する JMX メトリックの JVM 起動パラメータを追加できます。

説明

環境変数 JAVA_TOOL_OPTIONS を使用して環境変数 POD_IP を参照する前に、環境変数 POD_IP を定義する必要があります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jvm-new-1
  namespace: default
spec:
...
  template:
    metadata:
      labels:
        app: jvm1
    spec:
      containers:
        - image: evanljp/full-stack:jvm-new-0.1
          name: jvm
          env:
            - name: "ILOGTAIL_JMX_PORT"
              value: "9999"
            - name: "ILOGTAIL_JMX_TAGS"
              value: "a=b,c=d"
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            - name: JAVA_TOOL_OPTIONS
              value: >-
                -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=9999
                -Dcom.sun.management.jmxremote.rmi.port=9999
                -Djava.rmi.server.hostname=$(POD_IP)
                -Dserver.port=8081
          ...
​

上記の宣言を指定した後、Kubernetes JVM から Simple Log Service にモニタリングデータを収集するために、Logtail 構成で次の設定を完了する必要があります。

JVM监控

次のステップ

Kubernetes JVM 監視データが収集され、フルスタック監視アプリケーションに送信されると、アプリケーションは監視データ専用のダッシュボードを自動的に作成します。 ダッシュボードを使用して、監視データを分析できます。詳細については、「ダッシュボードの表示」をご参照ください。