この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/semconv/faas/faas-spans/

翻訳元: open-telemetry/semantic-conventions v1.44.0(コミット e10a930

FaaSスパンに関するセマンティック規約

ステータス: Development

この文書では、サーバーのプロビジョニングや管理を伴わずに実行される関数のインスタンス(サーバーレス関数、Function as a Service(FaaS)とも呼ばれます)をスパンで記述する方法を定義します。

AWS Lambdaを計装するための追加の指示も参照してください。

全般的な属性

スパンのnameは、実行される関数の名前に設定するべきです(should)。faas.trigger属性の値によって、追加の属性を設定しなければなりません(MUST)。たとえば、httpトリガーはHTTPサーバーのセマンティック規約に従うべきです(SHOULD)。詳細は、Function Trigger Typeの節を参照してください。

この規約に従ったスパンが生成される場合、リソースのセマンティック規約に従ったfaas型のリソースが存在しなければなりません(MUST)。

関数名

関数の名前を記録できる場所は2つあります。スパン名と、faas.nameリソース属性です。

faas.name属性が存在する場合、その属性は関数名を含むことが保証されています。これは、まさにその目的のためにセマンティック規約で厳密に定義されているためです。また、スパン名にも関数名が含まれる可能性が非常に高いです(スパンの表示目的など)が、これは保証されていません(より弱い「SHOULD」要件であるため)。この保証を必要とする利用者は、faas.name属性を情報源として使用できます。

呼び出し(invocation)とインスタンス(instance)の違い

パフォーマンス上の理由(AWS LambdaAzure Functionsなど)から、FaaSプロバイダーは、複数のリクエストを処理するために使われる関数の単一インスタンスに対して、1つの実行環境を割り当てます。 開発者は、この事実を利用して、異なる関数呼び出しの間でコストの高いリソース計算をキャッシュすることで、コールドスタートの問題を解決しています。 さらに、FaaSプロバイダーはこの挙動を推奨しています(Google Functionsなど)。 faas.instanceリソース属性は、同じ実行環境に属する関数呼び出しを関連付けるために設定されてもかまいません(MAY)。 スパン属性faas.invocation_idは、次の点でリソース属性faas.instanceとは異なります。

  • faas.invocation_idは、その関数の現在の呼び出しのIDを指します。
  • faas.instanceは、その関数の実行環境のIDを指します。

受信側の呼び出し

この節では、FaaSインスタンス自身が報告する受信側のFaaS呼び出しについて説明します。

受信側のFaaSスパン属性

Status: Development

このスパンは、FaaS呼び出しのサーバー側(受信側)を表します。

スパン種別SERVERであるべきです(SHOULD)。

スパンステータスエラーの記録文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
faas.triggerDevelopmentRequiredstringこの関数呼び出しの原因となったトリガーの種類。datasource; http; pubsub
cloud.resource_idDevelopmentRecommendedstring監視対象のクラウドリソースのクラウドプロバイダー固有のネイティブ識別子(AWSのARN、Azureの完全修飾リソースID、GCPの完全なリソース名など)[1]arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function; //run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID; /subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>
faas.coldstartDevelopmentRecommendedbooleanサーバーレス関数が初めて実行される場合(コールドスタート)にtrueとなるブール値。
faas.invocation_idDevelopmentRecommendedstring現在の関数呼び出しの呼び出しID。af9d5aa4-a685-4c5f-a22b-444f80b3cc28

[1] cloud.resource_id: 一部のクラウドプロバイダーでは、起動時に完全なIDを判定できない場合があるため、代わりにスパン属性としてcloud.resource_idを設定する必要があるかもしれません。

cloud.resource_idに使用する正確な値は、クラウドプロバイダーによって異なります。 この属性を設定し、かつ次の条件が該当する場合、次のよく知られた定義を使用しなければなりません(MUST)。

  • AWS Lambda: 関数のARN。「invoked ARN」をそのまま使わず、エイリアスのsuffixを解決済みの関数バージョンに置き換えるよう注意してください。同一のランタイムインスタンスが複数の異なるエイリアスで呼び出し可能な場合があるためです。
  • GCP: リソースのURI
  • Azure: 呼び出された関数の完全修飾リソースID(関数アプリではありません)。形式は/subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>です。Azureの関数アプリは通常同じTracerProviderを共有する複数の関数をホストできるため、スパン属性を使わなければなりません(MUST)。

faas.triggerには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければなりません(MUST)。そうでない場合は、独自の値を使用してもかまいません(MAY)。

ValueDescriptionStability
datasourceデータベースやファイルシステムの読み書きなど、データソースの操作に対する応答。Development
http受信したHTTPリクエストへの応答を提供する。Development
other他のいずれにも当てはまらない場合。Development
pubsubメッセージングシステムにメッセージが送信されたときに実行されるよう設定された関数。Development
timer定期的に実行されるようスケジュールされた関数。Development

受信側のFaaSスパン属性としてのリソース属性

上記に列挙した属性に加えて、FaaScloudのリソース属性は、受信側のFaaS呼び出しスパンにスパン属性として代わりに設定されてもかまいません(MAY)。一部のFaaS環境では、リソース属性に必要な情報の一部が、呼び出しのコンテキスト内(「requestコンテキスト」引数の一部など)でしか容易に入手できず、リソース情報を確認するための別のAPI呼び出しが可能な場合でも、コールドスタート時間の観点から法外なコストになる可能性があります。 AWSにおけるcloud.resource_id属性とcloud.account.id属性は、その一例です。 原則として、上記の考慮事項は、上記の基準(追加の作業なしには容易に入手できず、その作業がコストの高いものになりうる)を満たすすべてのリソース属性に当てはまります。

送信側の呼び出し

この節では、FaaSインスタンスを呼び出すクライアントが報告する送信側のFaaS呼び出しについて説明します。

Status: Development

このスパンは、FaaSサービスへの送信呼び出しを表します。

以下に列挙する属性についてクライアントが報告する値は、呼び出されたFaaSインスタンスが計装されている場合、そのインスタンス自身について報告する対応するFaaSリソース属性クラウドリソース属性と等しいべきです(SHOULD)。

スパン種別CLIENTであるべきです(SHOULD)。

スパンステータスエラーの記録文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
faas.invoked_nameDevelopmentRequiredstring呼び出された関数の名前。[1]my-function
faas.invoked_providerDevelopmentRequiredstring呼び出された関数のクラウドプロバイダー。[2]alibaba_cloud; aws; azure
faas.invoked_regionDevelopmentConditionally Required [3]string呼び出された関数のクラウドリージョン。[4]eu-central-1

[1] faas.invoked_name: 呼び出された関数のfaas.nameリソース属性と等しいべきです(SHOULD)。

[2] faas.invoked_provider: 呼び出された関数のcloud.providerリソース属性と等しいべきです(SHOULD)。

[3] faas.invoked_region: AWSやGCPなど一部のクラウドプロバイダーでは、関数がホストされているリージョンは、その関数を一意に識別するために欠かせない情報であり、エンドポイントの一部でもあります。呼び出し先のエンドポイントの一部であるため、リージョンはクライアント側で常に判明しています。この場合、faas.invoked_regionはそれに応じて設定されなければなりません(MUST)。リージョンがクライアント側で不明であるか、呼び出された関数を識別するために不要な場合、faas.invoked_regionの設定は任意です。

[4] faas.invoked_region: 呼び出された関数のcloud.regionリソース属性と等しいべきです(SHOULD)。


faas.invoked_providerには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければなりません(MUST)。そうでない場合は、独自の値を使用してもかまいません(MAY)。

ValueDescriptionStability
alibaba_cloudAlibaba CloudDevelopment
awsAmazon Web ServicesDevelopment
azureMicrosoft AzureDevelopment
gcpGoogle Cloud PlatformDevelopment
tencent_cloudTencent CloudDevelopment

関数トリガーの種類

この節では、faas.trigger属性の値に基づいて、スパンの作成方法や追加の属性をどのように扱うかを説明します。

データソース

Status: Development

このスパンは、データベースやファイルシステムの読み書きなどのデータソース操作への応答としてトリガーされたFaaS呼び出しのサーバー側を表します。

スパン種別SERVERであるべきです(SHOULD)。

スパンステータスエラーの記録文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
faas.document.collectionDevelopmentRequiredstringトリガーとなった操作が実行された対象のソース名。たとえば、Cloud StorageやS3ではバケット名に、Cosmos DBではデータベース名に対応します。myBucketName; myDbName
faas.document.operationDevelopmentRequiredstringデータに対して実行された操作の種類を記述します。insert; edit; delete
faas.triggerDevelopmentRequiredstringこの関数呼び出しの原因となったトリガーの種類。[1]datasource
cloud.resource_idDevelopmentRecommendedstring監視対象のクラウドリソースのクラウドプロバイダー固有のネイティブ識別子(AWSのARN、Azureの完全修飾リソースID、GCPの完全なリソース名など)[2]arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function; //run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID; /subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>
faas.coldstartDevelopmentRecommendedbooleanサーバーレス関数が初めて実行される場合(コールドスタート)にtrueとなるブール値。
faas.document.nameDevelopmentRecommendedstring操作の対象となったドキュメント名・テーブル名。たとえば、Cloud StorageやS3ではファイル名に、Cosmos DBではテーブル名に対応します。myFile.txt; myTableName
faas.document.timeDevelopmentRecommendedstringデータがアクセスされた時刻を、UTCで表現したISO 8601形式の文字列。2020-01-23T13:47:06Z
faas.invocation_idDevelopmentRecommendedstring現在の関数呼び出しの呼び出しID。af9d5aa4-a685-4c5f-a22b-444f80b3cc28

[1] faas.trigger: datasourceに設定しなければなりません(MUST)。

[2] cloud.resource_id: 一部のクラウドプロバイダーでは、起動時に完全なIDを判定できない場合があるため、代わりにスパン属性としてcloud.resource_idを設定する必要があるかもしれません。

cloud.resource_idに使用する正確な値は、クラウドプロバイダーによって異なります。 この属性を設定し、かつ次の条件が該当する場合、次のよく知られた定義を使用しなければなりません(MUST)。

  • AWS Lambda: 関数のARN。「invoked ARN」をそのまま使わず、エイリアスのsuffixを解決済みの関数バージョンに置き換えるよう注意してください。同一のランタイムインスタンスが複数の異なるエイリアスで呼び出し可能な場合があるためです。
  • GCP: リソースのURI
  • Azure: 呼び出された関数の完全修飾リソースID(関数アプリではありません)。形式は/subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>です。Azureの関数アプリは通常同じTracerProviderを共有する複数の関数をホストできるため、スパン属性を使わなければなりません(MUST)。

faas.document.operationには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければなりません(MUST)。そうでない場合は、独自の値を使用してもかまいません(MAY)。

ValueDescriptionStability
deleteオブジェクトが削除された場合。Development
editオブジェクトが変更された場合。Development
insert新しいオブジェクトが作成された場合。Development

faas.triggerには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければなりません(MUST)。そうでない場合は、独自の値を使用してもかまいません(MAY)。

ValueDescriptionStability
datasourceデータベースやファイルシステムの読み書きなど、データソースの操作に対する応答。Development
http受信したHTTPリクエストへの応答を提供する。Development
other他のいずれにも当てはまらない場合。Development
pubsubメッセージングシステムにメッセージが送信されたときに実行されるよう設定された関数。Development
timer定期的に実行されるようスケジュールされた関数。Development

HTTP

この関数の責務は、受信したHTTPリクエストへの応答を提供することです。faasスパンは、HTTPサーバーのセマンティック規約に記載されている推奨事項に従うべきです(SHOULD)。

PubSub

メッセージングシステムにメッセージが送信されたときに実行されるよう、関数が設定されます。 この場合、複数のメッセージがバッチ化され、同じ関数呼び出しに一度に転送されることがあります。 したがって、関数によって処理される各メッセージについて、メッセージングシステムのセマンティック規約に従い、faas型の異なるルートスパンを作成しなければなりません(MUST)。 これにより、個々のメッセージをその呼び出し元と関連付けられるようになります。

タイマー

定期的に実行されるよう、関数がスケジュールされます。次の追加の属性が推奨されます。

Status: Development

このスパンは、タイマーによってトリガーされたFaaS呼び出しのサーバー側を表します。

スパン種別SERVERであるべきです(SHOULD)。

スパンステータスエラーの記録文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
faas.triggerDevelopmentRequiredstringこの関数呼び出しの原因となったトリガーの種類。[1]timer
cloud.resource_idDevelopmentRecommendedstring監視対象のクラウドリソースのクラウドプロバイダー固有のネイティブ識別子(AWSのARN、Azureの完全修飾リソースID、GCPの完全なリソース名など)[2]arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function; //run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID; /subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>
faas.coldstartDevelopmentRecommendedbooleanサーバーレス関数が初めて実行される場合(コールドスタート)にtrueとなるブール値。
faas.cronDevelopmentRecommendedstringCron式としてスケジュール期間を含む文字列。0/5 * * * ? *
faas.invocation_idDevelopmentRecommendedstring現在の関数呼び出しの呼び出しID。af9d5aa4-a685-4c5f-a22b-444f80b3cc28
faas.timeDevelopmentRecommendedstring関数の呼び出し時刻を、UTCで表現したISO 8601形式の文字列。2020-01-23T13:47:06Z

[1] faas.trigger: timerに設定しなければなりません(MUST)。

[2] cloud.resource_id: 一部のクラウドプロバイダーでは、起動時に完全なIDを判定できない場合があるため、代わりにスパン属性としてcloud.resource_idを設定する必要があるかもしれません。

cloud.resource_idに使用する正確な値は、クラウドプロバイダーによって異なります。 この属性を設定し、かつ次の条件が該当する場合、次のよく知られた定義を使用しなければなりません(MUST)。

  • AWS Lambda: 関数のARN。「invoked ARN」をそのまま使わず、エイリアスのsuffixを解決済みの関数バージョンに置き換えるよう注意してください。同一のランタイムインスタンスが複数の異なるエイリアスで呼び出し可能な場合があるためです。
  • GCP: リソースのURI
  • Azure: 呼び出された関数の完全修飾リソースID(関数アプリではありません)。形式は/subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>です。Azureの関数アプリは通常同じTracerProviderを共有する複数の関数をホストできるため、スパン属性を使わなければなりません(MUST)。

faas.triggerには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければなりません(MUST)。そうでない場合は、独自の値を使用してもかまいません(MAY)。

ValueDescriptionStability
datasourceデータベースやファイルシステムの読み書きなど、データソースの操作に対する応答。Development
http受信したHTTPリクエストへの応答を提供する。Development
other他のいずれにも当てはまらない場合。Development
pubsubメッセージングシステムにメッセージが送信されたときに実行されるよう設定された関数。Development
timer定期的に実行されるようスケジュールされた関数。Development

その他

Function as a Serviceは非常に柔軟であり、セマンティック規約だけでは完全に対応できません。 関数が前述のいずれの場合にも該当しない場合、スパンは属性faas.trigger"other"に設定しなければなりません(MUST)。 この場合、最も適切な属性を定義する責任は、フレームワークまたは計装ライブラリにあります。

この例は、Google Cloud Platform上でホストされている(FaaSではない)プロセス(種別CLIENTのスパンA)が、Amazon Web Servicesで「my-lambda-function」というLambda関数を呼び出す場合(種別SERVERのスパンB)のFaaS属性を示しています。

Attribute KindAttributeSpan A (Client, GCP)Span B (Server, AWS Lambda)
Resourcecloud.provider"gcp""aws"
Resourcecloud.region"europe-west3""eu-central-1"
Spanfaas.invoked_name"my-lambda-function"n/a
Spanfaas.invoked_provider"aws"n/a
Spanfaas.invoked_region"eu-central-1"n/a
Spanfaas.triggern/a"http"
Spanfaas.invocation_idn/a"af9d5aa4-a685-4c5f-a22b-444f80b3cc28"
Spanfaas.coldstartn/atrue
Resourcefaas.namen/a"my-lambda-function"
Resourcefaas.versionn/a"semver:2.0.0"
Resourcefaas.instancen/a"my-lambda-function:instance-0001"
Resourcecloud.resource_idn/a"arn:aws:lambda:us-west-2:123456789012:function:my-lambda-function"