リクエストレベルのメトリクスは、個々の関数呼び出しに関する詳細なインサイトを提供し、関数のパフォーマンスを理解するのに役立ちます。これらのメトリクスを使用すると、問題を迅速に検出して特定し、アプリケーションのボトルネックを分析できます。リクエストレベルのメトリクスを有効にすることで、関数アプリケーションの管理と最適化をより効果的に行うことができます。
リクエストレベルのメトリクスとは
リクエストレベルのメトリクスとは、各関数リクエストの実行ステータスを要約したものです。この機能を有効にすると、システムはパフォーマンス、例外、トレースメトリクスなど、すべての関数実行のメトリクスを収集し、ログ設定時に選択した Logstore に配信します。
-
パフォーマンスメトリクス:メモリ使用量、関数実行時間、初期化時間、コールドスタート情報など。
-
例外メトリクス:実行が失敗したかどうか、およびエラーの詳細。
-
トレースメトリクス:キーパスの実行期間、分散トレーシングサンプリングが有効になっているかどうか、および HTTP 関数の場合はパス、ステータスコード、クライアント IP アドレス。
リクエストレベルのメトリクスを有効にすると、Function Compute は、各リクエストの実行メトリクスをお客様の Logstore に次の形式で配信します。
activeInstances: 0
activeInstancesPerFunction: 0
durationMs: 2.92
functionName: sync-clone
hasFunctionError: false
hostname: sr-65a76c74-1224f354965f43a...
instanceID: c-65a77eb0-15416274-ff5addb...
invocationStartTimestamp: 1705476027407
invocationType: Sync
invokeFunctionLatencyMs: 1.56
invokeFunctionStartTimestamp: 1705476027406
ipAddress: 21.0
isColdStart: false
memoryMB: 512
memoryUsageMB: 8.99
operation: InvokeFunction
qualifier: LATEST
requestId: 1-65a77fbb-157f3f32-e1ee24b17e49
resourceMode: OnDemand
ユースケース
-
リクエストメトリクスを使用して、関数の実行詳細、パフォーマンスメトリクス、エラー情報を表示できます。
コンソールでは、リクエストレベルのメトリクスに基づいたリクエストリストが表示されます。このインターフェイスを使用して、実行ステータス、インスタンス ID、実行期間、メモリ使用量、リクエストログなど、各リクエストの詳細情報を表示できます。
関数詳細ページの **[ログ]** タブで、**[呼び出しリクエスト]** サブタブを選択してリクエストリストを表示します。リストの上にあるフィルターには、**[現在のバージョンまたはエイリアスのログのみ表示]**、**[関数エラーのみ表示]**、**[クライアントエラーのみ表示]**、**[コールドスタートリクエストのみ表示]** があります。
説明リクエストレベルのメトリクスを有効にしなくてもリクエストリストを表示できますが、以下のシナリオでは不正確になる可能性があります。
-
非同期呼び出しのリトライシナリオでよく見られるように、同一の RequestId が複数回表示される場合、特定のリクエストに対応するログを特定できません。
-
カスタムランタイムまたはカスタムイメージランタイム環境で、コードが
FC Invoke Start RequestId: xxxとFC Invoke End RequestId: xxxの両方を出力する場合、1 回の呼び出しがリクエストリストに 2 回表示されます。
-
-
カスタム検索やカスタムダッシュボードの構築にリクエストメトリクスを使用できます。
リクエストメトリクスは
key:val形式で Logstore に配信されます。ビジネスニーズに基づいてカスタムダッシュボードを作成できます。手順については、「ダッシュボードの作成」をご参照ください。
注意事項
-
スコープ
リクエストレベルのメトリクスログは関数レベルの設定です。有効にすると、現在の関数に適用され、実行ごとに 1 つのログエントリが生成されます。
-
コスト
Simple Log Service (SLS) へのログ配信にはストレージ料金が発生します。料金の詳細については、「料金」をご参照ください。
リクエストレベルのメトリクスの有効化
コンソールでのリクエストレベルのメトリクスの有効化
前提条件
-
Function Compute
-
Simple Log Service (SLS)
手順
-
FC コンソールにログインします。左側のナビゲーションペインで、を選択します。
-
トップメニューバーでリージョンを選択します。関数リスト ページで、対象の関数をクリックします。
-
関数設定ページで、設定 タブを選択します。
-
詳細設定 を見つけ、その右側にある 変更 をクリックします。高度な設定パネルで、ロギングセクションに移動し、インスタンスレベルのメトリックを有効にしてから、デプロイをクリックします。
次の表に、主な設定項目を示します。他のすべての設定はデフォルト値のままにします。
設定項目
説明
設定例
ロギング
関数呼び出しログを Simple Log ServiceSLS に格納するかどうかを指定します。詳細については、「ロギングの設定」をご参照ください。
有効
ログプロジェクト
既存のログプロジェクトを選択します。
aliyun-fc-hangzhou-2238f0df-a742-524f-9f90-976ba*******
Logstore
既存の Logstore を選択します。
function-log
ログ分割ルール
ログ分割を有効にするかどうか。有効にすると、FC はルールに従ってログを複数のセグメントに分割し、各セグメントを SLS に書き込みます。
有効
リクエストレベルのメトリクス
リクエストレベルのメトリクスを収集するかどうか。有効にすると、すべての関数呼び出しのメトリクスが収集され、ログ設定で指定した Logstore に配信されます。
有効
インスタンスレベルのメトリクス
インスタンスレベルのメトリクスを有効にするかどうか。有効にすると、インスタンスのメトリクスがログ設定で指定した Logstore に配信されます。
有効
Serverless Devs を使用したリクエストレベルのメトリクスの有効化
前提条件
手順
-
次の構造でコードディレクトリを作成します。
. ├── code │ └── index.js └── s.yamlこの例では、
enableRequestMetricsフィールドを使用してリクエストレベルのメトリクスを設定します。有効にする前に、まずロギングを有効にし、logstoreとprojectをアカウント内の既存の Logstore とログプロジェクトに設定します。edition: 3.0.0 name: hello-world-app access: "default" vars: # グローバル変数 region: "cn-hangzhou" resources: hello_world: component: fc3 # コンポーネント名 props: region: ${vars.region} functionName: "start-nodejs-****" description: 'hello world by serverless devs' runtime: "nodejs16" code: ./code handler: index.handler memorySize: 128 timeout: 30 logConfig: # logstore と project をご自身のセットアップに合わせて更新してください。または、logConfig:auto を使用して自動作成することもできます。 enableInstanceMetrics: true enableRequestMetrics: true # リクエストレベルのメトリクスを有効にして、すべての呼び出しの実行メトリクスを収集します logBeginRule: DefaultRegex logstore: 'your-logstore' project: 'your-project' -
次のコマンドを実行してアプリケーションをデプロイします。
sudo s deploy -yデプロイが成功したら、FC コンソールにログインし、デプロイした関数でリクエストレベルのメトリクスが有効になっていることを確認します。
ログクエリ
ログ形式
リクエストレベルのメトリクスログのトピック形式は FCRequestMetrics:/functionName です。 Simple Log Service では、クエリ条件 __topic__: "FCRequestMetrics:/functionName" を使用して、すべてのリクエストレベルのメトリクスログをフィルターします。 詳細については、「クエリと分析のクイックガイド」をご参照ください。
メトリクスフィールド
リクエストレベルのメトリクスには、次の情報が記録されます。
|
メトリクス名 |
説明 |
設定例 |
すべての呼び出しで記録されるか? |
|
functionName |
関数名。 |
my-function |
はい |
|
versionId |
バージョン名。 |
12 |
はい |
|
qualifier |
修飾子。デフォルトは LATEST です。 |
prod |
はい |
|
requestId |
リクエスト ID。 |
db72ce53-ccbe-4216-af55-642622e01494 |
はい |
|
operation |
アクション名。 |
InvokeFunction |
はい |
|
invocationType |
コールタイプには 2 種類あります。 Sync:同期呼び出し Async:非同期呼び出し |
Sync |
はい |
|
memoryMB |
関数のメモリ上限。 |
512 |
はい |
|
memoryUsageMB |
関数実行中に消費されたメモリ。 |
410 |
はい |
|
durationMs |
リクエストの実行時間。 |
20.20 |
はい |
|
isColdStart |
コールドスタートであるかどうか。 説明
コールドスタートは、FC がリクエストを受信したときに、それを処理する準備ができた関数インスタンスがない場合に発生します。システムは新しいインスタンスを作成し、コードをダウンロードし、ランタイム環境を初期化する必要があります。 コールドスタートリクエストとは、インスタンスの作成、コードのダウンロード、ランタイムの初期化という全プロセスを経るリクエストと定義します。 FC は、インスタンスを事前にウォームアップすることでコールドスタートを最適化します。インスタンスの作成中にリクエストが到着し、事前にウォームアップされたインスタンスが準備できている場合、それはコールドスタートとは見なされません。 |
false |
はい |
|
instanceEvent |
インスタンスイベント。現在は ColdStart のみで、コールドスタートリクエストに対して記録されます。 |
ColdStart |
いいえ |
|
hasFunctionError |
関数の実行でエラーが発生したかどうか。 |
false |
はい |
|
errorType |
関数エラーは次の 3 つのタイプに分類されます。
|
FunctionUnhandledError |
いいえ。 |
|
invokeFunctionLatencyMs |
関数の実行時間。 |
99.00 |
はい |
|
traceContext |
分散トレーシングコンテキスト。 |
371d3ff242fcee9:371d3ff242fcee9:0:1 |
いいえ。分散トレーシングが設定されている場合にのみ記録されます。 |
|
isSampled |
リクエストが分散トレーシングでサンプリングされたかどうか。 |
true |
いいえ。分散トレーシングが設定されている場合にのみ記録されます。 |
|
resourceMode |
リクエストに使用されたインスタンスタイプ:
|
OnDemand |
はい |
|
instanceID |
インスタンス ID。 |
c-65603d8c-37e1bf7123054a77**** |
はい |
|
hostname |
インスタンスのホスト名。 |
c-65603d8c-37e1bf7123054a77**** |
はい |
|
ipAddress |
インスタンスの IP アドレス。 注:これはインスタンスを区別するための内部 IP アドレスであり、パブリック IP アドレスではありません。 |
21.0.XX.XX |
はい |
|
activeInstances |
アクティブなインスタンスの数。 |
1 |
はい |
|
activeInstancesPerFunction |
この関数のアクティブなインスタンスの数。 |
1 |
はい |
|
scheduleLatencyMs |
スケジューリングのレイテンシ。コールドスタート中は長くなります。 |
10.07 |
はい |
|
coldStartStartTimestamp |
コールドスタートの開始タイムスタンプ。 |
1700806029167 |
いいえ。コールドスタート中にのみ記録されます。 |
|
coldStartLatencyMs |
コールドスタートの期間。 |
487.65 |
いいえ。コールドスタート中にのみ記録されます。 |
|
prepareCodeStartTimestamp |
コードのダウンロード開始タイムスタンプ。13 桁の UNIX タイムスタンプ、ミリ秒精度。 |
1700806029167 |
いいえ。コールドスタート中にのみ記録されます。 |
|
prepareCodeLatencyMs |
コードのダウンロード期間。 |
0.18 |
いいえ。コールドスタート中にのみ記録されます。 |
|
runtimeInitializationStartTimestamp |
ランタイムの初期化開始タイムスタンプ。 |
1700806029168 |
いいえ。コールドスタート中にのみ記録されます。 |
|
runtimeInitializationMs |
ランタイムの初期化期間。 |
487.37 |
いいえ。コールドスタート中にのみ記録されます。 |
|
asyncAttemptStartTimestamp |
非同期呼び出しの場合、失敗した実行はデフォルトで最大 3 回リトライされます。 このパラメーターは ${retryCount} 回目のリトライの開始タイムスタンプです。 |
1700806028084 |
いいえ。非同期呼び出しの場合にのみ記録されます。 |
|
asyncAttemptLatencyMs |
非同期呼び出しの場合、失敗した実行はデフォルトで最大 3 回リトライされます。 このパラメーターは ${retryCount} 回目のリトライの期間です。 |
1688.74 |
いいえ。非同期呼び出しの場合にのみ記録されます。 |
|
asyncMode |
非同期呼び出しモード:
|
Stateful |
いいえ。非同期呼び出しの場合にのみ記録されます。 |
|
retryCount |
リトライ回数。 |
0 |
いいえ。非同期呼び出しの場合にのみ記録されます。 |
ログの取得
ログを取得するには、インデックスが必要です。FC コンソールは自動的にインデックスを設定します。インデックス作成後、SLS コンソール で SQL 文を使用して、Logstore 内のリクエストを検索およびフィルタリングします。トピックを指定して、結果をリクエストレベルのメトリクスログに限定します。
たとえば、実行時間が 1 秒を超えるリクエストを検索するには、次の SQL 文を使用します。
__topic__: "FCRequestMetrics:/f1" AND qualifier: q1 and operation: InvokeFunction and durationMs>1000
高度なクエリ構文については、「クエリと分析のクイックガイド」をご参照ください。
カスタムダッシュボードの作成
x 軸に時間 (t)、y 軸にメトリクス値を持つグラフを作成するには、次のような SQL 文を使用します。
__topic__: "FCRequestMetrics:/f1" AND qualifier: q1 and operation: InvokeFunction | select __time__ - __time__ % 60 as t, count(*) as invocations, avg(durationMs) as avgDurationMs group by t order by t
カスタムダッシュボードの作成に関する詳細については、「ダッシュボードの作成」をご参照ください。