Öğretici: Application Insights'ı kullanarak Service Fabric'te ASP.NET Core uygulamasını izleme ve tanılama

Bu öğretici, bir serinin beşinci kısmıdır. Application Insights kullanarak Service Fabric kümesinde çalışan bir ASP.NET Core uygulaması için izleme ve tanılamayı yapılandırma adımlarında yol gösterir. Öğreticinin ilk bölümü olan .NET Service Fabric uygulaması oluşturma bölümünde geliştirilen uygulamadan telemetri toplarız.

Bu öğretici serisinin dördüncü kısmında şunların nasıl yapıldığını öğrenirsiniz:

  • Uygulamanız için Application Insights’ı yapılandırma
  • Hizmetler arasındaki HTTP tabanlı iletişimi izlemek için yanıt telemetrisi toplama
  • Application Insights'da Uygulama Haritası özelliğini kullanma
  • Application Insights API kullanarak özel olaylar ekleme

Bu öğretici dizisinde şunların nasıl yapıldığını öğrenirsiniz:

Önkoşullar

Bu öğreticiye başlamadan önce:

Voting örnek uygulamasını indirme

Voting örnek uygulamasını bu öğretici serisinin birinci bölümünde oluşturmadıysanız indirebilirsiniz. Komut penceresinde veya terminalde, örnek uygulama deposunu yerel makinenize kopyalamak için aşağıdaki komutu çalıştırın.

git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart

Application Insights kaynağını ayarlama

Application Insights, Azure'un uygulama performansı yönetim platformu olduğu gibi, Service Fabric'in de uygulama izleme ve tanılama için önerilen platformudur.

Application Insights kaynağı oluşturmak için Azure Portal'a gidin. Sol gezinti menüsünde Kaynak oluştur'u seçerek Azure Market açın. İzleme + Yönetim'i ve ardından Application Insights'ı seçin.

Yeni AI kaynağı oluşturma

Şimdi oluşturulacak kaynağın öznitelikleri hakkındaki bilgileri doldurmanız gerekir. Uygun Ad, Kaynak Grubu ve Abonelik bilgilerini girin. Konum olarak gelecekte Service Fabric kümenizi dağıtabileceğiniz yeri ayarlayın. Bu öğreticide, uygulamayı yerel kümede dağıtacağımız için Konum alanı bizim konumuzla ilgili değildir. Uygulama Türü "ASP.NET web uygulaması" olarak bırakılmalıdır.

AI kaynak öznitelikleri

Gerekli bilgileri doldurduktan sonra kaynağı sağlamak için Oluştur'u seçin. Bu işlem yaklaşık bir dakika sürer.

Uygulamanın hizmetlerine Application Insights ekleme

Başlat Menüsünde Visual Studio simgesine sağ tıklayıp Yönetici olarak çalıştır'ı seçerek Visual Studio 2019'u yükseltilmiş ayrıcalıklarla başlatın. Dosya>Proje/ÇözümAç'ı> seçin ve Oylama uygulamasına gidin (öğreticinin birinci bölümünde oluşturulmuş veya git kopyalanmış). Voting.sln dosyasını açın. Uygulamanın NuGet paketlerini geri yüklemeniz istenirse Evet'i seçin.

Application Insights'ı hem VotingWeb hem de VotingData hizmetleri için yapılandırmak için şu adımları izleyin:

  1. Hizmetin adına sağ tıklayın ve Application Insights ile Bağlı Hizmetler > İzleme Ekle'yi >seçin.

    AI kaynağını yapılandırma

Not

Proje türüne bağlı olarak, hizmetin adına sağ tıkladığınızda Ekle-> Application Insights Telemetrisi ... seçeneğini belirlemeniz gerekebilir.

  1. Başlarken'i seçin.

  2. Azure aboneliğiniz için kullandığınız hesapta oturum açın ve Application Insights kaynağını oluşturduğunuz aboneliği seçin. "Kaynak" açılan listesindeki Mevcut Application Insights kaynağı'nın altında kaynağı bulun. Hizmetinize Application Insights eklemek için Kaydet'i seçin.

    AI kaynağını kaydetme

  3. Açılan iletişim kutusu eylemi tamamladığında Son'a tıklayın.

