リクエストレベルのメトリクスは、関数の呼び出しと実行の追跡に役立ちます。 リクエストレベルのメトリクス機能を使用して、できるだけ早い機会に問題を検出してトラブルシューティングし、アプリケーションのボトルネックを分析できます。 リクエストレベルのメトリクス機能を有効にすると、関数アプリケーションを効率的に管理および最適化できます。
概要
要求レベルのメトリックとは、関数が要求を実行したときに取得されるメトリックを指します。 リクエストレベルのメトリクス機能を有効にすると、関数が実行されるたびに、パフォーマンスメトリクス、例外、トレーシングメトリクスなどのメトリクスがシステムによって収集されます。 メトリクスは、指定したLogstoreに配信されます。
パフォーマンスメトリックには、メモリ使用量、関数の実行時間、初期化時間、コールドスタートの情報が含まれます。
例外には、実行失敗とエラーの詳細が含まれます。
トレーシングメトリックには、システムキーリンクの実行に必要な時間、統合トレース分析のサンプリング、HTTP機能のパス、ステータスコード、およびクライアントIPアドレスが含まれます。
リクエストレベルのメトリクス機能を有効にすると、Function Computeは各リクエストの実行メトリクスをLogstoreに送信します。 リクエストのログを次の図に示します。
シナリオ
関数の実行、パフォーマンス指標、およびエラーメッセージの詳細を表示する
関数のリクエストは、function Computeコンソールに表示されます。 コンソールに移動して、実行ステータス、リクエストに対応するインスタンスID、実行に必要な時間、メモリ使用量、リクエストログなど、各リクエストに関する情報を表示できます。 次の図は、リクエストレベルのメトリックの例を示しています。
説明リクエストレベルのメトリクス機能が無効になっている場合でも、リクエストを表示できます。 ただし、次のシナリオでは、リクエストで例外が発生する場合があります。
リクエストのIDが複数回表示される場合、リクエストのログを見つけることはできません。 このシナリオは、非同期呼び出しの再試行中に発生します。
FC Invoke Start RequestId: xxx
とFC Invoke End RequestId: xxx
がカスタムランタイムまたはカスタムコンテナランタイムで印刷された場合、1回の呼び出しがリクエストリストに2回表示されることがあります。
統計を検索してダッシュボードを作成する
リクエストレベルのメトリックは、
key:val
形式でLogstoreに配信されます。 ビジネス要件に基づいてダッシュボードを作成できます。 詳細については、「ダッシュボードの作成」をご参照ください。
使用上の注意
有効範囲
関数のログを設定するときに、function ComputeコンソールでRequest-level Metricsパラメーターを設定して、機能を設定できます。 このパラメーターを有効にすると、関数がリクエストを実行するたびにログエントリが生成されます。
課金
Simple Log Serviceにログを保存する場合は課金されます。 Simple Log Serviceの料金の詳細については、 価格
リクエストレベルのメトリクス機能の有効化
Function Computeコンソールの使用
あなたが始める前に
Function Compute
シンプルなLog Service
手順
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで目的のサービスを見つけ、[操作] 列の [設定] をクリックします。
では、ログ設定[サービスの変更] ページのセクションで、ビジネス要件に基づいてパラメーターを設定し、保存をクリックします。
次の表に、必要なパラメーターを示します。 他のパラメーターのデフォルト値を保持します。
パラメーター
説明
例
ログ設定
ロギング機能を有効にするかどうかを指定し、Simple Log Serviceを使用して機能実行ログを保存します。 詳細は、「ロギングの設定」をご参照ください。
有効にする
簡易Log Serviceプロジェクト
設定したログプロジェクトを選択します。
aliyun-fc-hangzhou-2238f0df-a742-524f-9f90-976ba *******
ログストア
設定したLogstoreを選択します。
関数ログ
リクエストレベルのメトリック
リクエストレベルのメトリックを表示するかどうかを指定します。 この機能を有効にすると、関数の呼び出しメトリックが収集され、指定されたLogstoreに配信されます。
有効にする
Serverless Devsを使用する
始める前に
手順
コードディレクトリを作成します。 次のサンプルコードは、ディレクトリ構造の例を示しています。
. ├── code │ └── index.js └── s.yaml
コードディレクトリを作成します。 次のサンプルコードは、ディレクトリ構造の例を示しています。
この例では、enableRequestMetricsフィールドを使用して、リクエストレベルのメトリクス機能を設定します。 リクエストレベルのメトリクス機能を有効にする前に、ログ機能を有効にし、ログストアおよびプロジェクトフィールドをアカウント内の既存のログストアおよびログプロジェクトに設定する必要があります。
edition: 1.0.0 name: hello-world-app access: "default" vars: region: "cn-hangzhou" service: name: "hello-world-service" description: 'hello world by serverless devs' logConfig: # Specify the actually used project and Logstore. Alternatively, set this field to auto to allow the system to create a project and a Logstore for you. project: 'your-project' logstore: 'your-logstore' enableRequestMetrics: true # Enable the request-level metrics feature. After you enable the feature, the system collects the metrics each time the function executes a request. enableInstanceMetrics: true role: 'acs:ram::<accountID>:role/aliyunfcdefaultrole' # Replace <accountID> with the ID of your Alibaba Cloud account. services: helloworld: component: fc props: region: ${vars.region} service: ${vars.service} function: name: "hello-world" description: 'hello world by serverless devs' runtime: nodejs14 codeUri: ./code handler: index.handler memorySize: 128 timeout: 60
次のコマンドを実行して、アプリケーションをデプロイします。
sudo s deploy -y
実行が成功した場合、Function Computeコンソールにログインして、デプロイされた関数のリクエストレベルのメトリクス機能が有効になっているかどうかを確認できます。
ログのクエリ
ログ形式
リクエストレベルのメトリックログのトピックは、FCRequestMetrics:serviceName/functionName
の形式に従います。 ステートメント __topic __: "FCRequestMetrics:serviceName/functionName"
を使用して、Simple Log Serviceのすべてのリクエストレベルのメトリックログをフィルタリングできます。 詳細については、「ログの照会と分析」をご参照ください。
メトリクス
次の表に、リクエストのメトリックを示します。
メトリック | 説明 | 例 | すべての呼び出しに対して記録 |
serviceName | サービス名。 | 私のサービス | はい |
functionName | 関数名。 | my-function | はい |
versionId | バージョン名。 | 12 | はい |
修飾子 | サービスのエイリアス。 デフォルト値: LATEST。 | prod | はい |
requestId | リクエスト ID。 | db72ce53-ccbe-4216-af55-642622e01494 | はい |
operation | 操作名。 | InvokeFunction | はい |
invocationType | 呼び出しタイプ。 有効な値: 同期: 同期呼び出し Async: 非同期呼び出し | 同期 | はい |
memoryMB | メモリの上限。 | 512 | はい |
memoryUsageMB | 関数の実行によって消費されるメモリ。 | 410 | はい |
durationMs | 関数の実行によって消費されるメモリ。 | 20.20 | はい |
isColdStart | コールドスタートが発生するかどうかを指定します。 説明 リクエストがFunction Computeに送信されると、Function Computeシステムはリクエストを実行するインスタンスを開始していません。 この場合、新しいインスタンスを作成し、コードをダウンロードし、実行環境を起動する必要があります。 この場合、コールドスタートが発生します。 Function Computeは、コールドスタートを軽減するためにインスタンスを事前に作成します。 作成されたインスタンスに着信リクエストが送信された場合、clod startは発生しません。 | false | はい |
instanceEvent | インスタンスイベント。 有効値: ColdStart。 このメトリックは、コールドスタート要求が発生した場合にのみ記録されます。 | コールドスタート | いいえ |
hasFunctionError | 関数の実行中に関数エラーが発生するかどうかを指定します。 | false | はい |
errorType | 関数のエラータイプ。 有効な値:
| FunctionUnhandledError | いいえ。 このメトリックは、関数の実行エラー ( |
invokeFunctionLatencyMs | 関数の実行時間。 | 99.00 | はい。 |
traceContext | トレース分析のコンテキスト。 | 371d3ff242fcee9:371d3ff242fcee9:0:1 | いいえ。 このメトリックは、Managed Service for OpenTelemetryが設定されている場合にのみ記録されます。 |
isSampled | リクエストをOpenTelemetryのManaged Serviceによってサンプリングするかどうかを指定します。 | true | いいえ。 このメトリックは、Managed Service for OpenTelemetryが設定されている場合にのみ記録されます。 |
resourceMode | リクエストを実行するインスタンスのタイプ。 オプション:
| オンデマンド | はい |
instanceID | 弾性コンテナインスタンスのID。 | c-65603d8c-37e1bf7123054a77 **** | はい |
hostname | インスタンスホスト。 | c-65603d8c-37e1bf7123054a77 **** | はい |
ipAddress | インスタンスの IP アドレス。 注: このIPアドレスは、インスタンスを区別するための内部使用を目的としています。 | 21.0.XX.XX | はい |
activeInstances | アクティブなインスタンスの数。 | 1 | はい |
activeInstancesPerFunction | 関数のアクティブなインスタンスの数。 | 1 | はい |
scheduleLatencyMs | スケジューリングの待ち時間。 リクエストでコールドスタートが発生すると、インスタンスの実行をスケジュールする際のレイテンシが増加します。 | 10.07 | はい |
coldStartStartTimestamp | コールドスタートが始まるときのタイムスタンプ。 | 1700806029167 | いいえ。 このメトリックは、コールドスタートが発生した場合にのみ記録されます。 |
coldStartLatencyMs | コールドスタートの待ち時間。 | 487.65 | いいえ。 このメトリックは、コールドスタートが発生した場合にのみ記録されます。 |
prepareCodeStartTimestamp | コードのダウンロード開始時のタイムスタンプ。 値は、ミリ秒単位の13桁のタイムスタンプです。 | 1700806029167 | いいえ。 このメトリックは、コールドスタートが発生した場合にのみ記録されます。 |
prepareCodeLatencyMs | コードのダウンロードに費やされた時間。 | 0.18 | いいえ。 このメトリックは、コールドスタートが発生した場合にのみ記録されます。 |
runtimeInitializationStartTimestamp | ランタイムの初期化が開始されたときのタイムスタンプ。 | 1700806029168 | いいえ。 このメトリックは、コールドスタートが発生した場合にのみ記録されます。 |
runtimeInitializationMs | ランタイムの初期化に費やされた時間。 | 487.37 | いいえ。 このメトリックは、コールドスタートが発生した場合にのみ記録されます。 |
asyncAttemptStartTimestamp | デフォルトでは、関数の非同期呼び出しが失敗した場合、最大3回まで再試行できます。 このメトリックは、${retryCount} の再試行を実行したときのタイムスタンプです。 | 1700806028084 | いいえ。 このメトリックは、非同期呼び出しが実行された場合にのみ記録されます。 |
asyncAttemptLatencyMs | デフォルトでは、関数の非同期呼び出しが失敗した場合、最大3回まで再試行できます。 このメトリックは、${retryCount} の再試行を実行したときのタイムスタンプです。 | 1688.74 | いいえ。 このメトリックは、非同期呼び出しが実行された場合にのみ記録されます。 |
asyncMode | 非同期呼び出しモード。 値の説明:
| ステートフル | いいえ。 このメトリックは、非同期呼び出しが実行された場合にのみ記録されます。 |
retryCount | リトライの最大回数は 10 回です。 | 0 | いいえ。 このメトリックは、非同期呼び出しが実行された場合にのみ記録されます。 |
クエリログ
ログを照会するにはインデックスが必要です。 インデックスは、Function Computeコンソールで自動的に設定されます。 インデックスを設定したら、Simple Log Serviceコンソールに移動し、目的のLogstoreを見つけて、SQL文を使用してログのリクエストを取得してフィルタリングできます。 トピックを指定して、リクエストレベルのメトリックログを効率的に取得できます。
たとえば、次のSQL文を使用して、実行期間が10秒を超えるリクエストのリストを照会できます。
__topic__: "FCRequestMetrics:s1/f1" AND qualifier: q1 and operation: InvokeFunction and durationMs>1000
複雑なクエリ構文の詳細については、「ログの照会と分析」をご参照ください。
カスタムダッシュボードの作成
X座標がt、Y座標がメトリック値のグラフを作成する場合は、次のSQL文を参照してください。
__topic__: "FCRequestMetrics:s1/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
カスタムダッシュボードの作成方法の詳細については、「ダッシュボードの作成」をご参照ください。