Integrate on App Service for Linux and containers
Linux only
App Service on Linux supports two scenarios.
-
Bring your own code
In the code scenario, App Service provides a base container that is maintained by the platform.
This container targets:
- A development framework, such as .NET Core, PHP, or Node.js.
- A version of that framework, such as .NET Core 3.0 or .NET Core 3.1.
Follow the procedure in Built-in image.
-
Bring your own container
In the container scenario, App Service provides a host where a custom container provided by the customer can execute.
For details on the differences between the two scenarios, see Things you should know: Web Apps on Linux.
To monitor App Services on Linux, you need to integrate OneAgent within your containerized application.
Follow the procedure in Custom image.
Integrate Dynatrace on built-in image
Azure App Service for Linux allows you to customize its base container at runtime using a startup script or script command that must be executed in a bash shell or Azure Cloud Shell. The script can be configured in multiple ways.
Set startup script command/file at creation time using Azure CLI
az webapp create -n <my-app> -g <my-resourcegroup> -p <my-appservice-plan> --runtime <runtime-tag> --startup-file <startup-script/command>
Set script command/file at creation time for an existing App Service
az webapp config set -n <my-app> -g <my-resourcegroup> --startup-file <startup-script/command>
Set script command/file using ARM template
Use the appCommandLine property of your ARM template to set the startup script/command.
{
"acrUseManagedIdentityCreds": false,
"acrUserManagedIdentityId": null,
"alwaysOn": false,
"apiDefinition": null,
"apiManagementConfig": null,
"appCommandLine": "<startup-script/command>",
"appSettings": null,
"autoHealEnabled": false,
"autoHealRules": null,
"autoSwapSlotName": null,
...
Set startup script command/file in the Azure portal
Script or command?
A startup script is the same as a startup command: it's a command that executes the script (remember to use the path of the script). However, this requires that you package the script along with your application. If you don't want to have this dependency, use startup commands.
The script/command is executed within the container init script, which is implemented differently on each technology stack.
For details on startup commands, see the Azure App Service for Linux documentation on What are the expected values for the Startup File section when I configure the runtime stack?
Integrate Dynatrace using a startup script/command
To integrate Dynatrace, the startup script/command needs to have access to a few variables.
Parameter | Description |
---|---|
| Your Dynatrace API server endpoint—use either your environment cluster endpoint or an ActiveGate address. |
| API Token to access the Dynatrace REST API—create an API Token with the InstallerDownload scope. |
| Configure required code modules, depending on the used technology stack.
For details, see API documentation. |
| The command to start your application What are the expected values for the Startup File section when I configure the runtime stack? |
If you use a shell other than bash, make sure to adapt the script appropriately to the shell's character escape requirements.
You can do this in two ways.
- App service settings recommended
- Setting the values inline
App service settings
Set the values of the above parameters using App Settings—this is equivalent to setting environment variables—and then run this command.
wget -O /tmp/installer-wrapper.sh -q https://raw.githubusercontent.com/dynatrace-oss/cloud-snippets/main/azure/linux-app-service/oneagent-installer.sh && sh /tmp/installer-wrapper.sh
Alternatively, you can use the calling-only script below, which works for all Linux images.
#!/bin/sh
readonly installerWrapperInstallationPath=/tmp/installer-wrapper.sh
readonly installerWrapperURL=https://raw.githubusercontent.com/dynatrace-oss/cloud-snippets/main/azure/linux-app-service/oneagent-installer.sh
wget -O $installerWrapperInstallationPath -q $installerWrapperURL
sh $installerWrapperInstallationPath
Setting the values inline
You can set the needed variables only for the command that runs the OneAgent installer.
To do this, you need to set the values before the command as shown below.
wget -O /tmp/installer-wrapper.sh -q https://raw.githubusercontent.com/dynatrace-oss/cloud-snippets/main/azure/linux-app-service/oneagent-installer.sh && DT_ENDPOINT=$DT_ENDPOINT DT_API_TOKEN=$DT_API_TOKEN DT_INCLUDE=$DT_INCLUDE START_APP_CMD=$START_APP_CMD sh /tmp/installer-wrapper.sh
Alternatively, you can use the startup file as shown below.
#!/bin/sh
readonly installerWrapperInstallationPath=/tmp/installer-wrapper.sh
readonly installerWrapperURL=https://raw.githubusercontent.com/dynatrace-oss/cloud-snippets/main/azure/linux-app-service/oneagent-installer.sh
wget -O $installerWrapperInstallationPath -q $installerWrapperURL
DT_ENDPOINT=$DT_ENDPOINT DT_API_TOKEN=$DT_API_TOKEN DT_INCLUDE=$DT_INCLUDE START_APP_CMD=$START_APP_CMD sh $installerWrapperInstallationPath
Example: Integrate into a node.js application using Azure CLI within a bash shell
Configure the startup command
Restart the web application twice
Configure the startup command
RESOURCE_GROUP="my-appservice-test"
APPSVC="my-linux-webapp"
DT_API_URL="https://XXXXXX.live.dynatrace.com"
DT_API_TOKEN="XXXXXX"
DT_FLAVOR="musl"
DT_INCLUDE="nodejs"
START_APP_CMD="pm2 start index.js --no-daemon"
STARTUP_CMD="wget -O /tmp/installer-wrapper.sh -q https://raw.githubusercontent.com/dynatrace-oss/cloud-snippets/main/azure/linux-app-service/oneagent-installer.sh && DT_ENDPOINT=$DT_ENDPOINT DT_API_TOKEN=$DT_API_TOKEN DT_INCLUDE=$DT_INCLUDE START_APP_CMD=$START_APP_CMD sh /tmp/installer-wrapper.sh"
az webapp config set --resource-group $RESOURCE_GROUP --name $APPSVC --startup-file "$STARTUP_CMD"
Restart the web application twice
After you configure the startup command, restart the web application twice.
- Restart once to initialize OneAgent installation.
- Restart again to start OneAgent instrumenting your application.
Integrate Dynatrace on custom image
To integrate OneAgent with the application image, you have two options:
- Integrate the OneAgent image layer provided by Dynatrace
- Download OneAgent artifacts at image build-time from Dynatrace REST API
Option 1: Integrate using Dynatrace offered OneAgent image layer
This option requires that you have Docker v17.05+ installed on your computer.
-
Sign in to Docker with your Dynatrace environment ID as the username and your PaaS token as the password.
docker login -u <environmentID> <ADDRESS>
-
Add the following lines to your application image Dockerfile, after the last
FROM
command.COPY --from=<ADDRESS>/linux/oneagent-codemodules:<TECHNOLOGY> / / ENV LD_PRELOAD /opt/dynatrace/oneagent/agent/lib64/liboneagentproc.so
Replace the following placeholders in the template.
Parameter Description <ADDRESS>
Your Dynatrace registry endpoint—use either your environment cluster endpoint or an ActiveGate address.
<TECHNOLOGY>
Configure required code modules, depending on the used technology stack.
all
includes all available OneAgent code modules (java
,apache
,nginx
,nodejs
,dotnet
,php
,go
,sdk
), but it increases download package size.- Alternatively, choose identifiers appropriate to your application stack, such as
java
,dotnet
,nodejs
, orphp
.
For details, see the API documentation.
What if my Docker image is based on Alpine Linux?
Dynatrace OneAgent supports Alpine Linux–based environments. To use an Alpine Linux compatible OneAgent, use image name
oneagent-codemodules-musl
(as shown in the adapted template below) instead ofoneagent-codemodules
.COPY --from=<ADDRESS>/linux/oneagent-codemodules-musl:<TECHNOLOGY> / / ENV LD_PRELOAD /opt/dynatrace/oneagent/agent/lib64/liboneagentproc.so
-
Build your application image.
Build the Docker image from your Dockerfile to use it in your Kubernetes environment.
docker build -t yourapp .
-
Restart the web application twice.
- Restart once to initialize the OneAgent install script.
- Restart again to start OneAgent on the host.
Option 2: Integrate using installer script from Dynatrace REST API
-
Add the following two lines to your Dockerfile.
RUN wget -O /tmp/installer.sh -q "<DT_ENDPOINT>/api/v1/deployment/installer/agent/unix/paas-sh/latest?Api-Token=<DT_API_TOKEN>&flavor=<DT_FLAVOR>&include=<DT_INCLUDE>" && sh /tmp/installer.sh ENV LD_PRELOAD /opt/dynatrace/oneagent/agent/lib64/liboneagentproc.so
Replace the following parameters in the template above.
Parameter Description <DT_ENDPOINT>
Your Dynatrace API endpoint—use either your environment cluster endpoint or an ActiveGate address.
<DT_API_TOKEN>
API Token to access the Dynatrace REST API—create an API Token with the InstallerDownload scope.
<DT_FLAVOR>
Configure the required architecture.
default
for standard, glibc-based Linux imagesmusl
for Alpine Linux–based images
<DT_INCLUDE>
Configure required code modules, depending on the used technology stack.
all
includes all available OneAgent code modules (java
,apache
,nginx
,nodejs
,dotnet
,php
,go
,sdk
), but it increases download package size.- Alternatively, choose identifiers appropriate to your application stack, such as
java
,dotnet
,nodejs
, orphp
.
For details, see the API documentation.
-
Build your application image.
Build the Docker image from your Dockerfile to use it in your Kubernetes environment.
docker build -t yourapp .
-
Restart the web application twice.
- Restart once to initialize the OneAgent install script.
- Restart again to start OneAgent on the host.
Additional configuration optional
Use additional environment variables to configure OneAgent for troubleshooting or advanced networking. You can either set them via your App Service Application settings or, when using a custom container image, configure them within your application image Dockerfile.
Networking variables
Parameter | Description |
---|---|
| Specifies to use a network zone. For more information, see network zones. |
| When using a proxy, use this environment variable to pass proxy credentials. For more information, see Set up OneAgent on containers for application-only monitoring. |
Additional metadata for process grouping and service detection
When listing multiple tags, you need to put them in double quotes, for example: DT_TAGS="Tag1=Value1 Tag2=Value2".
Parameter | Description |
---|---|
| Multiple containers are sometimes detected as a single instance (localhost), leading to various problems in, for example, service detection or availability alerts. Use this environment variable to define a unique name for your container instance. For details, see Service detection and naming |
| Some technologies don't provide unique application names. In such cases, use this environment variable to provide a unique name. For more information, see Web server naming issues. |
| Applies custom tags to your process group. |
| Applies custom metadata to your process group. |
| If the process group detection rules won't work for your use case, use this environment variable to group all processes with the same value. |
| If the process group detection rules won't work for your use case, use this environment variable to separate process group instances. |
Troubleshooting variables
Parameter | Description |
---|---|
| Set this variable with |
| Use this environment variable to define the console log level. Valid options are: |
| Set to |
Update OneAgent
When an update is available, restart your application to update OneAgent.
Each time you want to leverage a new version of Dynatrace OneAgent, you need to rebuild your local OneAgent code modules and application image. Any newly started pods from this application image will be monitored with the latest version of OneAgent.
If you've specified a default OneAgent installation version for new hosts and applications using OneAgent update settings, your web apps will be automatically monitored by the defined default version of OneAgent.
Uninstall OneAgent
To uninstall OneAgent
- In Azure Portal, go to your web application > Configuration > General settings.
- Remove your startup command (leave Startup Command empty).
- Select Save.
To uninstall OneAgent, remove references from above described Dynatrace integration from your application image and redeploy the application.
Troubleshooting
Potential conflict with Application Insights
OneAgent may conflict with Azure Application Insights agents already instrumenting the application. If you don't see any monitoring data coming in, check if you have turned on Application Insights and re-try with Application Insights turned off.