DEV Community

Umut Erol
Umut Erol

Posted on • Edited 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

# Download the module
$module_url = "https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/OpenTelemetry.DotNet.Auto.psm1"

$download_path = Join-Path $env:temp "OpenTelemetry.DotNet.Auto.psm1"

Invoke-WebRequest -Uri $module_url -OutFile $download_path -UseBasicParsing

# Import the module 
Import-Module $download_path

# Install core files
Install-OpenTelemetryCore

# IIS Entegrasyonu
Register-OpenTelemetryForIIS

# IIS'i Yeniden Başlat
iisreset

Enter fullscreen mode Exit fullscreen mode

PowerShell'de yaptığınız bu işlemler sonrasında Visual Code 2022'ye gelin ve Manage NuGet Package sayfasına gelerek aşağıda yer alan paketleri install edin.

Install-Package OpenTelemetry
Install-Package OpenTelemetry.Api

Install-Package OpenTelemetry.Api.ProviderBuilderExtensions
Install-Package OpenTelemetry.Exporter.OpenTelemetryProtocol
Install-Package OpenTelemetry.Extensions.Hosting
Install-Package OpenTelemetry.Instrumentation.AspNet

Install-Package OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule

Install-Package OpenTelemetry.Instrumentation.Http

Enter fullscreen mode Exit fullscreen mode

--> Burada halihazırda install edilmiş halde bulunan paketler için bir işlem yapmanıza gerek görülmemektedir.

--> Paketlerin versiyonu bu noktada önem taşımaktadır. Bir hata ile karşılaşırsanız (OpenTelemetry.Instrumentation.AspNet.TelemetryHttp,Microsoft.Extensions.Primitives gibi paketlerde... ) hata loglarını takip ederek gerekli versiyon güncellemelerini yapabilirsiniz. Sorunun düzelmemesi durumunda Web.config dosyasına geliniz ve paket versiyonunuzu kontrol ediniz.

--> Manage NuGet Packages'da Browse kısmında yukarıdaki paketlerden herhangi birini bulamamanız durumunda Include Prerelease seçeneğini seçerek tekrar göz atabilirsiniz.

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="service-name" />
        <add key="OTEL_EXPORTER_OTLP_TRACES_ENDPOINT" value="http://ip-address:port/v1/traces" />
        <add key="OTEL_EXPORTER_OTLP_METRICS_ENDPOINT" value="http://ip-address:port/v1/metrics" />
        <add key="OTEL_RESOURCE_ATTRIBUTES" value="service.name=service-name,environment=production" />
        <add key="OTEL_LOG_LEVEL" value="debug" />
    </appSettings>
    <system.web>
    </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

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 Namespace.Modul
{
    public class OpenTelemetryHttpModule : IHttpModule
    {
        private static TracerProvider tracerProvider;

        public void Init(HttpApplication context)
        {
            // Tracer Provider start
            tracerProvider = Sdk.CreateTracerProviderBuilder()
                .AddAspNetInstrumentation() // ASP.NET isteklerini izler
                .Build();


        }
        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.Modul.OpenTelemetryHttpModule" />
    </modules>
  </system.webServer>
</configuration>
Enter fullscreen mode Exit fullscreen mode

--> OpenTelemetryHttpModule.cs dosyanızdaki namespace bölümünde de Web.config dosyasındaki modul adı ile aynı isme sahip bir değer girdiğinizden emin olunuz. (örn: namespace Namespace.Modul )

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 (2)

Collapse
 
salih_ycel_ecb150dd9fdb7 profile image
Salih YÜCEL

Sakın ola denemeyin bu işleri yaptıktan sonra özellikle PowerShell den iis deki tüm sitelar çalışmaz hale geldi. IIS kaldırıp kurmam bile yemedi IIS calısırken hataya düşüyor sırf bunun yüzünden format atmaya kadar gidecek 90 kere düşünüp ilerleyin

Collapse
 
salih_ycel_ecb150dd9fdb7 profile image
Salih YÜCEL

Bilgisayarı formatlamaz zorunda kaldım ne dosyası iniyor ne yapıyor allah biliyor sakın olakı bu makaleyi dikkate alıp ta birşeyler kurmayın bilgisayarınıza