Öğ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:
- .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'u yükleyin ve Azure geliştirme ile ASP.NET ve web geliştirme iş yüklerini yükleyin.
- Service Fabric SDK'sını yükleme
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.
Ş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. 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:
Hizmetin adına sağ tıklayın ve Application Insights ile Bağlı Hizmetler > İzleme Ekle'yi >seçin.
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.
Başlarken'i 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 Kaydet'i 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'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:
- Çö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.
- "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
Uygun NuGet paketini arayın
Microsoft.ApplicationInsights.ServiceFabric.Native
ve seçin.Sağ tarafta, uygulamadaki iki hizmetin yanındaki VotingWeb ve VotingData onay kutularını işaretleyin ve Yükle'yi 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 her <ServiceName.cs> dosyasının en üstüne, var olan using deyimlerinden sonra ekleyin:
using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
- 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!
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.
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:
İ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.
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.
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 adresine gidin localhost:8080
ve 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.
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:
- 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