Öğ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:
- .NET Service Fabric uygulaması oluşturma
- Uygulamayı uzak kümeye dağıtma
- Bir ASP.NET Core ön uç hizmetine HTTPS uç noktası ekleme
- Azure Pipelines kullanarak CI/CD'yi yapılandırma
- Uygulama için izleme ve tanılamayı ayarlama (bu öğretici)
Önkoşullar
Bu öğreticiye başlamadan önce:
- Azure aboneliğiniz yoksa ücretsiz hesap oluşturun.
- Azure geliştirme iş yükü ile ASP.NET ve web geliştirme iş yükü dahil olmak üzere Visual Studio 2019'u yükleyin.
- Service Fabric SDK'yı yükleyin.
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.
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.
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:
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'yi ve ardından Application Insights Telemetrisi'ni seçmeniz gerekebilir.
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. 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.
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:
Çö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.
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.
Microsoft.ApplicationInsights.ServiceFabric.Native için arama yapın ve NuGet paketini seçin.
Sağ bölmede VotingWeb onay kutusunu ve VotingData onay kutusunu seçin. Yükle'yi seçin.
Değişiklikleri Önizle iletişim kutusunda Tamam'ı seçerek lisansı kabul edin. NuGet paketleri hizmetlere eklenir.
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:
Var olan
using
deyimlerden sonra her dosyanın en üstüne şu ikiusing
deyimi ekleyin:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.ServiceFabric;
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.cs iç içereturn
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!
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 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:
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.
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.
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 votesDictionary
oyların ne zaman eklendiğini ve silindiğini izlemek için VoteDataController.cs (içinde>Controllers
VotingData
) öğesine bazı özel olaylar ekleyin:
Diğer
using
deyimlerin sonuna ekleyinusing Microsoft.ApplicationInsights;
.öğesinin oluşturulması
IReliableStateManager
private TelemetryClient telemetry = new TelemetryClient();
altında, sınıfının başında içinTelemetryClient
yeni bir değer bildirin.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}");
.içinde
Delete()
, belirli bir oylama seçeneği için oy içerenvotesDictionary
koşula dayalı bir "if/else" vardır.- deyiminde bir oylamanın
if
silinmesini onaylayan bir olay ekleyin, sonraawait tx.CommitAsync()
:telemetry.TrackEvent($"Deleted votes for {name}");
- Silme işleminin deyiminden önce
return
deyimindeelse
gerçekleşmediğini göstermek için bir olay ekleyin:telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
- deyiminde bir oylamanın
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:8080
gidin. 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.
İlgili içerik
- Service Fabric'te izleme ve tanılama hakkında daha fazla bilgi edinin.
- Application Insights'ı kullanarak Service Fabric olay analizini gözden geçirin.
- Application Insights hakkında daha fazla bilgi edinin.