.NET
Traces | Metrics | App Logs | Custom Logs | Profiling |
---|---|---|---|---|
✅ | ✅ | ✖ | ✅ | ✅ |
This guide walks you through setting up Application Performance Monitoring (APM) on a .NET application. These instructions can also be found on the Installation page in your Middleware Account. View example code here.
Prerequisites
1 Infra Agent
Infrastructure Agent (Infra Agent). To install the Infra Agent, see our Installation Guide.
2 .NET Version
.NET version 6+
. Check your .NET version with the following command:
dotnet --version
Install
Step 1: Install .NET
APM Package
Step 1a: Run the following command in your terminal
curl -sSfL https://install.middleware.io/apm/dotnet/v1.0.0-rc.1/scripts/mw-dotnet-auto-install.sh -O
Step 1b: Install core files
sh ./mw-dotnet-auto-install.sh rm -f mw-dotnet-auto-install.sh
Step 1c: Enable execution for the instrumentation script
chmod +x $HOME/.mw-dotnet-auto/instrument.sh
Step 2: Setup Middleware .NET Project
Download the latest Middleware.dll and add the following code in the .csproj
file.
<ItemGroup> <Reference Include="Middleware"> <HintPath>path\to\Middleware.dll</HintPath> </Reference> </ItemGroup>
Step 3: Container Variables
Applications running in a container require an additional environment variable. If your application is not running in a container, move to Step 4.
Kubernetes
Add the following environment variable to your container:
MW_AGENT_SERVICE=mw-service.mw-agent-ns.svc.cluster.local
The default namespace for running the Middleware agent is mw-service.mw-agent-ns.svc.cluster.local
.
Docker
Add the following environment variables to your container:
MW_AGENT_SERVICE=DOCKER_BRIDGE_GATEWAY_ADDRESS MW_API_KEY="<MW_API_KEY>"
The DOCKER_BRIDGE_GATEWAY_ADDRESS
is the IP address of the gateway between the Docker host and bridge network. This is 172.17.0.1
by default. Learn more about Docker bridge networking here
Specify your HTTP ports and URL with the following:
This only applies to .NET projects using the ASP framework.
ASPNETCORE_HTTP_PORTS=5000 ASPNETCORE_URLS=http://0.0.0.0:5000
Step 4: Enable Custom Logs [Optional]
Step 4a: Add the following functions:
using Middleware.Logger; ... Logger.Info("This is info log"); Logger.Warning("This is info log"); Logger.Debug("This is info log"); Logger.Error(<Object of Exception>);
Step 4b: Add packages to YourApp.csproj
file
<Project Sdk="Microsoft.NET.Sdk.Web"> ... <ItemGroup> <PackageReference Include="OpenTelemetry" Version="1.5.1" /> <PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.5.1" /> </ItemGroup> ... </Project>
Step 4c: Enable Logs in your project.cs
file
index.cs
using OpenTelemetry.Logs; using OpenTelemetry.Resources; ... var builder = WebApplication.CreateBuilder(args); builder.Logging.AddOpenTelemetry(options => { options.AddConsoleExporter(); });
Step 5: Build and Run .NET Application
Execute the following command to build and run your .NET application:
MW_API_KEY="<MW_API_KEY>" \ . $HOME/.mw-dotnet-auto/instrument.sh && \ OTEL_SERVICE_NAME="{APM-SERVICE-NAME}" \ dotnet path/to/YourApplication.dll
Azure App Service Configuration
Step 1: Install the Required Package
Add the Middleware package to your .NET project by running the following command:
dotnet add package MW.APM --version 1.0.0-beta
Step 2: Add Code Configuration
Add the following code to your Program.cs
file:
Program.cs
var mwApiKey = builder.Configuration.GetSection("MW")["ApiKey"]; var target = builder.Configuration.GetSection("MW")["Target_URL"]; var attributes = new Dictionary<string, object> { { "mw.account_key", mwApiKey }, { "runtime.metrics.dotnet", true }, { "project.name", "<YOUR_PROJECT_NAME_HERE>" }, { "service.name", "<YOUR_SERVICE_NAME_HERE>" },
Step 3: Configure Your Middleware Account Information
Add the following to your appsettings.json
file:
"MW": { "ApiKey": "<MW_API_KEY>", "Target_URL": "https://<UID>.middleware.io:443" }
This is a one-time configuration. After these configuration changes are made, each time the Azure Pipeline is run the .NET instrumentation will also run.
Continuous Profiling
Continuous profiling captures real-time performance insights from your application to enable rapid identification of resource allocation, bottlenecks, and more. Navigate to the Continuous Profiling section to learn more about using Continuous Profiling with the .NET APM.
Need assistance or want to learn more about Middleware? Contact our support team in Slack.