Skip to content

APM-Instrumented Azure Function crashes when querying to Azure Table #2118

Open

Description

Describe the bug:

When using Azure Table Client (package azure-data-tables) inside an Azure Function instrumented with elasticapm.contrib.serverless.azure.ElasticAPMExtension and querying a data table using PartitionKey and RowKey, the underlying HTTP request to the table service sends the request parameters in the query string and the request has no body. When Azure Tables instrumentation from Elastic APM reaches this line:

body = request.body
try:
body = json.loads(body)
except json.decoder.JSONDecodeError: # str not bytes
body = {}
# /tablename(PartitionKey='<partition-key>',RowKey='<row-key>')

It crashes because the body is None

To Reproduce

  1. Create an Storage Account in Azure and create a Table named 'test' and insert an entity with PartitionKey 'KEY' and RowKey 'ROW'
  2. Get the Storage Account SAS_TOKEN to connect to the table service and query the test table
  3. Create an Azure Function with this code
import azure.functions as func

from elasticapm.contrib.serverless.azure import ElasticAPMExtension
from azure.data.tables import TableServiceClient
from azure.core.credentials import AzureSasCredential

ElasticAPMExtension.configure()


def main(req: func.HttpRequest) -> func.HttpResponse:
    _table_service_client = TableServiceClient(endpoint=TABLE_ENDPOINT,credential=AzureSasCredential(TABLE_SAS_TOKEN))
    _table_client = _table_service_client.get_table_client('test')
    entity = _table_client.get_entity(
            partition_key='KEY',
            row_key='ROW'
        )
  1. Run func host start to start the local development environment
  2. Connect to the URL of the function and see the exception in the func logs

Environment (please complete the following information)

  • OS: Windows
  • Python version: 3.10.11
  • Framework and version [e.g. Django 2.1]: Azure Functions
  • APM Server version: 7.17
  • Agent version: 6.23.0

Additional context

Add any other context about the problem here.

  • requirements.txt:

    Click to expand
    elasticapm
    azure-functions
    azure-data-tables
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions