Apache Tomcat

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Apache Tomcat の統合により、アクティブなセッション数やネットワーク スループットなど、トラフィック関連の指標が収集されます。この統合により、アクセスログと Catalina ログも収集されます。アクセスログは、リクエストの詳細に重点を置いた JSON ペイロードに解析されます。Catalina ログは、一般的な詳細の解析に使用されます。tomcat レシーバは、JMX を介して Tomcat サーバーの Java 仮想マシン(JVM)からテレメトリーを収集します。

Tomcat の詳細については、Apache Tomcat のドキュメントをご覧ください。

前提条件

Tomcat テレメトリーを収集するには、Ops エージェントをインストールする必要があります。

  • 指標の場合は、バージョン 2.9.0 以降をインストールします。
  • ログの場合は、バージョン 2.9.0 以降をインストールします。

この統合は、Tomcat バージョン 10.x と 9.0.x をサポートしています。

Tomcat インスタンスを構成する

JMX エンドポイントを公開するには、JVM の起動時に com.sun.management.jmxremote.port システム プロパティを設定する必要があります。また、com.sun.management.jmxremote.rmi.port システム プロパティも同じポートに設定することをおすすめします。JMX エンドポイントをリモートで公開するには、java.rmi.server.hostname システム プロパティも設定する必要があります。

デフォルトでは、これらのプロパティは Tomcat デプロイの tomcat-env.sh ファイルで設定されています。

コマンドライン引数を使用してシステム プロパティを設定するには、JVM の起動時にプロパティ名の前に -D を付けます。たとえば、com.sun.management.jmxremote.port をポート 8050 に設定するには、JVM の起動時に次のように指定します。

-Dcom.sun.management.jmxremote.port=8050

Tomcat 用に Ops エージェントを構成する

Ops エージェントの構成のガイドに従って、Tomcat インスタンスからテレメトリーを収集するために必要な要素を追加し、エージェントを再起動します。

構成の例

次のコマンドは、Tomcat のテレメトリーを収集して取り込み、Ops エージェントを再起動するための構成を作成します。

# Configures Ops Agent to collect telemetry from the app and restart Ops Agent.

set -e

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Configure the Ops Agent.
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    tomcat:
      type: tomcat
      endpoint: service:jmx:rmi:///jndi/rmi://127.0.0.1:8050/jmxrmi
  service:
    pipelines:
      tomcat:
        receivers:
          - tomcat

logging:
  receivers:
    tomcat_access:
      type: tomcat_access
    tomcat_system:
      type: tomcat_system
  service:
    pipelines:
      tomcat:
        receivers:
          - tomcat_access
          - tomcat_system
EOF

sudo service google-cloud-ops-agent restart
sleep 60

ログの収集を構成する

Tomcat からログを取り込むには、Tomcat が生成するログのレシーバを作成してから、新しいレシーバ用のパイプラインを作成する必要があります。

tomcat_system ログのレシーバを構成するには、次のフィールドを指定します。

項目 デフォルト 説明
exclude_paths include_paths の照合で除外するファイルシステム パスのパターンのリスト。
include_paths [/opt/tomcat/logs/catalina.out] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスにはワイルドカード(*)を使用できます。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
type 値には tomcat_system を指定してください。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイル パスの更新間隔。time.ParseDuration によって解析可能な時間として指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトよりも短い間隔で実施され、ロギングのスループットが高い場合に有用な可能性があります。

tomcat_access ログのレシーバーを構成するには、次のフィールドを指定します。

項目 デフォルト 説明
exclude_paths include_paths の照合で除外するファイルシステム パスのパターンのリスト。
include_paths [/opt/tomcat/logs/localhost_access_log.*.txt] 各ファイルのテーリングで読み込むファイルシステムのパスのリスト。パスにはワイルドカード(*)を使用できます。
record_log_file_path false true に設定すると、ログレコードの取得元のファイルのパスが agent.googleapis.com/log_file_path ラベルの値として出力ログエントリに表示されます。ワイルドカードを使用する場合、レコードを取得したファイルのパスのみが記録されます。
type 値には tomcat_access を指定してください。
wildcard_refresh_interval 60s include_paths のワイルドカード ファイル パスの更新間隔。time.ParseDuration によって解析可能な時間として指定します(例: 30s2m)。このプロパティは、ログファイルのローテーションがデフォルトよりも短い間隔で実施され、ロギングのスループットが高い場合に有用な可能性があります。

