DEV Community

Umut Erol
Umut Erol

Posted on

IIS ile Çalışan Asp.Net Web Form App (4.8) Opentelemetry Entegrasyonu

PowerShell Modülünü Kullanarak Otomatik Enstrümantasyon Kurulumu

Başlat menüsüne tıklayın veya Windows tuşuna basın.
Arama sonuçlarında Windows PowerShell uygulamasını göreceksiniz.
Windows PowerShell uygulamasına sağ tıklayın.
Açılan menüden Yönetici Olarak Çalıştır seçeneğini seçin.

# Modülü İçe Aktar
Import-Module "OpenTelemetry.DotNet.Auto.psm1"

# Çekirdek Dosyaları Yükle
Install-OpenTelemetryCore

# IIS Enstrümantasyonunu Ayarla
Register-OpenTelemetryForIIS

# IIS'i Yeniden Başlat
iisreset

Enter fullscreen mode Exit fullscreen mode

Visual Code 2022 ile oluşturmuş olduğunuz Asp.Net Web Form Uygulamasını açın. "Solution Explorer" kısmından Web.config dosyasını açın ve aşağıdaki gibi gerekli ayarları yapın:

<configuration>
    <appSettings>
        <add key="OTEL_SERVICE_NAME" value="asp-net-otel-app" />
        <add key="OTEL_EXPORTER_OTLP_TRACES_ENDPOINT" value="http://ip-address/v1/traces" />
        <add key="OTEL_EXPORTER_OTLP_METRICS_ENDPOINT" value="http://ip-address/v1/metrics" />
        <add key="OTEL_RESOURCE_ATTRIBUTES" value="service.name=asp-net-otel-app,environment=production" />
        <add key="OTEL_LOG_LEVEL" value="debug" />
    </appSettings>
    <system.web>
        <!-- Diğer ayarlar burada yer alacak -->
    </system.web>
</configuration>

Enter fullscreen mode Exit fullscreen mode

Burada OpenTelemetry Collector'ü ayağa kaldırmış olduğunuz makinenin ip adresini ve collector'ün çalıştığı portu girmeniz gerekmektedir.

Eğer halihazırda ayağa kaldırılmış bir opentelemetry collector'e sahip değilseniz aşağıdaki bağlantıdan bu adımı gerçekleştirebilirsiniz:

https://dev.to/umuterol/opentelemetry-collectoru-ayaga-kaldirma-3h38

PowerShell'e iisreset komutunu girerek IIS'i yeniden başlatın.

OpenTelemetryHttpModule middleware oluşturma

Visual Studio 2022'de projeniniz üzerine gelin ve sağ tık yapın.
-> Add -> New Item -> Class seçeneklerini seçerek bir class yapısı oluşturun. (Örneğin isim olarak OpenTelemetryHttpModule.cs tercih edebilirsiniz)
Oluşturulan dosyaya aşağıdaki kodu ekleyin.

using System;
using System.Web;
using OpenTelemetry;
using OpenTelemetry.Trace;
namespace app_name
{
    public class OpenTelemetryHttpModule : IHttpModule
    {
        private static TracerProvider tracerProvider;

        public void Init(HttpApplication context)
        {
            // Tracer Provider başlatılır
            tracerProvider = Sdk.CreateTracerProviderBuilder()
                .AddAspNetInstrumentation() // ASP.NET isteklerini izler
                .AddConsoleExporter()       // Konsola export eder
                .Build();

            context.BeginRequest += OnBeginRequest;
            context.EndRequest += OnEndRequest;
        }

        private void OnBeginRequest(object sender, EventArgs e)
        {
            // İsteğin başlangıcında yapılacak işlemler
            var context = ((HttpApplication)sender).Context;
            context.Items["startTime"] = DateTime.UtcNow;
        }

        private void OnEndRequest(object sender, EventArgs e)
        {
            // İsteğin bitişinde yapılacak işlemler
            var context = ((HttpApplication)sender).Context;
            if (context.Items["startTime"] is DateTime startTime)
            {
                var duration = DateTime.UtcNow - startTime;
                Console.WriteLine($"Request Duration: {duration.TotalMilliseconds} ms");
            }
        }

        public void Dispose()
        {
            tracerProvider?.Dispose();
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Web.config ayarı
OpenTelemetryHttpModule'ı kullanmak için Web.config dosyasına gidin ve aşağıdakini ilgili yere ekleyin.

web.config
<configuration>
  <system.webServer>
    <modules>
      <add name="OpenTelemetryHttpModule" type="Namespace.OpenTelemetryHttpModule" />
    </modules>
  </system.webServer>
</configuration>
Enter fullscreen mode Exit fullscreen mode

Projenizi çalıştırın. Denemek için opentelemetry entegresi yaptığınız servis ile bir takım post ve get gibi istekler yaparak opentelemetry collector'ün exporter'ı olan clickhouse'dan trace verilerini görüntüleyebilirsiniz.

IIS bağlantısı ile projenizi çalıştırırken bir sorun yaşıyorsanız projeniz üzerine sağ tık yaparak properties seçeneğini seçin. Web sekmesine gelin ve Local IIS seçeneğini seçerek projenizi bir kez daha çalıştırmayı deneyin.

Top comments (0)