Skip to content
This repository was archived by the owner on Sep 17, 2025. It is now read-only.
This repository was archived by the owner on Sep 17, 2025. It is now read-only.

AzureExporter creates an invalid request if SpanData contains a stacktrace of type string #1241

Description

@ivarec

Describe your environment.
python 3.12
opencensus 0.11.4
opencensus-context 0.1.3
opencensus-ext-azure 1.1.13
opencensus-ext-django 0.8.0
opencensus-ext-logging 0.1.1
opencensus-ext-requests 0.8.0

Steps to reproduce.
I have been able to reproduce it with a simple Django application, but I can imagine that it's easily reproducible regardless of Django.

  1. Create a simple Django application
  2. Configure AppInsights integration like this:
MIDDLEWARE = [
    # ...
    "opencensus.ext.django.middleware.OpencensusMiddleware",
    # ...
]

OPENCENSUS = {
    "TRACE": {
        "SAMPLER": "opencensus.trace.samplers.ProbabilitySampler(rate=1)",
        "EXPORTER": f"""opencensus.ext.azure.trace_exporter.AzureExporter(
            connection_string="{os.getenv('APPLICATIONINSIGHTS_CONNECTION_STRING')}"
        )""",
    }
}

from opencensus.trace import config_integration

config_integration.trace_integrations(["requests", "logging", "postgresql"])

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "simple": {"format": "%(asctime)s | %(levelname)s | %(message)s"},
    },
    "handlers": {
        "stdout": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",
            "formatter": "simple",
        },
        "log_to_appinsights": {
            "level": "DEBUG",
            "class": "opencensus.ext.azure.log_exporter.AzureLogHandler",
            "connection_string": os.environ.get(
                "APPLICATIONINSIGHTS_CONNECTION_STRING"
            ),
            "formatter": "simple",
        },
    },
    "loggers": {
        "django": {
            "handlers": ["stdout", "log_to_appinsights"],
        },
    },
}
  1. Cause an exception to be raised inside a request handled by Django

What is the expected behavior?
Data point (exception trace) should be correctly posted to AppInsights

What is the actual behavior?
I get the following error:

Data drop 400: 106: Field 'parsedStack' on type 'ExceptionDetails' is of incorrect type. Expected: array {<redacted>}.

Additional context.

I can see that the opencensus-ext-azure library expects the stacktrace attribute of a trace to be of type "array". Here is the relevant snippet:

stack_trace = sd.attributes.get(STACKTRACE, [])
if not hasattr(stack_trace, '__iter__'):
stack_trace = []

And I can also see that the exporter in opencensus-ext-django prepares this attribute as a string:

span.add_attribute(
attribute_key=STACKTRACE,
attribute_value='\n'.join(traceback.format_tb(tb)))

I am not knowledgeable yet in OpenCensus and this library. I am not sure which side is incorrect: if it's the Django part or the Azure part. I also don't feel confident in writing a PR for this. Let me know if I can help further.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

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