ログの内容

logName は、構成で指定されたレシーバ ID から取得されます。LogEntry 内の詳細なフィールドは、次のとおりです。

tomcat_system ログの LogEntry には次のフィールドが含まれます。

フィールド タイプ 説明
jsonPayload.level 文字列 ログエントリ レベル
jsonPayload.message 文字列 ログ メッセージ(指定した場合の詳細なスタックトレースを含む)
jsonPayload.module 文字列 ログが発生した Tomcat のモジュール
jsonPayload.source 文字列 ログの取得元
severity 文字列(LogSeverity ログエントリ レベル(変換済み)。

tomcat_access ログの LogEntry には次のフィールドが含まれます。

フィールド タイプ 説明
httpRequest オブジェクト HttpRequest を参照
jsonPayload.host 文字列 Host ヘッダーの内容
jsonPayload.user 文字列 リクエストの認証済みユーザー名
severity 文字列(LogSeverity ログエントリ レベル(変換済み)。

指標の収集を構成する

Tomcat から指標を取り込むには、Tomcat が生成する指標のレシーバを作成してから、新しいレシーバ用のパイプラインを作成する必要があります。

tomcat 指標のレシーバを構成するには、次のフィールドを指定します。

フィールド デフォルト 説明
collect_jvm_metrics true サポートされている JVM 指標も収集するようにレシーバを構成します。
collection_interval 60s 時間(例: 30s5m)。
endpoint localhost:8050 サービス URL の作成に使用される JMX サービス URL またはホストとポート。この値は、service:jmx:<protocol>:<sap> または host:port の形式にする必要があります。host:port フォームの値は、service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi というサービス URL を作成するために使用されます。
password JMX が認証を要求するように構成されている場合、構成されたパスワード。
type 値は、tomcat にする必要があります。
username JMX が認証を要求するように構成されている場合、構成されたユーザー名。

モニタリング対象

次の表に、Ops エージェントが Tomcat インスタンスから収集する指標の一覧を示します。

指標タイプ
種類、タイプ
モニタリング対象リソース
ラベル
workload.googleapis.com/tomcat.errors
CUMULATIVEINT64
gce_instance
proto_handler
workload.googleapis.com/tomcat.max_time
GAUGEINT64
gce_instance
proto_handler
workload.googleapis.com/tomcat.processing_time
CUMULATIVEINT64
gce_instance
proto_handler
workload.googleapis.com/tomcat.request_count
CUMULATIVEINT64
gce_instance
proto_handler
workload.googleapis.com/tomcat.sessions
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/tomcat.threads
GAUGEINT64
gce_instance
proto_handler
state
workload.googleapis.com/tomcat.traffic
CUMULATIVEINT64
gce_instance
direction
proto_handler

ダッシュボードの例

Tomcat 指標を表示するには、グラフまたはダッシュボードが構成されている必要があります。Cloud Monitoring には、統合用のサンプル ダッシュボードのライブラリが用意されています。ここには、事前に構成されたグラフが含まれています。これらのダッシュボードのインストールについては、サンプル ダッシュボードのインストールをご覧ください。

構成を確認する

このセクションでは、Tomcat レシーバが正しく構成されていることを確認する方法について説明します。Ops エージェントがテレメトリーの収集を開始するまでに 1~2 分かかる場合があります。

ログが取り込まれていることを確認するには、ログ エクスプローラに移動し、次のクエリを実行して Tomcat のログを表示します。

resource.type="gce_instance"
(log_id("tomcat_system") OR log_id("tomcat_access"))

指標が取り込まれていることを確認するには、Metrics Explorer に移動し、[MQL] タブで次のクエリを実行します。

fetch gce_instance
| metric 'workload.googleapis.com/tomcat.threads'
| every 1m

次のステップ

Ansible を使用して Ops エージェントをインストールし、サードパーティ アプリケーションを構成してサンプル ダッシュボードをインストールする方法については、Ops エージェントをインストールして、サードパーティ アプリケーションのトラブルシューティングを行うの動画をご覧ください。