Aracılığıyla paylaş


Öğretici: Application Insights kullanarak Service Fabric uygulamasını izleme ve tanılama

Bu öğretici, serinin beşinci bölümüdür. Application Insights'ı kullanarak Azure 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. Öğretici serisinin birinci bölümünde geliştirilen uygulamadan telemetri toplarsınız.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Application Insights kaynağını ayarlama
  • Uygulamanın hizmetlerine Application Insights ekleme
  • Application Insights'ta telemetriyi ve Uygulama Haritasını görüntüleme
  • Uygulamanıza özel izleme ekleme

Öğretici serisi şunların nasıl yapılacağını gösterir:

Ö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. Bir komut penceresinde veya terminalde aşağıdaki komutu çalıştırarak örnek uygulama deposunu yerel bilgisayarınıza kopyalayın:

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

Application Insights kaynağını ayarlama

Application Insights, Azure uygulama performansı yönetim platformudur. Service Fabric'te uygulama izleme ve tanılama için Application Insights'ı kullanmanızı öneririz.

Application Insights kaynağı oluşturmak için Azure portalına gidin. Kaynak oluştur’u seçin. Portal menüsünde İzleme + Tanılama'yı seçin. Popüler Azure hizmetleri sütunundaki Application Insights'ın altında Oluştur'u seçin.

Yeni bir Application Insights kaynağı oluşturma adımlarını gösteren ekran görüntüsü.

Abonelik, Kaynak grubu ve Ad değerlerini girin veya seçin. Bölge için gelecekte Service Fabric kümenizi nereye dağıtabileceğinizi seçin. Bu öğreticide, uygulamayı yerel bir kümeye dağıtacağız, bu nedenle Azure bölgesi ilgisizdir. Uygulama türü için ASP.NET web uygulaması olarak bırakın.

Application Insights kaynak özniteliklerini gösteren ekran görüntüsü.

Gerekli bilgileri girdiğinizde veya seçtiğinizde, kaynağı sağlamak için Oluştur'u seçin. Kaynak yaklaşık bir dakika içinde dağıtılır.

Uygulamanın hizmetlerine Application Insights ekleme

Yönetici olarak çalıştır seçeneğini kullanarak Visual Studio 2019'u açın (Başlat menüsünde Visual Studio simgesine sağ tıklayın). Dosya>Proje/Çözüm Aç'ı>seçin ve Oylama uygulamasına gidin (öğreticinin birinci bölümünde oluşturulur veya GitHub'dan kopyalanmıştır). Voting.sln'i açın. Uygulamanın NuGet paketlerini geri yüklemeniz istenirse Evet'i seçin.

VotingWeb ve VotingData hizmetleri için Application Insights'ı yapılandırmak için:

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

    Application Insights hizmetlerini yapılandırmayı gösteren ekran görüntüsü.

    Not

    Proje türüne bağlı olarak, hizmetin adına sağ tıkladığınızda Ekle'yi ve ardından Application Insights Telemetrisi'ni seçmeniz gerekebilir.

  2. Başlayın'ı seçin.

  3. Azure aboneliğiniz için kullandığınız hesapta oturum açın ve Application Insights kaynağını oluşturduğunuz aboneliği seçin. Kaynağı bulmak için Kaynak bölümünde Mevcut Application Insights kaynağına gidin. Hizmetinize Application Insights eklemek için Kaydet'i seçin.

    Application Insights'ın nasıl kaydedildiğini gösteren ekran görüntüsü.

  4. Bitir'iseçin.

Not

Uygulama için Application Insights'ı yapılandırmayı tamamlamak üzere uygulamadaki her iki hizmet için de bu adımları uyguladığından 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,senaryoya bağlı olarak kullanabileceğiniz Service Fabric'e özgü iki NuGet paketine sahiptir. Biri Service Fabric yerel hizmetleriyle, diğeri kapsayıcılar ve konuk yürütülebilir dosyalarıyla kullanılır. Bu durumda, hizmet bağlamı hakkında bilgi edinmek için Microsoft.ApplicationInsights.ServiceFabric.Native NuGet paketini kullanırı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 ayarlamak için:

  1. Çözüm Gezgini'da Çözüm 'Oylama' seçeneğine sağ tıklayın ve Çözüm için NuGet Paketlerini Yönet'i seçin.

  2. NuGet - Çözüm iletişim kutusunda Gözat'ı seçin. Ön sürümü dahil et onay kutusunu seçin.

    Not

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

  3. Microsoft.ApplicationInsights.ServiceFabric.Native için arama yapın ve NuGet paketini seçin.

  4. Sağ bölmede VotingWeb onay kutusunu ve VotingData onay kutusunu seçin. Yükle'yi seçin.

    NuGet'teki Application Insights SDK'sını gösteren ekran görüntüsü.

  5. Değişiklikleri Önizle iletişim kutusunda Tamam'ı seçerek lisansı kabul edin. NuGet paketleri hizmetlere eklenir.

  6. Ardından, iki hizmette telemetri başlatıcısını ayarlayın. VotingWeb.cs ve VotingData.cs açın. Her iki kod dosyasında da aşağıdaki adımları tamamlayın:

    1. Var olan using deyimlerden sonra her dosyanın en üstüne şu iki using deyimi ekleyin:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. Her iki dosyada da veya 'nin iç içe return deyiminde, altındaservices>ConfigureServices, diğer tekil hizmetler bildirilmiş şekilde şunları ekleyin:CreateServiceInstanceListeners() CreateServiceReplicaListeners()

      .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
      

      Bu kod telemetrinize eklediği Service Context için Application Insights'ta telemetrinizin kaynağını daha iyi anlayabilirsiniz. VotingWeb.csiçe return deyiminiz şu örneğe benzer:

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

VotingData.cs'da kodunuz şu örneğe benzer:

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

Yöntemin UseApplicationInsights() örneklerde gösterildiği gibi hem VotingWeb.cs hem de VotingData.cs çağrıldığını bir kez daha denetleyin.

Not

Bu örnek uygulama, hizmetlerin iletişim kurması için HTTP kullanır. Service Fabric Service Remoting V2 kullanarak bir uygulama geliştirirseniz kodda aynı konuma aşağıdaki satırları da ekleyin:

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

Bu noktada, uygulamayı dağıtmaya hazırsınız. Başlangıç'ı seçin (veya F5'i seçin). Visual Studio uygulamayı derler ve paketler, yerel kümenizi ayarlar ve uygulamayı kümeye dağıtır.

Not

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

Uygulama dağıtıldığında, Oylama Örneği tek sayfalı uygulamasının çalıştığı konumuna gidin localhost:8080. Örnek veriler ve telemetri oluşturmak için seçtiğiniz birkaç farklı öğeye oy verin. Örneğin, tatlılar!

Tatlı türlerine oy verme örneğini gösteren ekran görüntüsü.

Ayrıca, birkaç oy eklemeyi bitirdiğinizde oylama seçeneklerinden bazılarını kaldırabilirsiniz.

Application Insights'ta telemetriyi ve Uygulama Haritasını görüntüleme

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

Kaynağınızın genel bakış bölmesine dönmek için Genel Bakış'ı seçin. Gelen izlemeleri görmek için Ara'yı seçin. İzlemelerin Application Insights'da gösterilmesi birkaç dakika sürer. herhangi bir izleme görmüyorsanız, bir dakika bekleyin ve yenile düğmesini seçin.

Application Insights'ın izlemeler görünümünü gördüğünü gösteren ekran görüntüsü.

Application Insights ile birlikte gelen tüm telemetri verilerini görüntülemek için arama penceresinde aşağı kaydırın. Oylama uygulamasında yaptığınız her eylem için VotingWeb'den giden bir PUT isteği (PUT Votes/Put [name]), VotingData'dan gelen put isteği (PUT VoteData/Put [name] ) ve ardından görüntülenen verileri yenilemek için bir çift GET isteği olmalıdır. Bu istekler HTTP istekleri olduğundan http localhost için bir bağımlılık izlemesi de olacaktır. Aşağıda, bir onun nasıl eklendiğine ilişkin bir örnek verilmiştir:

