Skip to content

Latest commit

 

History

History
215 lines (141 loc) · 15.7 KB

azure-web-apps-python.md

File metadata and controls

215 lines (141 loc) · 15.7 KB
title description ms.topic ms.date ms.devlang ms.custom ms.reviewer
Monitor Azure app services performance Python (Preview)
Application performance monitoring for Azure app services using Python. Chart load and response time, dependency information, and set alerts on performance.
conceptual
04/01/2024
python
devx-track-python
abinetabate

Application monitoring for Azure App Service and Python (Preview)

Important

See the Supplemental Terms of Use for Microsoft Azure Previews for legal terms that apply to Azure features that are in beta, preview, or otherwise not yet released into general availability.

Monitor your Python web applications on Azure App Services without modifying the code. This guide shows you how to enable Azure Monitor Application Insights and offers tips for automating large-scale deployments.

The integration instruments popular Python libraries in your code, letting you automatically gather and correlate dependencies, logs, and metrics. After instrumenting, you collect calls and metrics from these Python libraries:

Instrumentation Supported library Name Supported versions
OpenTelemetry Django Instrumentation django link
OpenTelemetry FastApi Instrumentation fastapi link
OpenTelemetry Flask Instrumentation flask link
OpenTelemetry Psycopg2 Instrumentation psycopg2 link
OpenTelemetry Requests Instrumentation requests link
OpenTelemetry UrlLib Instrumentation urllib All
OpenTelemetry UrlLib3 Instrumentation urllib3 link

Note

If using Django, see the additional Django Instrumentation section in this article.

Logging telemetry is collected at the level of the root logger. To learn more about Python's native logging hierarchy, visit the Python logging documentation.

Prerequisites

  • Python version 3.11 or prior.
  • App Service must be deployed as code. Custom containers aren't supported.

Enable Application Insights

The easiest way to monitor Python applications on Azure App Services is through the Azure portal.

Activating monitoring in the Azure portal automatically instruments your application with Application Insights and requires no code changes.

Note

You should only use autoinstrumentation on App Service if you aren't using manual instrumentation of OpenTelemetry in your code, such as the Azure Monitor OpenTelemetry Distro or the Azure Monitor OpenTelemetry Exporter. This is to prevent duplicate data from being sent. To learn more about this, check out the troubleshooting section in this article.

Autoinstrumentation through Azure portal

For a complete list of supported autoinstrumentation scenarios, see Supported environments, languages, and resource providers.

Toggle on monitoring for your Python apps in Azure App Service with no code changes required.

Application Insights for Python integrates with code-based Linux Azure App Service.

The integration is in public preview. It adds the Python SDK, which is in GA.

  1. Select Application Insights in the Azure control panel for your app service, then select Enable.

    :::image type="content"source="./media/azure-web-apps/enable.png" alt-text="Screenshot of Application Insights tab with enable selected." lightbox="./media/azure-web-apps/enable.png":::

  2. Choose to create a new resource, or select an existing Application Insights resource for this application.

    [!NOTE] When you select OK to create the new resource you will be prompted to Apply monitoring settings. Selecting Continue will link your new Application Insights resource to your app service, doing so will also trigger a restart of your app service.

    :::image type="content"source="./media/azure-web-apps/change-resource.png" alt-text="Screenshot of Change your resource dropdown." lightbox="./media/azure-web-apps/change-resource.png":::

  3. You specify the resource, and it's ready to use.

    :::image type="content"source="./media/azure-web-apps-python/app-service-python.png" alt-text="Screenshot of instrument your application." lightbox="./media/azure-web-apps-python/app-service-python.png":::

Configuration

You can configure with OpenTelemetry environment variables such as:

Environment Variable Description
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES Specifies the OpenTelemetry Resource Attributes associated with your application. You can set any Resource Attributes with OTEL_RESOURCE_ATTRIBUTES or use OTEL_SERVICE_NAME to only set the service.name.
OTEL_LOGS_EXPORTER If set to None, disables collection and export of logging telemetry.
OTEL_METRICS_EXPORTER If set to None, disables collection and export of metric telemetry.
OTEL_TRACES_EXPORTER If set to None, disables collection and export of distributed tracing telemetry.
OTEL_BLRP_SCHEDULE_DELAY Specifies the logging export interval in milliseconds. Defaults to 5000.
OTEL_BSP_SCHEDULE_DELAY Specifies the distributed tracing export interval in milliseconds. Defaults to 5000.
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS Specifies which OpenTelemetry instrumentations to disable. When disabled, instrumentations aren't executed as part of autoinstrumentation. Accepts a comma-separated list of lowercase library names. For example, set it to "psycopg2,fastapi" to disable the Psycopg2 and FastAPI instrumentations. It defaults to an empty list, enabling all supported instrumentations.

