Azure App Service - Linux Code

Overview

This instrumentation method provides the following additional monitoring capabilities for Linux Azure App Service workloads:

  • Fully distributed APM tracing using automatic instrumentation.
  • Customized APM service and trace views showing relevant Azure App Service metrics and metadata.
  • Support for manual APM instrumentation to customize spans.
  • Trace_ID injection into application logs.
  • Support for submitting custom metrics using DogStatsD.

This solution uses the startup command setting and Application Settings for Linux Azure App Service to instrument the application and manage its configuration. Java, Node, .NET, PHP, and Python are supported.

Setup

Set application settings

To instrument your application, begin by adding the following key-value pairs under App settings in your Azure “Environment variables” settings.

Azure App Service Configuration: the Application Settings, under the Configuration section of Settings in the Azure UI. Three settings are listed: DD_API_KEY, DD_SERVICE, and DD_START_APP.
  • DD_API_KEY is your Datadog API key.
  • DD_CUSTOM_METRICS_ENABLED (optional) enables custom metrics.
  • DD_SITE is the Datadog site parameter. Your site is . This value defaults to datadoghq.com.
  • DD_SERVICE is the service name used for this program. Defaults to the name field value in package.json.
  • DD_START_APP is the command used to start your application. For example, node ./bin/www (unnecessary for applications running in Tomcat).
  • DD_PROFILING_ENABLED (optional) Enables the Continuous Profiler, specific to .NET.

Identifying your startup command

Linux Azure App Service Web Apps built using the code deployment option on built-in runtimes depend on a startup command that varies by language. The default values are outlined in Azure’s documentation. Examples are included below.

Set these values in the DD_START_APP environment variable. Examples below are for an application named datadog-demo, where relevant.

RuntimeDD_START_APP Example ValueDescription
Node.jsnode ./bin/wwwRuns the Node PM2 configuration file, or your script file.
.NET Coredotnet datadog-demo.dllRuns a .dll file that uses your Web App name by default.

Note: The .dll file name in the command should match the file name of your .dll file. In certain cases, this might not match your Web App.
PHPcp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reloadCopies script to correct location and starts application.
Pythongunicorn --bind=0.0.0.0 --timeout 600 quickstartproject.wsgiCustom startup script. This example shows a Gunicorn command for starting a Django app.
Javajava -jar /home/site/wwwroot/datadog-demo.jarThe command to start your app. This is not required for applications running in Tomcat.

Note: The application restarts when new settings are saved.

Set General Settings

Go to General settings and add the following to the Startup Command field:

curl -s https://raw.githubusercontent.com/DataDog/datadog-aas-linux/v1.10.9/datadog_wrapper | bash
Azure App Service Configuration: the Stack settings, under the Configuration section of Settings in the Azure UI. Underneath the stack, major version, and minor version fields is a 'Startup Command' field that is populated by the above curl command.

Download the datadog_wrapper file from the releases and upload it to your application with the Azure CLI command:

  az webapp deploy --resource-group <group-name> --name <app-name> --src-path <path-to-datadog-wrapper> --type=startup

Viewing traces

When new Application Settings are saved, Azure restarts the application. However, if a startup command is added and saved, a restart may be required.

After the application restarts, you can view traces by searching for the service name (DD_SERVICE) in the APM Service page of Datadog.

Custom metrics

To enable custom metrics for your application with DogStatsD, add DD_CUSTOM_METRICS_ENABLED and set it as true in your Application Settings.

To configure your application to submit metrics, follow the appropriate steps for your runtime.

Deployment

To update your Datadog instrumentation with zero downtime, use deployment slots. You can create a workflow that uses GitHub Action for Azure CLI.

See the sample GitHub workflow.

Troubleshooting

If you are not receiving traces or custom metric data as expected, enable App Service logs to receive debugging logs.

Azure App Service Configuration: App Service logs, under the Monitoring section of Settings in the Azure UI. The 'Application logging' option is set to 'File System'.

Share the content of the Log stream with Datadog Support.

Further reading

Additional helpful documentation, links, and articles: