Function Compute の組み込み Java 8 ランタイムは、Application Real-Time Monitoring Service (ARMS) との連携をサポートしています。Java 8、Java 11、および Java 17 のカスタムランタイムも、ARMS 拡張機能をサポートします。本トピックでは、カスタムランタイム関数への ARMS エージェントの統合方法について説明します。
開始する前に、以下の点をご確認ください。
関数のメモリが 512 MB より大きいこと。ARMS は約 300 MB のメモリを消費します。
ARMS が関数と同じリージョンに存在すること。クロスリージョン監視はサポートされていません。
監視機能
ARMS を統合すると、以下の機能で関数をモニタリングできます。
| 機能 | 実行可能な操作 |
|---|---|
| インスタンスレベルの可観測性 | 各関数インスタンスの CPU 使用率、メモリ使用量、リクエスト数などのメトリックを表示 |
| トレーシング | データベースやメッセージキューなどの上流・下流コンポーネントと関数間の呼び出し関係を確認 |
| Java 仮想マシン (JVM) メトリック | ガベージコレクション (GC) 回数、ヒープ使用量、スレッドスタック情報などを追跡 |
| コードレベルのプロファイリング | コードレベルで遅いメソッドや例外を特定 |
| アプリケーションセキュリティ | ランタイムアプリケーションセルフプロテクション (RASP) 技術を用いて、未知の脆弱性からアプリケーションを保護 |
ARMS の全機能概要については、「ARMS とは?」をご参照ください。
前提条件
開始する前に、以下の条件を満たしていることをご確認ください。
カスタムランタイム(Java 8、Java 11、または Java 17)を使用する関数。詳細については、「関数の作成」をご参照ください。
ARMS の有効化。詳細については、「ARMS の有効化とスペックアップ」をご参照ください。
関数のメモリを 512 MB より大きく設定していること
仕組み
ARMS は、カスタムランタイムに対して内部拡張機能として統合されます。ARMS エージェントはパブリックレイヤーとして配信されます。ブートストラップスクリプトにより、起動時に Java アプリケーションにエージェントが挿入され、2 つの環境変数によってライセンスキーが渡され、拡張機能が有効化されます。
カスタムランタイムと ARMS の接続
ステップ 1:ARMS エージェントレイヤーの追加
Function Compute は、各サポート対象 Java バージョン向けに ARMS エージェントを含むパブリックレイヤーを提供しています。
| Java バージョン | 互換性のあるランタイム | レイヤー ARN |
|---|---|---|
| Java 11 / Java 8 | カスタムランタイム | acs:fc:{region}:official:layers/ArmsAgent273x/versions/1 |
| Java 17 | カスタムランタイム | acs:fc:{region}:official:layers/ArmsAgent273x_JDK17/versions/1 |
{region} は、ご利用の関数のリージョン ID(例: cn-hangzhou)に置き換えてください。
Function Compute コンソールにログインします。左側ナビゲーションウィンドウで、[関数] をクリックします。
上部ナビゲーションバーで、関数が配置されているリージョンを選択します。[関数] ページで、設定する関数をクリックします。
関数の詳細ページで、[設定] タブをクリックします。
[詳細設定] の横にある [変更] をクリックします。[詳細設定] パネルで、[レイヤー] を展開し、[+ レイヤーの追加] > [パブリックレイヤーの追加] をクリックします。
ご利用の Java バージョンに対応するレイヤーを選択し、[OK] をクリックします。
ステップ 2:環境変数の設定
[高度な設定] パネルで、[環境変数] を展開し、以下の環境変数を設定します。
| 環境変数 | 値 | 説明 |
|---|---|---|
FC_EXTENSION_ARMS | true | ARMS 拡張機能を有効化 |
FC_EXTENSIONS_ARMS_LICENSE_KEY | ライセンスキー | ARMS ライセンスキーをエージェントに渡します。詳細については、「ライセンスキーの取得 |
関数呼び出しが完了後、インスタンスは ARMS エージェントによるログ送信を完了させるため、10 秒間アクティブな状態を維持します。この期間中も、呼び出し時と同様のレートで課金が発生します。詳細については、「課金」をご参照ください。
ステップ 3:ブートストラップスクリプトの作成
WebIDE を使用して、関数のコードディレクトリ内に bootstrap という名前のファイルを作成し、ターミナルで chmod +x bootstrap を実行して実行可能にします。
以下は完全なスクリプト例です。環境変数 FC_EXTENSIONS_ARMS_LICENSE_KEY が設定されている場合、すべての ARMS エージェントパラメーターが JVM 引数として挿入されます。
#!/bin/bash
set -eo pipefail
# 1. ARMS アプリケーション名を設定。デフォルトは FC:{FunctionName}。
appName="FC:Custom_Java_Arms_Demo"
if [ -n "${FC_FUNCTION_NAME}" ]; then
appName="FC:${FC_FUNCTION_NAME}"
fi
echo "appName: ${appName}"
params=" "
# 2. ライセンスキーが設定されている場合、ARMS エージェントパラメーターを挿入。
if [[ -n "${FC_EXTENSIONS_ARMS_LICENSE_KEY}" ]]; then
echo "FC_EXTENSIONS_ARMS_LICENSE_KEY: ${FC_EXTENSIONS_ARMS_LICENSE_KEY}"
params+="-Dfc.instanceId=$HOSTNAME@`hostname -i` "
# パブリックレイヤー内の ARMS エージェント JAR のパス
params+="-javaagent:/opt/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar "
params+="-Darms.licenseKey=${FC_EXTENSIONS_ARMS_LICENSE_KEY} "
params+="-Darms.appName=${appName} "
else
echo "環境変数 FC_EXTENSIONS_ARMS_LICENSE_KEY が存在しません。FC_EXTENSIONS_ARMS_LICENSE_KEY 環境変数を設定してください!"
exit 1
fi
# 3. ARMS パラメーターを付与してアプリケーションを起動。
echo "params: ${params}"
exec java $params \
-Dserver.port=9000 \
-jar /code/target/demo-0.0.1-SNAPSHOT.jarこのスクリプトは、ARMS が要求する以下の 3 つの JVM 引数を渡します。
| パラメーター | 説明 |
|---|---|
-javaagent | ARMS エージェント JAR のパス。パブリックレイヤーを利用する場合、常に /opt/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar |
-Darms.licenseKey | ARMS ライセンスキー。環境変数 FC_EXTENSIONS_ARMS_LICENSE_KEY から読み取ります |
-Darms.appName | ARMS コンソールに表示されるアプリケーション名。デフォルトは FC:{FunctionName} |
ステップ 4:デプロイ
WebIDE で [デプロイ] をクリックして、コードの変更を適用します。関数が再起動した後、ARMS エージェントがモニタリングデータの収集を開始します。
統合の検証
デプロイ後に、関数を少なくとも 1 回呼び出した後、ARMS コンソールで統合を検証します。
ARMS コンソールにログインします。
左側ナビゲーションウィンドウで、[アプリケーションモニタリング] > [アプリケーション] を選択します。
FC:{FunctionName}(例:FC:my-java-function)という名前のアプリケーションを一覧から探します。リストに表示された場合は、統合が成功しています。
モニタリングデータの読み取り方法については、「アプリケーションの概要」をご参照ください。
課金
ARMS 拡張機能を有効化すると、以下の 2 つの課金要素が発生します。
ARMS の課金:ARMS アプリケーションモニタリングに対して課金されます。「課金概要」をご参照ください。
呼び出し後のフリーズ:各呼び出しが完了した後、インスタンスは ARMS エージェントによるログ送信を完了させるため、10 秒間アクティブな状態を維持します。この期間中は、標準の呼び出しレートで Function Compute の課金が発生します。