TracesMetricsApp LogsCustom LogsProfiling
✖️

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.

Shell
dotnet --version

Install

Step 1: Install .NET APM Package

Step 1a: Run the following command in your terminal

Shell
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

Shell
sh ./mw-dotnet-auto-install.sh
rm -f mw-dotnet-auto-install.sh

Step 1c: Enable execution for the instrumentation script

Shell
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.

XML
<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:

Shell
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:

dockerfile
MW_AGENT_SERVICE=DOCKER_BRIDGE_GATEWAY_ADDRESS
MW_API_KEY=<MW_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.
dockerfile
ASPNETCORE_HTTP_PORTS=5000
ASPNETCORE_URLS=http://0.0.0.0:5000

Step 4: Enable Custom Logs [Optional]

Step 4a: Add the following functions:

C#
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

XML
<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

C#
using OpenTelemetry.Logs;
using OpenTelemetry.Resources;
...

var builder = WebApplication.CreateBuilder(args);
 
builder.Logging.AddOpenTelemetry(options => 
{
    options.AddConsoleExporter();
});
...

var app = builder.Build();
...

app.Run();

Step 5: Build and Run .NET Application

Execute the following command to build and run your .NET application:

Shell
MW_API_KEY={MW_API_KEY} \
  . $HOME/.mw-dotnet-auto/instrument.sh && \
  OTEL_SERVICE_NAME="{APM-SERVICE-NAME}" \
  dotnet path/to/YourApplication.dll

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 us at support[at]middleware.io.