服务结构ETW日志始终不完整

时间:2016-08-24 11:54:00

标签: azure azure-service-fabric etw azure-diagnostics

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

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

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

"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核心。

请协助。

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

EDIT2 - 使用EventSourceSettings.EtwSelfDescribingEventFormat作为事件源的构造函数参数时,似乎缺少消息字段,如下所示。这似乎是VS&在WAD。

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

目前,我可以选择无事件消息(Self Describing)或无法对方法进行版本设置(即使增加属性,使用清单样式时空行仍然会被转储到WAD中。

1 个答案:

答案 0 :(得分:0)

自描述ETW目前不支持EventAttribute.Message属性。消息是基于清单的概念(即它们不会记录在事件中,而是放在清单中。由于自描述ETW没有清单,因此Message属性会被忽略。

可以想象扩展与自描述ETW事件相关联的元数据,以便它可以保存消息字符串,但是当前不存在并且需要更改ETW。

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