Add a community instrumentation library

You can collect more data automatically when you include instrumentation libraries from the OpenTelemetry community.

[!INCLUDE azure-monitor-app-insights-opentelemetry-support]

To add the community OpenTelemetry Instrumentation Library, install it via your app's requirements.txt file. OpenTelemetry autoinstrumentation automatically picks up and instruments all installed libraries. Find the list of community libraries here.

Automate monitoring

In order to enable telemetry collection with Application Insights, only the following Application settings need to be set:

:::image type="content"source="./media/azure-web-apps-python/application-settings-python.png" alt-text="Screenshot of App Service Application Settings with available Application Insights settings." lightbox="./media/azure-web-apps-python/application-settings-python.png":::

Application settings definitions

App setting name Definition Value
APPLICATIONINSIGHTS_CONNECTION_STRING Connections string for your Application Insights resource Example: abcd1234-ab12-cd34-abcd1234abcd
ApplicationInsightsAgent_EXTENSION_VERSION Main extension, which controls runtime monitoring. ~3

Note

Profiler and snapshot debugger are not available for Python applications

[!INCLUDE azure-web-apps-arm-automation]

Django Instrumentation

In order to use the OpenTelemetry Django Instrumentation, you need to set the DJANGO_SETTINGS_MODULE environment variable in the App Service settings to point from your app folder to your settings module. For more information, see the Django documentation.

Frequently asked questions

[!INCLUDE azure-web-apps-troubleshoot]

Troubleshooting

Here we provide our troubleshooting guide for monitoring Python applications on Azure App Services using autoinstrumentation.

Duplicate telemetry

You should only use autoinstrumentation on App Service if you aren't using manual instrumentation of OpenTelemetry in your code, such as the Azure Monitor OpenTelemetry Distro or the Azure Monitor OpenTelemetry Exporter. Using autoinstrumentation on top of the manual instrumentation could cause duplicate telemetry and increase your cost. In order to use App Service OpenTelemetry autoinstrumentation, first remove manual instrumentation of OpenTelemetry from your code.

Missing telemetry

If you're missing telemetry, follow these steps to confirm that autoinstrumentation is enabled correctly.

Step 1: Check the Application Insights blade on your App Service resource

Confirm that autoinstrumentation is enabled in the Application Insights blade on your App Service Resource:

:::image type="content"source="./media/azure-web-apps/enable.png" alt-text="Screenshot of Application Insights tab with enable selected." lightbox="./media/azure-web-apps/enable.png":::

Step 2: Confirm that your App Settings are correct

Confirm that the ApplicationInsightsAgent_EXTENSION_VERSION app setting is set to a value of ~3 and that your APPLICATIONINSIGHTS_CONNECTION_STRING points to the appropriate Application Insights resource.

:::image type="content"source="./media/azure-web-apps-python/application-settings-python.png" alt-text="Screenshot of App Service Application Settings with available Application Insights settings." lightbox="./media/azure-web-apps-python/application-settings-python.png":::

Step 3: Check autoinstrumentation diagnostics and status logs

Navigate to /var/log/applicationinsights/ and open status_*.json.

Confirm that AgentInitializedSuccessfully is set to true and IKey to have a valid iKey.

Here's an example JSON file:

    "AgentInitializedSuccessfully":true,
            
    "AppType":"python",
            
    "MachineName":"c89d3a6d0357",
            
    "PID":"47",
            
    "IKey":"00000000-0000-0000-0000-000000000000",
            
    "SdkVersion":"1.0.0"

The applicationinsights-extension.log file in the same folder may show other helpful diagnostics.

Django apps

If your app uses Django and is either failing to start or using incorrect settings, make sure to set the DJANGO_SETTINGS_MODULE environment variable. See the Django Instrumentation section for details.


[!INCLUDE azure-monitor-app-insights-test-connectivity]

For the latest updates and bug fixes, consult the release notes. -->

Next steps