【发布时间】:2018-08-15 00:28:53
【问题描述】:
我正在尝试将 Azure 应用洞察服务集成到服务结构应用中以进行日志记录和检测。我在本地 VM 上运行结构代码。我完全按照文档here [场景2]。 docs.microsoft.com 上的其他资源似乎也表明了相同的步骤。 [例如:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-diagnostics-event-aggregation-eventflow 出于某种原因,我在 App 洞察中看不到任何事件条目。当我这样做时,代码中没有错误:
ServiceEventSource.Current.ProcessedCountMetric("synced",sw.ElapsedMilliseconds, crc.DataTable.Rows.Count);
eventflowconfig.json 内容
{ “输入”:[ { “类型”:“事件源”, “来源”:[ { "providerName": "Microsoft-ServiceFabric-Services" }, { "providerName": "Microsoft-ServiceFabric-Actors" }, { "providerName": "mystatefulservice" } ] } ], “过滤器”:[ { “类型”:“下降”, “包括”:“级别 == 详细” } ], “输出”:[ { "type": "ApplicationInsights", //(将以下值替换为您的 AI 资源的检测键) "instrumentationKey": "XXXXXXXXXXXXXXXXXXXXXX", “过滤器”:[ { “类型”:“元数据”, “元数据”:“指标”, "include": "ProviderName == mystatefulservice && EventName == ProcessedCountMetric", "操作属性": "操作", "elapsedMilliSecondsProperty": "elapsedMilliSeconds", “记录计数属性”:“记录计数” } ] } ], “schemaVersion”:“2016-08-11” }在 ServiceEventSource.cs 中
[Event(ProcessedCountMetricEventId, Level = EventLevel.Informational)]
public void ProcessedCountMetric(string operation, long elapsedMilliSeconds, int recordCount)
{
if (IsEnabled())
WriteEvent(ProcessedCountMetricEventId, operation, elapsedMilliSeconds, recordCount);
}
编辑 从“结构状态服务中的 Program.cs”中添加诊断管道代码
using (var diagnosticsPipeline =
ServiceFabricDiagnosticPipelineFactory.CreatePipeline($"{ServiceFabricGlobalConstants.AppName}-mystatefulservice-DiagnosticsPipeline")
)
{
ServiceRuntime.RegisterServiceAsync("mystatefulserviceType",
context => new mystatefulservice(context)).GetAwaiter().GetResult();
ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id,
typeof(mystatefulservice).Name);
// Prevents this host process from terminating so services keep running.
Thread.Sleep(Timeout.Infinite);
}
【问题讨论】:
-
有什么日志或者什么可以帮助指导我们的吗?
-
在 VS 中,在视图下 -> 其他窗口选择诊断事件。这是一个本地 ETW (EventSource) 侦听器。您可以检查事件是否正确发出。
-
是的,马特。我确实在本地 ETW 查看器中看到了该事件。但是,我希望这些事件显示在 Azure 应用洞察中。不是本地的。 Jeff,我在本地没有看到任何日志表明传输到 azure 时出错。
-
那个事件源和事件流配置在我看来都是正确的,但是事件源可能是有限的。我很幸运在单元测试中使用this package 来帮助发现事件源的问题。一旦您确认事件源已正确配置并被调用,我建议您在应用洞察输出中使用该过滤器,看看这是否可能是您的问题。我有过过滤器并不总是像预期的那样工作的经验。
-
@pdylanross:eventsourceconfig 看起来不错。您认为这可能是 Azure 上的某种防火墙问题吗?我是否必须为本地事件打开端口或其他东西才能显示在 Azure 应用洞察中?
标签: azure-service-fabric azure-application-insights etw event-flow