Not

Uygulamanızda Application Insights'ı yapılandırmayı tamamlamak için uygulamanın her iki hizmeti için de yukarıdaki adımları gerçekleştirdiğinizden emin olun. Hizmetler arasındaki gelen ve giden istekleri ve iletişimi görmek için her iki hizmette de aynı Application Insights kaynağı kullanılır.

Hizmetlere Microsoft.ApplicationInsights.ServiceFabric.Native NuGet'ini ekleme

Application Insights'ın senaryoya bağlı olarak kullanılabilecek Service Fabric'e özgü iki NuGet'i vardır. Biri Service Fabric'in yerel hizmetleriyle, diğeri de kapsayıcılar ve konuk yürütülebilir dosyalarıyla kullanılır. Bizim durumumuzda, getirdiği hizmet bağlamı anlayışından yararlanmak için Microsoft.ApplicationInsights.ServiceFabric.Native NuGet'ini kullanacağız. Application Insights SDK'sı ve Service Fabric'e özgü NuGet paketleri hakkında daha fazla bilgi için bkz. Service Fabric için Microsoft Application Insights.

NuGet paketini ayarlama adımları şunlardır:

  1. Çözüm Gezgini üst kısmındaki Çözüm 'Oylama' seçeneğine sağ tıklayın ve Çözüm için NuGet Paketlerini Yönet... seçeneğini belirleyin.
  2. "NuGet - Çözüm" penceresinin üst gezinti menüsünde Gözat'ı seçin ve arama çubuğunun yanındaki Ön sürümü ekle kutusunu işaretleyin.

Not

