2017-01-25 3 views
1

Wir versuchen, Service ETW-Ereignisse in einem OnPrem-Cluster anzuzeigen. Der langfristige Plan besteht darin, einen ElasticSearch-Cluster zu installieren, an den die Ereignisse gesendet werden. Ich habe keine Zeit, diese Woche diese Woche aufzubauen, stattdessen muss ich verstehen, warum meine App in die Luft geht.Anzeigen/Erfassen von Service Fabric ETW-Ereignissen OnPrem

Wir haben Microsoft Message Analyzer auf einem der Knotenserver installiert und ich kann mich mit einer Live-Sitzung verbinden, um den Cluster ETW-Ereignisdienst Fabric System Provider anzuzeigen.

Ich möchte in der Lage sein, die Anwendung ETW Events anzuzeigen. Ich habe die Anweisungen in dem Artikel hier folgt:

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-diagnostic-collect-logs-without-an-agent

Dieser Artikel scheint auf 3 Dateien, eventFlowConfig.json, Program.cs und ServiceEventSource.cs zu konzentrieren.

EventFlowConfig.Json hat:

"inputs": [ 
    { 
     "type": "EventSource", 
     "sources": [ 
     { "providerName": "Microsoft-ServiceFabric-Services" }, 
     { "providerName": "Microsoft-ServiceFabric-Actors" }, 
     { "providerName": "TMHP-CacheApp-CacheAPI" } 
     ] 
    } 
    ], 
    "filters": [ 
    { 
     "type": "drop", 
     "include": "Level == Verbose" 
    } 
    ], 
    "outputs": [ 
    { 
     "type": "StdOutput" 
    } 

In Program.cs ich habe:

using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("CacheApp-CacheAPI-DiagnosticsPipeline")) 
       { 

        ServiceRuntime.RegisterServiceAsync("EndpointType", 
        context => new Endpoint(context)).GetAwaiter().GetResult(); 

        ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Endpoint).Name); 
        // Prevents this host process from terminating so services keeps running. 
        Thread.Sleep(Timeout.Infinite); 
       } 

ServiceEventSource.cs hat:

[EventSource(Name = "TMHP-CacheApp-CacheAPI")] 

I-Paket und Bereitstellung in Ordnung, aber mit MSMA Ich weiß nicht, wie man an den Application Provider anfügt? Ich denke, ich würde einen "Custom Provider" hinzufügen, aber es fragt nach einer GUID. Gibt es einen Weg, diesen Guid zu finden? Ich gehe davon aus ich den Kundendienst für meine spezifischen ServiceFabric Anwendung von Art hinzufügen möchten:

"TMHP-CacheApp-CacheAPI"

Vielen Dank im Voraus, Greg

+0

I PerfView auf dem Server installiert haben. Ich kann auf den Prozess verweisen, um eine Dump-Datei des Prozesses zu erstellen. Das macht nicht viel für mich. @yoApe mit den erweiterten Optionen war nützlich. Auf den Provider-Browser kann von dort aus zugegriffen werden, ich kann weder meinen TMHP-Provider in der Liste sehen, noch Microsoft-ServiceFabric-Services oder Microsoft-ServiceFabric-Actors. Ich frage mich, ob ich etwas in der ServiceFabric App verpasst habe? Der Provider-Typ scheint überhaupt nicht registriert zu sein. Der nächste Schritt ist, Karols Werkzeug anzuschauen, um zu sehen, ob ich es zur Arbeit bringen kann. Mein Gedanke ist, SF sollte das tun? – gperrego

+0

FYI Ich arbeite immer noch daran. Ich habe den PerfView-Ansatz mit wenig Erfolg versucht. Ich arbeite daran und werde die Gruppe in einem Stück aktualisieren – gperrego

+0

Ok, also konnte ich dieses spezifische Problem lösen, indem ich die unten aufgeführte Befehlszeile von PerfView benutze. Ich sehe nicht unbedingt alle Ereignisse, die ich erwarten würde, aber wir arbeiten daran, das herauszufinden. Ich stehe auf einem ElasticStack und gehe in diese Richtung. – gperrego

Antwort

3

I‘ Wenn Sie stattdessen PerFView verwenden, finden Sie in Vance einen Artikel zum Anzeigen von ereignisquellenbasierten Ereignissen in PerfView. https://blogs.msdn.microsoft.com/vancem/2012/07/09/introduction-tutorial-logging-etw-events-in-c-system-diagnostics-tracing-eventsource/ Das '*' vor dem EventSource-Namen ist wichtig.

