90 lines
3.1 KiB
Markdown
90 lines
3.1 KiB
Markdown
# Instrument an ASP.NET application deployed on IIS
|
|
|
|
## Setup
|
|
|
|
Use the `OpenTelemetry.DotNet.Auto.psm1"` PowerShell module
|
|
to set up automatic instrumentation for IIS:
|
|
|
|
```powershell
|
|
# Import the module
|
|
Import-Module "OpenTelemetry.DotNet.Auto.psm1"
|
|
|
|
# Install core files
|
|
Install-OpenTelemetryCore
|
|
|
|
# Setup IIS instrumentation
|
|
Register-OpenTelemetryForIIS
|
|
```
|
|
|
|
⚠️ `Register-OpenTelemetryForIIS` performs IIS restart.
|
|
|
|
### Add TelemetryHttpModule ASP.NET HTTP module
|
|
|
|
> This is NOT required for ASP.NET Core deployments.
|
|
|
|
This step is necessary only for ASP.NET (.NET Framework).
|
|
|
|
Add `OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule, OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule`
|
|
ASP.NET HTTP module to your application's `Web.config`.
|
|
You can add it in the following places:
|
|
|
|
```xml
|
|
<system.web>
|
|
<httpModules>
|
|
<add name="TelemetryHttpModule" type="OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule, OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule" />
|
|
</httpModules>
|
|
</system.web>
|
|
```
|
|
|
|
```xml
|
|
<system.webServer>
|
|
<validation validateIntegratedModeConfiguration="false" />
|
|
<modules>
|
|
<remove name="TelemetryHttpModule" />
|
|
<add name="TelemetryHttpModule" type="OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule, OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule" preCondition="managedHandler" />
|
|
</modules>
|
|
</system.webServer>
|
|
```
|
|
|
|
The ASP.NET HTTP module can be also set in `applicationHost.config`.
|
|
Here is an example where you can add the module
|
|
to set it for all ASP.NET application running in Integrated Pipeline Mode:
|
|
|
|
```xml
|
|
<location path="" overrideMode="Allow">
|
|
<system.webServer>
|
|
<modules>
|
|
<add name="TelemetryHttpModule" type="OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule, OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule" preCondition="managedHandler" />
|
|
</modules>
|
|
</system.webServer>
|
|
</location>
|
|
```
|
|
|
|
## Configuration
|
|
|
|
> Remember to restart IIS after making configuration changes.
|
|
> You can do it by executing `iisreset.exe`.
|
|
|
|
For ASP.NET application you can configure the most common `OTEL_` settings
|
|
(like `OTEL_SERVICE_NAME`) via `appSettings` in `Web.config`.
|
|
|
|
For ASP.NET Core application you can use
|
|
the [`<environmentVariable>`](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/web-config#set-environment-variables)
|
|
elements inside the `<aspNetCore>` block of your `Web.config` file
|
|
to set configuration via environment variables.
|
|
|
|
### Advanced configuration
|
|
|
|
You can add the [`<environmentVariables>`](https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/add/environmentvariables/)
|
|
in `applicationHost.config`
|
|
to set environment variables for given application pools.
|
|
|
|
> For IIS versions older than 10.0, you can consider creating a distinct user,
|
|
set its environment variables
|
|
and use it as the application pool user.
|
|
|
|
Consider setting common environment variables,
|
|
for all applications deployed to IIS
|
|
by setting the environment variables for
|
|
`W3SVC` and `WAS` Windows Services as described in [windows-service-instrumentation.md](windows-service-instrumentation.md).
|