EventFlow kullanarak olay toplama ve toplama

Microsoft Tanılama EventFlow , olayları bir düğümden bir veya daha fazla izleme hedefine yönlendirebilir. Hizmet projenize NuGet paketi olarak eklendiğinden EventFlow kodu ve yapılandırma hizmetiyle birlikte hareket eder ve daha önce Azure Tanılama hakkında 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 tüm çoğaltmaları aynı işlemde çalıştığından ServiceType ve bu da giden bağlantı sayısını sınırladığından, bu Durum Service Fabric uygulamaları için ö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:

Visual Studio NuGet paket yöneticisi kullanıcı arabiriminde EventFlow NuGet paketleri

"Girişler" ve "Çıkışlar" ile etiketlenmiş çeşitli paketlerin listesini görürsünüz. EventFlow çeşitli günlük sağlayıcılarını ve çözümleyicileri 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ış 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ı Insights kaynağına göndereceğiz)
  • Microsoft.Diagnostics.EventFlow.ServiceFabric(EventFlow işlem hattının Service Fabric hizmet yapılandırmasından başlatılmasını sağlar ve tanılama verilerini Service Fabric sistem durumu raporları olarak göndermeyle ilgili sorunları bildirir)

Not

Microsoft.Diagnostics.EventFlow.Inputs.EventSourcepaketi, hizmet projesinin 4.6 veya daha yeni .NET Framework 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.jsonbir 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 yakalamak 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 newerayarlayın.

Aşağıda yukarıda bahsedilen NuGet paketlerini temel alan bir eventFlowConfig.json örneği 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. Bunların tümü, hizmet kodunun ServiceEventSource.cs bir parçası olan dosyasında belirtilir. Örneğin, aşağıdaki kod parçacığında ServiceEventSource'un 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 olmak üzere 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 başlatmaktır:

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 CreatePipelineServiceFabricDiagnosticsPipelineFactory parametresi olarak geçirilen ad, EventFlow günlük koleksiyonu işlem hattını temsil eden sistem durumu varlığının adıdır. EventFlow, Service Fabric sistem durumu alt sistemi aracılığıyla hata ve hatayla karşılaşırsa ve bildirirse bu ad 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 bakabilirsiniz:

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şlamanız gerekir. Olay analizi ve görselleştirme platformunuza gidin ve günlüklerin gösterilmeye başladığını onaylayın (birkaç dakika sürebilir).

Sonraki adımlar