Application Insights paketini yüklemeden önce, önceden yüklenmemişse Microsoft.ServiceFabric.Diagnostics.Internal paketini benzer şekilde yüklemeniz gerekebilir

  1. Uygun NuGet paketini arayın Microsoft.ApplicationInsights.ServiceFabric.Native ve seçin.

  2. Sağ tarafta, uygulamadaki iki hizmetin yanındaki VotingWeb ve VotingData onay kutularını işaretleyin ve Yükle'yi seçin. AI sdk Nuget

  3. Görüntülenen Değişiklikleri Önizle iletişim kutusunda Tamam'ı seçin ve Lisans Kabulü'nü kabul edin. Bu noktada NuGet'i hizmetlere ekleme işlemi tamamlanır.

  4. Şimdi iki hizmette telemetri başlatıcısını ayarlamanız gerekir. Bunu yapmak için VotingWeb.cs ve VotingData.cs'yi açın. Her ikisinde de aşağıdaki iki adımı izleyin:

    1. Bu iki using deyimini her <ServiceName.cs> dosyasının en üstüne, var olan using deyimlerinden sonra ekleyin:
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.ServiceFabric;
    
    1. Her iki dosyada da, CreateServiceInstanceListeners() veya CreateServiceReplicaListeners()öğesinin iç içe dönüş deyiminde, ConfigureServices>hizmetleri altında, bildirilen diğer tekil hizmetlerle birlikte şunları ekleyin:
    .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
    

    Bu, telemetrinize Hizmet Bağlamı ekleyerek Application Insights'da telemetrinizin kaynağını daha iyi anlamanızı sağlar. VotingWeb.cs'deki iç içe return deyiminiz şöyle görünmelidir:

    return new WebHostBuilder()
        .UseKestrel()
        .ConfigureServices(
            services => services
                .AddSingleton<HttpClient>(new HttpClient())
                .AddSingleton<FabricClient>(new FabricClient())
                .AddSingleton<StatelessServiceContext>(serviceContext)
                .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
        .UseUrls(url)
        .Build();
    

    Benzer biçimde, VotingData.cs'de şu bölüm olmalıdır:

    return new WebHostBuilder()
        .UseKestrel()
        .ConfigureServices(
            services => services
                .AddSingleton<StatefulServiceContext>(serviceContext)
                .AddSingleton<IReliableStateManager>(this.StateManager)
                .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
        .UseUrls(url)
        .Build();
    

Yukarıda gösterildiği gibi yönteminin UseApplicationInsights() hem VotingWeb.cs hem de VotingData.cs içinde çağrıldığını bir kez daha denetleyin.

Not

Bu örnek uygulama, hizmetlerin iletişim kurması için http’yi kullanır. Uzaktan İletişim V2 ile bir uygulama geliştirirseniz, yukarıdakiyle aynı yere aşağıdaki kod satırlarını da eklemeniz gerekir

ConfigureServices(services => services
    ...
    .AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
    .AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)

Bu noktada uygulamayı dağıtmaya hazırsınız. En üstten (veya F5'te) Başlat'ı seçtiğinizde Visual Studio uygulamayı derleyip paketler, yerel kümenizi ayarlar ve uygulamayı buna dağıtır.

Not

.NET Core SDK'sının güncel bir sürümü yüklü değilse derleme hatası alabilirsiniz.

Uygulamanın dağıtımı tamamlandıktan sonra Voting Sample tek sayfalı uygulamasını görebilmeniz için adresine gidin localhost:8080. İstediğiniz birkaç farklı öğeye oy vererek biraz örnek veri ve telemetri oluşturun; ben burada tatlıları seçtim!

AI örnek oyları

Birkaç oy eklemeyi tamamladığınızda, bazı oylama seçeneklerini de rahatça kaldırabilirsiniz.

Application Insights'da telemetriyi ve Uygulama haritasını görüntüleme

Azure portalında Application Insights kaynağınıza gidin.

Kaynağınızın giriş sayfasına dönmek için Genel Bakış'ı seçin. Ardından, gelen izlemeleri görmek için üst kısımdaki Ara'yı seçin. İzlemelerin Application Insights'da gösterilmesi birkaç dakika sürer. Hiç izleme görmüyorsanız, bir dakika bekleyin ve üst kısımdaki Yenile düğmesine tıklayın. Yapay zeka izlemeleri görme

Arama penceresini aşağı kaydırarak Application Insights'la size hazır sağlanan tüm gelen telemetriyi görebilirsiniz. Oylama uygulamasında gerçekleştirdiğiniz her eylem için VotingWeb hizmetinden bir giden PUT isteği (PUT Votes/Put [ad]) ve VotingData hizmetinden bir gelen PUT isteği (PUT VoteData/Put [ad]) olmalı, bunları görüntülenen verileri yenilemek için bir çift GET isteği izlemelidir. Ayrıca, bunlar HTTP istekleri olduğundan bir de localhost'ta HTTP için bağımlılık izlemesi olacaktır. Aşağıda, bir onun nasıl eklendiğine ilişkin olarak göreceğiniz bir örnek verilmiştir:

AI örnek istek izlemesi

İzlemelerden birini seçerek bu izleme hakkında daha fazla ayrıntı görüntüleyebilirsiniz. İstekle ilgili Application Insights tarafından sağlanan Yanıt Süresi ve İstek URL'si gibi yararlı bilgiler vardır. Buna ek olarak, Service Fabric'e özgü NuGet'i eklediğiniz için aşağıdaki Özel Veriler bölümünde uygulamanız hakkında Service Fabric kümesi bağlamındaki verileri de alacaksınız. Hizmet bağlamı da bunlar arasında yer alır; dolayısıyla isteğin kaynağının PartitionID ve ReplicaId değerlerini görebilir ve uygulamanızda hataları tanılarken sorunları daha iyi yerelleştirebilirsiniz.

AI izleme ayrıntıları

Ayrıca, Genel Bakış sayfasının sol menüsünde Uygulama haritası'nı seçebilir veya sizi bağlı iki hizmetinizin gösterildiği Uygulama Haritası'na götürmek için Uygulama haritası simgesini seçebilirsiniz.

Soldaki menüde Uygulama haritası'nı vurgulayan ekran görüntüsü.

Uygulama haritası, özellikle birlikte çalışan birden çok farklı hizmet eklemeye başlarken uygulamanızın topolojisini daha iyi anlamanıza yardımcı olabilir. Ayrıca istek başarı oranlarıyla ilgili temel verileri sağlar ve başarısız isteklerde nedene sorun olduğunu anlayabilmeniz için tanılamada size yardımcı olabilir. Uygulama haritası kullanma hakkında daha fazla bilgi edinmek için bkz. Application Insights'da Uygulama Haritası.

Uygulamanıza özel izleme ekleme

Application Insights hazır durumda çok miktarda telemetri sağlıyor olsa da başka özel izlemeler eklemek isteyebilirsiniz. Bu iş gereksinimleriniz temelinde olabileceği gibi, uygulamanızda işler yolunda gitmediğinde tanılamayı geliştirme amacıyla da olabilir. Application Insights'ın özel olayları ve ölçümleri almak için bir API'si vardır. Bu API hakkında burada daha fazla bilgi bulabilirsiniz.

Şimdi temel votesDictionary içinde oyların ne zaman eklendiğini ve silindiğini izlemek için VoteDataController.cs'ye (VotingData>Denetleyiciler'in altında) bazı özel olaylar ekleyelim.

  1. Diğer using deyimlerinin sonuna using Microsoft.ApplicationInsights; ekleyin.
  2. Sınıfın başında, IReliableStateManager oluşturmanın altında yeni bir TelemetryClient bildirimi ekleyin: private TelemetryClient telemetry = new TelemetryClient();.
  3. Put() işlevinde, bir oy eklendiğini onaylayan bir olay ekleyin. İşlem tamamlandıktan sonra, dönüş OkResult deyiminin hemen altına telemetry.TrackEvent($"Added a vote for {name}"); ekleyin.
  4. Delete() işlevinde, votesDictionary'nin belirli bir oylama seçeneği için oy içermesi koşuluna dayanan bir "if/else" vardır.
    1. if deyimine, await tx.CommitAsync() öğesinden sonra silme işlemini onaylayan bir olay ekleyin: telemetry.TrackEvent($"Deleted votes for {name}");
    2. else deyimine, dönüş deyiminden önce silme işleminin yapılmadığını gösteren bir olay ekleyin: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

İşte olayları ekledikten sonra Put() ve Delete() işlevlerinizin nasıl görünebileceğini gösteren bir örnek:

// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
        await tx.CommitAsync();
    }

    telemetry.TrackEvent($"Added a vote for {name}");
    return new OkResult();
}

// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        if (await votesDictionary.ContainsKeyAsync(tx, name))
        {
            await votesDictionary.TryRemoveAsync(tx, name);
            await tx.CommitAsync();
            telemetry.TrackEvent($"Deleted votes for {name}");
            return new OkResult();
        }
        else
        {
            telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
            return new NotFoundResult();
        }
    }
}

Bu değişiklikleri yapmayı tamamladığınızda, en son sürümünü derlemesi ve dağıtması için uygulamayı başlatın. Uygulamanın dağıtımı tamamlandıktan sonra adresine gidin localhost:8080ve bazı oylama seçeneklerini ekleyip silin. Ardından, en son çalıştırmanın izlemelerini görmek için Application Insights kaynağınıza dönün (daha önce olduğu gibi, izlemelerin Application Insights'ta görünmesi 1-2 dakika sürebilir). Eklediğiniz ve sildiğiniz tüm oylar için, artık tüm yanıt telemetrisiyle birlikte "Özel Olay* ifadesini görüyor olmalısınız.

özel olaylar

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  • Uygulamanız için Application Insights’ı yapılandırma
  • Hizmetler arasındaki HTTP tabanlı iletişimi izlemek için yanıt telemetrisi toplama
  • Application Insights'da Uygulama Haritası özelliğini kullanma
  • Application Insights API kullanarak özel olaylar ekleme

artık ASP.NET uygulamanız için izleme ve tanılamayı ayarladığınıza göre aşağıdakileri deneyin: