Azure 服务结构应用程序日志未出现在应用程序见解中
Azure service fabric application logs not appearing in app insights
我正在使用 VS 模板附带的 ServiceEventSource 实现来记录消息。它出现在 Diagnostics 事件查看器中,但不出现在已配置的 Application Insights 实例中。
我确实在应用程序洞察实例中获得了其他平台事件,但没有我的应用程序日志记录。
示例日志行 -
ServiceEventSource.Current.ServiceMessage(this.Context, "Config deployment is disabled.");
除了使用 Visual studio 上下文菜单配置应用程序洞察之外,我没有做任何其他事情。此外,在创建服务结构集群时,我确实提供了正确的检测密钥。
ApplicationInsights.config -
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<InstrumentationKey>ac5a18e4-3750-46b4-ac10-2a887915b163</InstrumentationKey>
<TelemetryInitializers>
<Add Type="Microsoft.ApplicationInsights.ServiceFabric.FabricTelemetryInitializer, Microsoft.AI.ServiceFabric"/>
</TelemetryInitializers>
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.ServiceFabric.Module.ServiceRemotingRequestTrackingTelemetryModule, Microsoft.AI.ServiceFabric.Native"/>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector"/>
</TelemetryModules>
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
</TelemetryProcessors>
</ApplicationInsights>
Program.cs-
using System;
using System.Diagnostics;
using System.Fabric;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.ServiceFabric.Services.Runtime;
namespace ConfigUploadService
{
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.
ServiceRuntime.RegisterServiceAsync("ConfigUploadServiceType",
context => new ConfigUploadService(context)).GetAwaiter().GetResult();
ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(ConfigUploadService).Name);
// Prevents this host process from terminating so services keep running.
Thread.Sleep(Timeout.Infinite);
}
catch (Exception e)
{
ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
throw;
}
}
}
}
我错过了什么?
您使用的默认模板是针对遥测事件的,您的应用程序 EventSource 事件对于 App Insights 监视器是未知的,因此您必须为这些事件设置一个管道以告知这些事件属于您的应用程序并且您想要在 AppInsights 上记录它们。
您可以在诊断中看到它们 window,因为当您调试应用程序时 VS 会注册。
我假设您要查找的内容已在 link 中描述:
service-fabric-diagnostics-event-aggregation-eventflow
Event Flow 将为您提供执行此操作的工具,其灵活性与处理遥测事件时一样。
我正在使用 VS 模板附带的 ServiceEventSource 实现来记录消息。它出现在 Diagnostics 事件查看器中,但不出现在已配置的 Application Insights 实例中。 我确实在应用程序洞察实例中获得了其他平台事件,但没有我的应用程序日志记录。
示例日志行 -
ServiceEventSource.Current.ServiceMessage(this.Context, "Config deployment is disabled.");
除了使用 Visual studio 上下文菜单配置应用程序洞察之外,我没有做任何其他事情。此外,在创建服务结构集群时,我确实提供了正确的检测密钥。
ApplicationInsights.config -
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<InstrumentationKey>ac5a18e4-3750-46b4-ac10-2a887915b163</InstrumentationKey>
<TelemetryInitializers>
<Add Type="Microsoft.ApplicationInsights.ServiceFabric.FabricTelemetryInitializer, Microsoft.AI.ServiceFabric"/>
</TelemetryInitializers>
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.ServiceFabric.Module.ServiceRemotingRequestTrackingTelemetryModule, Microsoft.AI.ServiceFabric.Native"/>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector"/>
</TelemetryModules>
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector"/>
</TelemetryProcessors>
</ApplicationInsights>
Program.cs-
using System;
using System.Diagnostics;
using System.Fabric;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.ServiceFabric.Services.Runtime;
namespace ConfigUploadService
{
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.
ServiceRuntime.RegisterServiceAsync("ConfigUploadServiceType",
context => new ConfigUploadService(context)).GetAwaiter().GetResult();
ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(ConfigUploadService).Name);
// Prevents this host process from terminating so services keep running.
Thread.Sleep(Timeout.Infinite);
}
catch (Exception e)
{
ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
throw;
}
}
}
}
我错过了什么?
您使用的默认模板是针对遥测事件的,您的应用程序 EventSource 事件对于 App Insights 监视器是未知的,因此您必须为这些事件设置一个管道以告知这些事件属于您的应用程序并且您想要在 AppInsights 上记录它们。
您可以在诊断中看到它们 window,因为当您调试应用程序时 VS 会注册。
我假设您要查找的内容已在 link 中描述: service-fabric-diagnostics-event-aggregation-eventflow
Event Flow 将为您提供执行此操作的工具,其灵活性与处理遥测事件时一样。