EventFlow kullanarak olay toplama ve toplama
Microsoft Tanılama EventFlow , olayları bir düğümden bir veya daha fazla izleme hedefine yönlendirebilir. Hizmet projenize bir NuGet paketi olarak eklendiğinden EventFlow kodu ve yapılandırma hizmetiyle birlikte hareket eder ve Azure Tanılama hakkında daha önce bahsedilen düğüm başına yapılandırma sorununu ortadan kaldırır. EventFlow, hizmet sürecinizde çalışır ve doğrudan yapılandırılan çıkışlara bağlanır. Doğrudan bağlantı nedeniyle EventFlow Azure, kapsayıcı ve şirket içi hizmet dağıtımları için çalışır. EventFlow'u kapsayıcı gibi yüksek yoğunluklu senaryolarda çalıştırırsanız dikkatli olun çünkü her EventFlow işlem hattı bir dış bağlantı oluşturur. Bu nedenle, birkaç işlem barındırıyorsanız, birkaç giden bağlantı elde edersiniz! Bir çalıştırmanın ServiceType
tüm çoğaltmaları aynı işlemde olduğundan ve giden bağlantı sayısını sınırladığından, bu Durum Service Fabric uygulamaları için o kadar önemli değildir. EventFlow, yalnızca belirtilen filtreyle eşleşen olayların gönderilmesi için olay filtreleme de sunar.
EventFlow'un ayarlanması
EventFlow ikili dosyaları nuget paketleri kümesi olarak kullanılabilir. Service Fabric hizmet projesine EventFlow eklemek için, Çözüm Gezgini projeye sağ tıklayın ve "NuGet paketlerini yönet"i seçin. "Gözat" sekmesine geçin ve "Diagnostics.EventFlow
" araması yapın:
"Girişler" ve "Çıkışlar" etiketli çeşitli paketlerin bir listesini görürsünüz. EventFlow, çeşitli farklı günlük sağlayıcılarını ve çözümleyicilerini destekler. EventFlow barındıran hizmet, uygulama günlüklerinin kaynağına ve hedefine bağlı olarak uygun paketleri içermelidir. Temel ServiceFabric paketine ek olarak, en az bir Giriş ve Çıkış'ın yapılandırılmış olması gerekir. Örneğin, EventSource olaylarını Application Insights'a göndermek için aşağıdaki paketleri ekleyebilirsiniz:
Microsoft.Diagnostics.EventFlow.Inputs.EventSource
hizmetin EventSource sınıfından ve Microsoft-ServiceFabric-Services ve Microsoft-ServiceFabric-Actors gibi standart EventSources'tan veri yakalamak için)Microsoft.Diagnostics.EventFlow.Outputs.ApplicationInsights
(günlükleri bir Azure Uygulaması lication Insights kaynağına göndereceğiz)Microsoft.Diagnostics.EventFlow.ServiceFabric
(Service Fabric hizmet yapılandırmasından EventFlow işlem hattının başlatılmasını etkinleştirir ve tanılama verilerini Service Fabric sistem durumu raporları olarak göndermeyle ilgili sorunları bildirir)
Not
Microsoft.Diagnostics.EventFlow.Inputs.EventSource
paketi, hizmet projesinin .NET Framework 4.6 veya daha yeni bir sürümü hedeflemesini gerektirir. Bu paketi yüklemeden önce proje özelliklerinde uygun hedef çerçeveyi ayarladığınızdan emin olun.
Tüm paketler yüklendikten sonra, sonraki adım hizmette EventFlow'u yapılandırmak ve etkinleştirmektir.
Günlük toplamayı yapılandırma ve etkinleştirme
Günlükleri göndermekten sorumlu EventFlow işlem hattı, yapılandırma dosyasında depolanan bir belirtimden oluşturulur. Paket, Microsoft.Diagnostics.EventFlow.ServiceFabric
çözüm klasörünün altına PackageRoot\Config
adlı eventFlowConfig.json
bir başlangıç EventFlow yapılandırma dosyası yükler. Bu yapılandırma dosyasının, varsayılan hizmet EventSource
sınıfından verileri ve yapılandırmak istediğiniz diğer girişleri yakalamak ve verileri uygun yere göndermek için değiştirilmesi gerekir.
Not
Proje dosyanızda VisualStudio 2017 biçimi eventFlowConfig.json
varsa, dosya otomatik olarak eklenmez. Bunu düzeltmek için klasöründeki dosyayı Config
oluşturun ve derleme eylemini olarak Copy if newer
ayarlayın.
Aşağıda yukarıda bahsedilen NuGet paketlerini temel alan örnek bir eventFlowConfig.json verilmiştir:
{
"inputs": [
{
"type": "EventSource",
"sources": [
{ "providerName": "Microsoft-ServiceFabric-Services" },
{ "providerName": "Microsoft-ServiceFabric-Actors" },
// (replace the following value with your service's ServiceEventSource name)
{ "providerName": "your-service-EventSource-name" }
]
}
],
"filters": [
{
"type": "drop",
"include": "Level == Verbose"
}
],
"outputs": [
{
"type": "ApplicationInsights",
// (replace the following value with your AI resource's instrumentation key)
"instrumentationKey": "00000000-0000-0000-0000-000000000000"
}
],
"schemaVersion": "2016-08-11"
}
Hizmetin ServiceEventSource adı, ServiceEventSource sınıfına uygulanan öğesinin EventSourceAttribute
Name özelliğinin değeridir. Tümü, hizmet kodunun ServiceEventSource.cs
bir parçası olan dosyada belirtilir. Örneğin, aşağıdaki kod parçacığında ServiceEventSource adı MyCompany-Application1-Stateless1 şeklindedir:
[EventSource(Name = "MyCompany-Application1-Stateless1")]
internal sealed class ServiceEventSource : EventSource
{
// (rest of ServiceEventSource implementation)
}
Dosyanın hizmet yapılandırma paketinin bir parçası olduğunu eventFlowConfig.json
unutmayın. Bu dosyada yapılan değişiklikler, Service Fabric yükseltme durumu denetimlerine ve yükseltme hatası olduğunda otomatik geri alma işlemlerine tabi olarak hizmetin tam veya yalnızca yapılandırma yükseltmelerine eklenebilir. Daha fazla bilgi için bkz . Service Fabric uygulama yükseltmesi.
Yapılandırmanın filtreler bölümü, EventFlow işlem hattında ilerleyecek bilgileri çıkışlara daha fazla özelleştirmenize olanak tanıyarak belirli bilgileri bırakmanıza veya eklemenize ya da olay verilerinin yapısını değiştirmenize olanak tanır. Filtreleme hakkında daha fazla bilgi için bkz . EventFlow filtreleri.
Son adım, dosyada bulunan Program.cs
hizmetinizin başlangıç kodunda EventFlow işlem hattının örneğini görüntülemektir:
using System;
using System.Diagnostics;
using System.Threading;
using Microsoft.ServiceFabric;
using Microsoft.ServiceFabric.Services.Runtime;
// **** EventFlow namespace
using Microsoft.Diagnostics.EventFlow.ServiceFabric;
namespace Stateless1
{
internal static class Program
{
/// <summary>
/// This is the entry point of the service host process.
/// </summary>
private static void Main()
{
try
{
// **** Instantiate log collection via EventFlow
using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("MyApplication-MyService-DiagnosticsPipeline"))
{
ServiceRuntime.RegisterServiceAsync("Stateless1Type",
context => new Stateless1(context)).GetAwaiter().GetResult();
ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Stateless1).Name);
Thread.Sleep(Timeout.Infinite);
}
}
catch (Exception e)
{
ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
throw;
}
}
}
}
yönteminin CreatePipeline
ServiceFabricDiagnosticsPipelineFactory
parametresi olarak geçirilen ad, EventFlow günlük koleksiyonu işlem hattını temsil eden sistem durumu varlığının adıdır. Bu ad, EventFlow ile karşılaşılır ve hata oluşursa ve Service Fabric sistem durumu alt sistemi aracılığıyla bildirilirse kullanılır.
eventFlowConfig'de Service Fabric ayarlarını ve uygulama parametrelerini kullanma
EventFlow, EventFlow ayarlarını yapılandırmak için Service Fabric ayarlarının ve uygulama parametrelerinin kullanılmasını destekler. Değerler için şu özel söz dizimlerini kullanarak Service Fabric ayarları parametrelerine başvurabilirsiniz:
servicefabric:/<section-name>/<setting-name>
<section-name>
, Service Fabric yapılandırma bölümünün adıdır ve <setting-name>
bir EventFlow ayarını yapılandırmak için kullanılacak değeri sağlayan yapılandırma ayarıdır. Bunun nasıl yapılacağını öğrenmek için Service Fabric ayarları ve uygulama parametreleri desteği konusuna gidin.
Doğrulama
Hizmetinizi başlatın ve Visual Studio'da Hata ayıklama çıkış penceresini inceleyin. Hizmet başlatıldıktan sonra, hizmetinizin yapılandırdığınız çıkışa kayıt gönderdiğine dair kanıt görmeye başlamalısınız. Olay analizi ve görselleştirme platformunuza gidin ve günlüklerin görünmeye başladığını onaylayın (birkaç dakika sürebilir).