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.
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.
Runtime | DD_START_APP Example Value | Description |
---|
Node.js | node ./bin/www | Runs the Node PM2 configuration file, or your script file. |
.NET Core | dotnet datadog-demo.dll | Runs 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. |
PHP | cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload | Copies script to correct location and starts application. |
Python | gunicorn --bind=0.0.0.0 --timeout 600 quickstartproject.wsgi | Custom startup script. This example shows a Gunicorn command for starting a Django app. |
Java | java -jar /home/site/wwwroot/datadog-demo.jar | The 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.11/datadog_wrapper | bash
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.
Share the content of the Log stream with Datadog Support.
Further reading
Additional helpful documentation, links, and articles: