如何設置Trace.Trace*
(Information
,Warning
,Error
等)以保存在服務結構日誌中?我發現的唯一選擇是使用ServiceEventSource
發送消息,但這需要修改大量代碼以從Trace語句移開。服務結構 - 跟蹤語句不記錄
是否有任何偵聽器可用於將Trace語句轉發到ServiceEventSource?或者更簡單些?
如何設置Trace.Trace*
(Information
,Warning
,Error
等)以保存在服務結構日誌中?我發現的唯一選擇是使用ServiceEventSource
發送消息,但這需要修改大量代碼以從Trace語句移開。服務結構 - 跟蹤語句不記錄
是否有任何偵聽器可用於將Trace語句轉發到ServiceEventSource?或者更簡單些?
EventFlow(正如Peter Bons的評論中所提到的)加上Application Insights可能是一個很好的解決方案。您可以輕鬆設置EventFlow來偵聽您現有的Trace語句,然後將其轉發到Application Insighs,您可以在其中監控服務的執行情況。
設置EventFlow非常簡單,只需將NuGet Microsoft.Diagnostics.EventFlow
添加到您的服務項目即可。然後在eventflowconfig.json
添加跟蹤作爲輸入和應用洞察作爲輸出:
{
"inputs": [
{
"type": "Trace",
"traceLevel": "Warning"
}
],
"filters": [],
"outputs": [
{
"type": "ApplicationInsights",
"instrumentationKey": "00000000-0000-0000-0000-000000000000"
}
],
"schemaVersion": "2016-08-11",
"extensions": []
}
現在你只安裝在您的Azure的賬號的應用見解實例,並改變instrumentationKey
您AI的一個實例。
之後,你可以開始修改您的EventFlow配置來提取你的痕跡具體要求和度量數據(如果您有型在你的痕跡信息的),那麼你就可以開始顯現,或搜索特定的AI儀表板中的跟蹤類型。
請注意,Application Insights默認僅保留7天的日誌。如果你想保持更長的痕跡,你可以改變AI層,你可以activate Continuous Export。
namespace MassProcessing
{
internal static class Program
{
/// <summary>
/// This is the entry point of the service host process.
/// </summary>
private static void Main()
{
try
{
// The ServiceManifest.XML file defines one or more service type names.
// Registering a service maps a service type name to a .NET type.
// When Service Fabric creates an instance of this service type,
// an instance of the class is created in this host process.
using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("EngageServiceFabric-MassProcessing-DiagnosticsPipeline"))
{
ServiceRuntime.RegisterServiceAsync("MassProcessingType",
context => new MassProcessing(context)).GetAwaiter().GetResult();
ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(MassProcessing).Name);
// Prevents this host process from terminating so services keep running.
Thread.Sleep(Timeout.Infinite);
}
}
catch (Exception e)
{
ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
throw;
}
}
}
}
也許您可以使用https://github.com/Azure/diagnostics-eventflow將跟蹤消息重新路由到ServiceEventSource。您將需要爲它編寫輸出,因爲EventSource不是開箱即用的,但這是一項簡單的工作。 –
謝謝,明天我會嘗試第一件事! –