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

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

最終更新日:Sep 09, 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コンソールの使用

前提条件

  • Function Compute

    • サービスが作成されていること。 詳しくは、「サービスの作成」をご参照ください。

  • シンプルなLog Service

手順

  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チームは、コールドスタートを最適化するための戦略を実装しました。 コールドスタートを防ぐために、Function Computeは事前にインスタンスを作成し、着信リクエストを処理します。 この状況における要求は、コールドスタート要求ではない。

false

必須

instanceEvent

インスタンスイベント。 有効値: ColdStart。 このメトリックは、コールドスタート要求が発生した場合にのみ必要です。

コールドスタート

任意

hasFunctionError

関数の実行中に関数エラーが発生するかどうかを指定します。

false

必須

errorType

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

  • FunctionOOMError: 関数はメモリ不足 (OOM) です。

  • 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

リトライの回数。

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 

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