Application Insights'ta örnek istek izlemeyi gösteren ekran görüntüsü.

Daha fazla ayrıntı görmek için bir izleme seçebilirsiniz. Application Insights, Yanıt süresi ve İstek URL'si değerleri de dahil olmak üzere istek hakkında yararlı bilgiler içerir. Service Fabric'e özgü NuGet'i eklediğinizden, Özel Veriler bölümündeki Service Fabric kümesi bağlamında uygulamanızla ilgili verileri de alırsınız. Veriler hizmet bağlamını içerir, böylece isteğin kaynağının PartitionID ve ReplicaId değerlerini görebilir ve uygulamanızdaki hataları tanıladığınızda sorunları daha iyi yalıtabilirsiniz.

Application Insights izleme ayrıntılarını gösteren ekran görüntüsü.

Uygulama Haritası'na gitmek için Genel Bakış bölmesindeki kaynak menüsünde Uygulama haritası'nı seçin veya Uygulama haritası simgesini seçin. Harita, bağlı iki hizmetinizi gösterir.

Kaynak menüsünde Uygulama eşlemesini vurgulayan ekran görüntüsü.

Uygulama Haritası, özellikle birlikte çalışan hizmetler eklemeye başladığınızda uygulama topolojinizi daha iyi anlamanıza yardımcı olabilir. Ayrıca istek başarı oranları hakkında temel veriler sunar ve işlerin nerede yanlış gittiğini anlamak için başarısız isteği tanılamanıza yardımcı olabilir. Daha fazla bilgi edinmek için bkz . Application Insights'ta Uygulama Haritası.

Uygulamanıza özel izleme ekleme

Application Insights telemetriyi kullanıma hazır olarak sağlasa da, özel izleme eklemek isteyebilirsiniz. Özel izleme için iş gereksinimleriniz olabilir veya uygulamanızda sorun olduğunda tanılamayı geliştirmek isteyebilirsiniz. Application Insights API'sini kullanarak özel olayları ve ölçümleri alabilirsiniz.

Ardından, temel alınan votesDictionaryoyların ne zaman eklendiğini ve silindiğini izlemek için VoteDataController.cs (içinde>ControllersVotingData) öğesine bazı özel olaylar ekleyin:

  1. Diğer using deyimlerin sonuna ekleyinusing Microsoft.ApplicationInsights;.

  2. öğesinin oluşturulması IReliableStateManagerprivate TelemetryClient telemetry = new TelemetryClient();altında, sınıfının başında için TelemetryClient yeni bir değer bildirin.

  3. işlevinde Put() , oy eklendiğini onaylayan bir olay ekleyin. İşlem tamamlandıktan sonra, dönüş OkResult deyiminden hemen önce ekleyintelemetry.TrackEvent($"Added a vote for {name}");.

  4. içinde Delete(), belirli bir oylama seçeneği için oy içeren votesDictionary koşula dayalı bir "if/else" vardır.

    1. deyiminde bir oylamanın if silinmesini onaylayan bir olay ekleyin, sonra await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Silme işleminin deyiminden önce return deyiminde else gerçekleşmediğini göstermek için bir olay ekleyin:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Olayları ekledikten sonra ve Delete() işlevlerinizin Put() nasıl görünebileceğine ilişkin bir örnek aşağıda verilmiştir:

// 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ı bitirdiğinizde, uygulamanın en son sürümü oluşturup dağıtabilmesi için Uygulamada Başlat'ı seçin. Uygulamanın dağıtımı tamamlandığında adresine localhost:8080gidin. Bazı oylama seçeneklerini ekleyin ve silin. Ardından, en son çalıştırmanın izlemelerini görmek için Application Insights kaynağınıza dönün (izlemelerin Application Insights'ta görünmesi 1 ila 2 dakika sürer). Eklediğiniz ve sildiğiniz tüm oylar için artık özel olay için ilişkili yanıt telemetrisi içeren bir girdi görmeniz gerekir.

Özel olayları gösteren ekran görüntüsü.