Function Compute の組み込み Java 8 ランタイムは、Application Real-Time Monitoring Service (ARMS) をサポートしています。また、Java 8、Java 11、Java 17 のカスタムランタイムでも ARMS を使用できます。このトピックでは、カスタムランタイムを ARMS に接続する方法について説明します。
背景情報
Function Compute を ARMS プラットフォームと統合することで、ARMS を使用して関数を監視およびトレースできます。この統合により、インスタンスレベルの可観測性、トレース情報、Java 仮想マシン (JVM) のメトリック、コードレベルのプロファイリング情報、およびアプリケーションセキュリティ情報が提供されます。詳細については、「Application Real-Time Monitoring Service (ARMS) とは」をご参照ください。
機能 | 説明 |
インスタンスレベルの可観測性 | CPU、メモリ、リクエストなど、豊富なホストモニタリングメトリックを関数インスタンスレベルで集約します。 |
トレース分析 | ARMS エージェントは、関数とその上流および下流コンポーネントのトポロジーと関連メトリックを自動的に検出します。ARMS プラットフォーム上で、データベース、Redis、メッセージキュー (MQ) などのコンポーネントに関する情報を表示できます。 |
Java 仮想マシンメトリック | ARMS エージェントは JVM アプリケーションを自動的に検出します。ARMS プラットフォーム上で、ガベージコレクション (GC) の回数、ヒープ情報、スレッドスタック情報など、JVM アプリケーションのモニタリングデータを表示できます。 |
コードレベルのプロファイリング | 各メソッドが消費した時間や例外など、関数実行時のコードレベルのプロファイリング情報を表示します。 |
ランタイムアプリケーション自己保護 (RASP) テクノロジーに基づき、アプリケーションセキュリティはアプリケーションに強力なランタイム保護を提供します。ほとんどの未知の脆弱性を悪用する攻撃から防御します。 |
カスタムランタイムの ARMS への接続
ARMS アプリケーション監視は内部拡張機能です。カスタムランタイムを ARMS に接続するには、主に 3 つのステップがあります。
パブリックレイヤーを使用した ARMS エージェントプログラムの取得
Function Compute プラットフォームは、Java 8、Java 11、Java 17 向けの 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 |
bootstrap スクリプトの起動コマンドとしての使用
ARMS を使用するには、3 つの起動パラメーターを追加する必要があります。起動コマンドは複雑なため、スクリプトの使用を推奨します。関数のコードページで、WebIDE を使用して bootstrap という名前のファイルを作成できます。次に、ターミナルで chmod +x bootstrap コマンドを実行して、ファイルに実行権限を設定します。以下にコード例を示します。
#!/bin/bash
set -eo pipefail
# 1. ARMS アプリケーション名を設定します。
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 プログラムのパスを使用します。
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. アプリケーションを起動します。
echo "params: ${params}"
exec java $params \
-Dserver.port=9000 \
-jar /code/target/demo-0.0.1-SNAPSHOT.jar以下にサンプルコードの説明を示します。
ARMS アプリケーション名を設定します。デフォルト名は
FC:{FunctionName}です。ARMS パラメーターを追加します。
javaagent:ARMS プログラムへのパスです。ARMS エージェントのパブリックレイヤーを使用する場合、パスは/opt/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jarです。Darms.licenseKey:ライセンスキーです。この例では、環境変数からライセンスキーを取得する方法を示しています。ライセンスキーの取得方法の詳細については、「ライセンスキーの取得」をご参照ください。Darms.appName:ARMS アプリケーションの名前です。必要に応じて名前を指定できます。
環境変数の設定
環境変数
FC_EXTENSIONS_ARMS_LICENSE_KEY=xxxxを設定します。値をご利用のライセンスキーに設定します。ライセンスキーの取得方法の詳細については、「ライセンスキーの取得」をご参照ください。環境変数
FC_EXTENSION_ARMS=trueを設定します。この環境変数を追加すると、関数の呼び出しが終了しても、関数インスタンスはすぐにはフリーズしません。代わりに、システムはインスタンスをフリーズする前に 10 秒間待機します。この遅延により、ARMS エージェント拡張機能がログを正常にレポートできるようになります。
重要呼び出しの終了からインスタンスのフリーズまでの待機期間は課金対象です。課金ポリシーは、インスタンス呼び出しフェーズのポリシーと同じです。詳細については、「課金」をご参照ください。
前提条件
操作手順
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
トップナビゲーションバーで、リージョンを選択します。[関数] ページで、対象の関数の名前をクリックします。
関数詳細ページで、[設定] タブをクリックします。
[高度な設定] セクションで、[編集] をクリックします。 高度な設定パネルの Layers セクションで、。 ご使用の Java バージョンと互換性のある ArmsAgent レイヤーを追加します。
「詳細設定」パネルで [環境変数] セクションを編集し、環境変数
FC_EXTENSION_ARMS=trueおよびFC_EXTENSIONS_ARMS_LICENSE_KEY=xxxxを追加します。詳細については、「環境変数の設定」をご参照ください。
関数のコードページで、WebIDE を使用してブートストラップファイルを作成し、[コードのデプロイ] をクリックします。
詳細については、「bootstrap スクリプトの起動コマンドとしての使用」をご参照ください。
設定を更新してコードをデプロイすると、関数はアプリケーション監視とパフォーマンス専有型管理のために ARMS に接続されます。その後、ARMS 監視の課金が開始されます。詳細については、「課金の概要」をご参照ください。
関数が ARMS プラットフォームに接続された後、監視情報を表示するには、ARMS プラットフォームと関数が同じリージョンにあることを確認してください。
関数が正しく実行されるように、関数設定で指定されたメモリが 512 MB を超えていることを確認してください。これは、ARMS が約 300 MB のメモリを使用するためです。
結果の検証
関数を ARMS に接続した後、ARMS コンソールで関数を表示できます。
ARMS コンソールにログインすることもできます。左側のナビゲーションウィンドウで、 を選択します。次に、ご利用のアプリケーションの名前をクリックして、詳細な監視情報を表示します。詳細については、「アプリケーション概要」をご参照ください。
アプリケーション名は、bootstrap スクリプト内の appName の値です。デフォルト値は FC:{FunctionName} です。