Öğ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 ASP.NET Core bir uygulama için izleme ve tanılamayı yapılandırma adımlarını adım adım açıklar. Öğ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:
- .NET Service Fabric uygulaması oluşturma
- Uygulamayı uzak kümeye dağıtma
- ASP.NET Core ön uç hizmetine HTTPS uç noktası ekleme
- Azure Pipelines kullanarak CI/CD yapılandırma
- Uygulama için izleme ve tanılamayı ayarlama
Önkoşullar
Bu öğreticiye başlamadan önce:
- Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun
- Visual Studio 2019 ' i yükleyip Azure geliştirme ve ASP.net ve Web geliştirme iş yüklerini yüklersiniz.
- Service Fabric SDK 'sını yükler
Voting örnek uygulamasını indirme
Bu öğretici serisinin birinci kısmındaoylama örnek uygulamasını 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 Marketi ' ni açın. İzleme ve yönetim ve ardından Application Insights seçin.

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

Gerekli bilgileri doldurduktan sonra, kaynağı sağlamak için Oluştur ' u seçin; 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 ' i yükseltilmiş ayrıcalıklarla başlatın. Dosya > Aç > Proje/çözüm ' ü seçin ve oylama uygulamasına gidin (öğreticinin veya git kopyalanan bölümünde oluşturulur). Oylama. sln'yi açın. Uygulamanın NuGet paketlerini geri yüklemeniz istenirse Evet' i seçin.
Hem VotingWeb hem de VotingData Hizmetleri için Application Insights yapılandırmak için aşağıdaki adımları izleyin:
Hizmetin adına sağ tıklayın ve Application Insights ile > izleme > bağlı hizmetleri Ekle' yi seçin.

Not
Proje türüne bağlı olarak, hizmetin adına sağ tıkladığınızda, Add-> Application Insights Telemetri... seçeneğini belirlemeniz gerekebilir.
Kullanmaya başlayın ' ı seçin.
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 Kaydol ' u seçin.

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 ve Service Fabric özgü NuGet paketleri hakkında daha fazla bilgi edinmek için bkz. Microsoft Application Insights Service Fabric için.
NuGet paketini ayarlama adımları aşağıda verilmiştir:
- Çözüm Gezgini en üstündeki ' oylama ' çözümüne sağ tıklayın ve çözüm Için NuGet Paketlerini Yönet... seçeneğini belirleyin.
- "NuGet-çözüm" penceresinin üst gezinti menüsünde göz at ' ı seçin ve arama çubuğunun yanındaki ön sürümü dahil et kutusunu işaretleyin.
Not
Application Insights paketini yüklemeden önce, önceden yüklenmemişse Microsoft.ServiceFabric.Diagnostics.Internal paketini benzer şekilde yüklemeniz gerekebilir
Microsoft.ApplicationInsights.ServiceFabric.NativeUygun NuGet paketini arayın ve seçin.Sağ tarafta, uygulamadaki iki hizmetin yanında bulunan iki onay kutusunu seçin ve sonra da Install ' ı seçin.

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.
Ş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:
- Bu iki using deyimini, var olan using deyimlerinden sonra her <ServiceName> . cs' nin üst kısmına ekleyin:
using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;- Her iki dosyada, createserviceınstancelisteners () veya CreateServiceReplicaListeners () iç içe geçmiş Return ifadesinde, ConfigureServices > Services altında, belirtilen diğer hizmet ile, şunu 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();
UseApplicationInsights()Metodun, yukarıda gösterildiği gibi Votingweb. cs ve votingdata. cs içinde çağrıldığından emin olun.
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 üstte (veya F5) Başlat ' ı seçin ve Visual Studio uygulamayı derleyip paketleyebilir, yerel kümenizi ayarlar ve uygulamayı buna dağıtır.
Not
.NET Core SDK yüklü olan güncel bir sürümüne sahip değilseniz, derleme hatası alabilirsiniz.
Uygulamanın dağıtımı tamamlandıktan sonra, localhost:8080 Oylama örnek tek sayfalı uygulamayı görmeniz gereken yere gidin. İstediğiniz birkaç farklı öğeye oy vererek biraz örnek veri ve telemetri oluşturun; ben burada tatlıları seçtim!

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 geri dönmek için Genel Bakış ' ı seçin. Ardından en üstteki Ara ' yı seçerek içindeki izlemeleri görüntüleyin. İ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.

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. İşte bir oyun nasıl eklendiği hakkında bir örnek aşağıda verilmiştir:

İzlemelerden birini seçerek, 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.

Ayrıca, Genel Bakış sayfasındaki sol menüden uygulama Haritası ' nı seçebilir veya uygulama Haritası simgesini seçerek iki hizmetlerinizin bağlı olduğunu gösteren uygulama haritasını kullanabilirsiniz.

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.
- Diğer using deyimlerinin sonuna
using Microsoft.ApplicationInsights;ekleyin. - Sınıfın başında, IReliableStateManager oluşturmanın altında yeni bir TelemetryClient bildirimi ekleyin:
private TelemetryClient telemetry = new TelemetryClient();. - 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. - Delete() işlevinde, votesDictionary'nin belirli bir oylama seçeneği için oy içermesi koşuluna dayanan bir "if/else" vardır.
- if deyimine, await tx.CommitAsync() öğesinden sonra silme işlemini onaylayan bir olay ekleyin:
telemetry.TrackEvent($"Deleted votes for {name}"); - 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");
- if deyimine, await tx.CommitAsync() öğesinden sonra silme işlemini onaylayan bir olay ekleyin:
İş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, üzerine gidin localhost:8080 ve bazı oylama seçeneklerini ekleyin ve silin. Ardından, son çalıştırmanın izlemelerini görmek için Application Insights kaynağına geri dönün (daha önce olduğu gibi, izlemelerin Application Insights görünmesi için 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.

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
ASP.NET uygulamanız için izleme ve tanılamayı ayarladığınıza göre, şunları deneyin:
- Service Fabric'te izleme ve tanılamayı daha ayrıntılı inceleyin
- Application Insights ile Service Fabric olay analizi
- Application Insights hakkında daha fazla bilgi edinmek için bkz. Application Insights Belgeleri