すべてのプロダクト
Search
ドキュメントセンター

Function Compute:リクエストレベルのメトリックログ

最終更新日:Oct 08, 2024

リクエストレベルのメトリクスは、関数の呼び出しと実行の追跡に役立ちます。 リクエストレベルのメトリクス機能を使用して、できるだけ早い機会に問題を検出してトラブルシューティングし、アプリケーションのボトルネックを分析できます。 リクエストレベルのメトリクス機能を有効にすると、関数アプリケーションを効率的に管理および最適化できます。

概要

要求レベルのメトリックとは、関数が要求を実行したときに取得されるメトリックを指します。 リクエストレベルのメトリクス機能を有効にすると、関数が実行されるたびに、パフォーマンスメトリクス、例外、トレーシングメトリクスなどのメトリクスがシステムによって収集されます。 メトリクスは、指定したLogstoreに配信されます。

  • パフォーマンスメトリックには、メモリ使用量、関数の実行時間、初期化時間、コールドスタートの情報が含まれます。

  • 例外には、実行失敗とエラーの詳細が含まれます。

  • トレーシングメトリックには、システムキーリンクの実行に必要な時間、統合トレース分析のサンプリング、HTTP機能のパス、ステータスコード、およびクライアントIPアドレスが含まれます。

リクエストレベルのメトリクス機能を有効にすると、Function Computeは各リクエストの実行メトリクスをLogstoreに送信します。 リクエストのログを次の図に示します。

image

シナリオ

  • 関数の実行、パフォーマンス指標、およびエラーメッセージの詳細を表示する

    関数のリクエストは、function Computeコンソールに表示されます。 コンソールに移動して、実行ステータス、リクエストに対応するインスタンスID、実行に必要な時間、メモリ使用量、リクエストログなど、各リクエストに関する情報を表示できます。 次の図は、リクエストレベルのメトリックの例を示しています。

    image

    説明

    リクエストレベルのメトリクス機能が無効になっている場合でも、リクエストを表示できます。 ただし、次のシナリオでは、リクエストで例外が発生する場合があります。

    • リクエストのIDが複数回表示される場合、リクエストのログを見つけることはできません。 このシナリオは、非同期呼び出しの再試行中に発生します。

    • FC Invoke Start RequestId: xxxFC Invoke End RequestId: xxxがカスタムランタイムまたはカスタムコンテナランタイムで印刷された場合、1回の呼び出しがリクエストリストに2回表示されることがあります。

  • 統計を検索してダッシュボードを作成する

    リクエストレベルのメトリックは、key:val形式でLogstoreに配信されます。 ビジネス要件に基づいてダッシュボードを作成できます。 詳細については、「ダッシュボードの作成」をご参照ください。

使用上の注意

  • 有効範囲

    関数のログを設定するときに、function ComputeコンソールでRequest-level Metricsパラメーターを設定して、機能を設定できます。 このパラメーターを有効にすると、関数がリクエストを実行するたびにログエントリが生成されます。

  • 課金

    Simple Log Serviceにログを保存する場合は課金されます。 Simple Log Serviceの料金の詳細については、 価格

リクエストレベルのメトリクス機能の有効化

Function Computeコンソールの使用

あなたが始める前に

手順

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで目的のサービスを見つけ、[操作] 列の [設定] をクリックします。

  3. では、ログ設定[サービスの変更] ページのセクションで、ビジネス要件に基づいてパラメーターを設定し、保存をクリックします。

    次の表に、必要なパラメーターを示します。 他のパラメーターのデフォルト値を保持します。

    パラメーター

    説明

    ログ設定

    ロギング機能を有効にするかどうかを指定し、Simple Log Serviceを使用して機能実行ログを保存します。 詳細は、「ロギングの設定」をご参照ください。

    有効にする

    簡易Log Serviceプロジェクト

    設定したログプロジェクトを選択します。

    aliyun-fc-hangzhou-2238f0df-a742-524f-9f90-976ba *******

    ログストア

    設定したLogstoreを選択します。

    関数ログ

    リクエストレベルのメトリック

    リクエストレベルのメトリックを表示するかどうかを指定します。 この機能を有効にすると、関数の呼び出しメトリックが収集され、指定されたLogstoreに配信されます。

    有効にする

Serverless Devsを使用する

始める前に

手順

  1. コードディレクトリを作成します。 次のサンプルコードは、ディレクトリ構造の例を示しています。

    .
    ├── 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
  2. 次のコマンドを実行して、アプリケーションをデプロイします。

    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

関数のエラータイプ。 有効な値:

  • FunctionOOMError: 関数のメモリが不足します。

  • FunctionTimeoutError: 実行がタイムアウトします。

  • FunctionUnhandledError: キャプチャされないその他の例外。

FunctionUnhandledError

いいえ。 このメトリックは、関数の実行エラー (hasFunctionError:true) が発生した場合にのみ記録されます。

invokeFunctionLatencyMs

関数の実行時間。

99.00

はい。

traceContext

トレース分析のコンテキスト。

371d3ff242fcee9:371d3ff242fcee9:0:1

いいえ。 このメトリックは、Managed Service for OpenTelemetryが設定されている場合にのみ記録されます。

isSampled

リクエストをOpenTelemetryのManaged Serviceによってサンプリングするかどうかを指定します。

true

いいえ。 このメトリックは、Managed Service for OpenTelemetryが設定されている場合にのみ記録されます。

resourceMode

リクエストを実行するインスタンスのタイプ。 オプション:

  • OnDemand: オンデマンドインスタンス

  • プロビジョニング: プロビジョニング済みインスタンス

オンデマンド

はい

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 

カスタムダッシュボードの作成方法の詳細については、「ダッシュボードの作成」をご参照ください。