Im Folgenden finden Sie einige Anweisungen zum Anzeigen von Actor-Ereignissen. Ihre benutzerdefinierte EventSource sollte dasselbe Muster aufweisen.

Der Actor und ReliableServices basieren auf EventSource. Um sie in PerfView anzuzeigen, müssen Sie den Anweisungen auf dem Vance-Blog folgen. Vergiss nicht das "*" !!!

  1. starten PerfView mit einer Befehlszeile wie folgt aus: perfview/onlyproviders = * Microsoft-ServiceFabric-Schauspieler
  2. Sie sammeln können Collect mit | Sammeln | Sammlung beginnen Stellen Sie sicher, dass die erweiterten Optionen | Weitere Provider Feld enthält = * Microsoft-ServiceFabric-Schauspieler
  3. Wenn Sie sie unter Events sichtbar fertig sammeln

enter image description here

+0

Danke Todd, was denkst du über Karols Kommentar oben? Ich denke, die aktuelle Frage ist, ob das Service-Fabric den Provider-Typ registriert oder ob dies ein manueller Schritt ist, der getan werden muss. Ich habe perfview jetzt installiert und ich versuche zu sehen, ob es auch Probleme gibt, den Provider wie MSMA zu finden. Danke, – gperrego

+0

Ja, basierend auf dem, was ich sehe PerfView möchte eine Datei öffnen, aber ich glaube nicht, dass ServiceFabric tatsächlich irgendwelche Dateien erstellen wird. Es werden nur die Ausgabetypen von ElasticSearch und StdOutput ect verwendet. Vielleicht bin ich nur unwissend, aber es gibt keine Möglichkeit, den obigen Artikel zu verwenden und die ausführbare Datei der ServiceFabric-App auf diese Weise so auszuführen, wie ich es verstehe. – gperrego

1

Die Guid einer .NET EventSource-basierter Ereignisanbieter basiert auf dem Namen des Anbieters und wird mithilfe eines Hashalgorithmus generiert. Dieser Blogeintrag hat eine kurze Beschreibung davon: https://blogs.msdn.microsoft.com/dcook/2015/09/08/etw-provider-names-and-guids/. Sie können die mitgelieferte ETWGuid.exe verwenden, um die Guid für Ihren Provider zu generieren:

C:\code> .\EtwGuid.exe TMHP-CacheApp-CacheAPI 

TRACELOGGING_DEFINE_PROVIDER(
    g_hMyProvider, 
    "TMHP-CacheApp-CacheAPI", 
    // {9deef099-8d1a-568a-1618-08ffbb7146b3} 
    (0x9deef099,0x8d1a,0x568a,0x16,0x18,0x08,0xff,0xbb,0x71,0x46,0xb3)); 

So ist die Guid für TMHP-CacheApp-CacheAPI würde 9deef099-8d1a-568a-1618-08ffbb7146b3 sein. Dies funktioniert nur für .NET EventSources. Andere Event Provider haben möglicherweise andere Möglichkeiten, die GUID für einen Provider festzulegen.

Sie können dann nach diesem Anbieter in Ihrem Microsoft Message Analyzer, PerfView oder einem anderen Tool für ETW-Anzeige suchen.

Wie für die Microsoft gelieferten Ereignisanbietern Sie haben drei eingebaute in Ihnen für Service-Stoff aussehen sollte:

+0

Danke für die schnelle Antwort. Wenn ich versuche, den benutzerdefinierten Provider mit dieser GUID und TMHP-CacheApp-CacheAPI hinzuzufügen, bekomme ich den Provider nicht installiert. Gibt es einige Schritte, die ich tun muss, um den Provider-Typ zu installieren? Ich dachte, wenn Service Fabric entweder das Paket in den Bildspeicher hochgeladen hat oder wenn es eine Instanz dieser Anwendung erstellt hat, die den Provider-Typ erstellen würde. Ich lese jetzt über diesen Typen, aber ich hatte gehofft, SF würde damit umgehen: [https://msdn.microsoft.com/en-us/library/cc432688.aspx] – gperrego

+0

Eigentlich ist das der falsche Artikel oben, https: // technet .microsoft.com/de/us/library/jj714799.aspx – gperrego

+0

Laufen Sie auf Ihrem lokalen Entwicklungscluster, wenn Sie diesen oder einen echten Cluster testen? Wenn Sie den Entwicklercluster ausführen, deinstalliere ich den Anbieter, wenn Sie die Anwendung stoppen (und entfernen), sofern Sie das Standardverhalten nicht geändert haben. – yoape