gpt4 book ai didi

azure - Service Fabric ETW 日志始终不完整

转载 作者:行者123 更新时间:2023-12-02 07:12:07 26 4
gpt4 key购买 nike

我们刚刚开始使用 Service Fabric,到目前为止唯一的痛点是使用 WAD 进行 ETW,它似乎总是因丢失数据(消息、事件消息)而注销。

到目前为止,我们的经验是它在 Visual Studio 中始终有效(有时您必须添加提供程序名称),并且在部署到 Azure 中的集群时很少有效。当它在 Azure 中正常工作时 - 版本控制和更新事件源上的函数或添加另一个函数将使用空数据点注销。

这是我们使用 Azure CLI 部署的 ETW/WAD ARM 脚本中的部分。

"name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]",
"properties": {
"type": "IaaSDiagnostics",
"autoUpgradeMinorVersion": true,
"protectedSettings": {
"storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
"storageAccountEndPoint": "https://core.windows.net/"
},
"publisher": "Microsoft.Azure.Diagnostics",
"settings": {
"WadCfg": {
"DiagnosticMonitorConfiguration": {
"overallQuotaInMB": "50000",
"EtwProviders": {
"EtwEventSourceProviderConfiguration": [
{
"provider": "Microsoft-ServiceFabric-Actors",
"scheduledTransferKeywordFilter": "1",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricReliableActorEventTable"
}
},
{
"provider": "Microsoft-ServiceFabric-Services",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricReliableServiceEventTable"
}
},
{
"provider": "Company-Project-API",
"scheduledTransferPeriod": "PT1M",
"DefaultEvents": {
"eventDestination": "ApiEventTable"
}
}
],
"EtwManifestProviderConfiguration": [
{
"provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
"scheduledTransferLogLevelFilter": "Information",
"scheduledTransferKeywordFilter": "4611686018427387904",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
"eventDestination": "ServiceFabricSystemEventTable"
}
}
]
}
}
},
"StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
},
"typeHandlerVersion": "1.5"
}

这是我们的 EventSource,尽管我们已经尝试了很多变体。

using Microsoft.Diagnostics.Tracing;

namespace Project.API

[EventSource(Name = "Company-Project-API")]
public sealed class ApiEventSource : EventSource
{
public static ApiEventSource Current = new ApiEventSource();

[Event(1, Level = EventLevel.Informational, Message = "{0}", Version = 1)]
public void Log(string message)
{
this.WriteEvent(1, message);
}
}

这就是我们每次在WAD中得到的。

Logs in storage explorer

运行 .NET 4.5.2/.net core。

请帮忙。

编辑 - 好的,我们已经成功升级到 .NET 4.6 - 看起来消息有效负载正在被注销。我们现在缺少的是 eventmessage 字段。现在 VS 中的“message”字段似乎始终为空。

EDIT2 - 当使用 EventSourceSettings.EtwSelfDescriptionEventFormat 作为事件源的构造函数参数时,消息字段似乎丢失,如下所示。 VS 和 WAD 中似乎就是这种情况。

public sealed class ApiEventSource : EventSource 
{
public ApiEventSource() : base(EventSourceSettings.EtwSelfDescribingEventFormat) {}
}

目前,我可以选择没有事件消息(自描述)或无法对方法进行版本控制(即使增加属性,在使用 list 样式时,空行仍然会转储到 WAD 中。

最佳答案

自描述 ETW 当前未设计为支持 EventAttribute.Message 属性。消息是基于 list 的概念(即它们不记录在事件中,而是放置在 list 中。由于自描述 ETW 没有 list ,因此 Message 属性实际上会被忽略。

人们可以想象扩展与自描述 ETW 事件相关的元数据,以便它可以保存消息字符串,但这目前不存在,需要对 ETW 进行更改。

简单地将消息嵌入到有效负载中是避免该问题的预期方法。

关于azure - Service Fabric ETW 日志始终不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39122617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com