Function as a Service

Status: Experimental

type: faas

Description: A “function as a service” aka “serverless function” instance.

See also:

FaaS resource attributes

AttributeTypeDescriptionExamplesRequirement Level
faas.namestringThe name of the single function that this runtime instance executes. [1]my-function; myazurefunctionapp/some-function-nameRequired
faas.idstringThe unique ID of the single function that this runtime instance executes. [2]arn:aws:lambda:us-west-2:123456789012:function:my-functionRecommended
faas.versionstringThe immutable version of the function being executed. [3]26; pinkfroid-00002Recommended
faas.instancestringThe execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version. [4]2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309deRecommended
faas.max_memoryintThe amount of memory available to the serverless function in MiB. [5]128Recommended

[1]: This is the name of the function as configured/deployed on the FaaS platform and is usually different from the name of the callback function (which may be stored in the code.namespace/code.function span attributes).

For some cloud providers, the above definition is ambiguous. The following definition of function name MUST be used for this attribute (and consequently the span name) for the listed cloud providers/products:

  • Azure: The full name <FUNCAPP>/<FUNC>, i.e., function app name followed by a forward slash followed by the function name (this form can also be seen in the resource JSON for the function). This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share a TracerProvider (see also the faas.id attribute).

[2]: On some cloud providers, it may not be possible to determine the full ID at startup, so consider setting faas.id as a span attribute instead.

The exact value to use for faas.id depends on the cloud provider:

  • AWS Lambda: The function ARN. Take care not to use the “invoked ARN” directly but replace any alias suffix with the resolved function version, as the same runtime instance may be invokable with multiple different aliases.
  • GCP: The URI of the resource
  • Azure: The Fully Qualified Resource ID of the invoked function, not the function app, having the form /subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>. This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share a TracerProvider.

[3]: Depending on the cloud provider and platform, use:

  • AWS Lambda: The function version (an integer represented as a decimal string).
  • Google Cloud Run: The revision (i.e., the function name plus the revision suffix).
  • Google Cloud Functions: The value of the K_REVISION environment variable.
  • Azure Functions: Not applicable. Do not set this attribute.

[4]: * AWS Lambda: Use the (full) log stream name.

[5]: It’s recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable AWS_LAMBDA_FUNCTION_MEMORY_SIZE provides this information.

Note: The resource attribute faas.instance differs from the span attribute faas.execution. For more information see the Semantic conventions for FaaS spans.

Using span attributes instead of resource attributes

There are cases where a FaaS resource attribute is better applied as a span attribute instead. See the FaaS trace conventions for more.