2016-08-24 2 views
2

우리는 단지 서비스 패브릭 지금까지 항상 누락 된 데이터와 로그 아웃 것으로 보인다 뭉치와 ETW 된 경우에만 통증이 포인트를 사용하기 시작했습니다 (메시지, eventmessage합니다.)서비스 패브릭 ETW 로그는 항상

우리의 불완전 지금까지는 시각 스튜디오에서 항상 작동하며 (때때로 공급자 이름을 추가해야 함) 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 코어를 실행합니다.

도와주세요.

EDIT - 좋아, 우리는 .NET 4.6으로 옮겨갔습니다. 메시지 페이로드가 로그 아웃되는 것처럼 보입니다. 우리가 누락 된 것은 모두 eventmessage 필드입니다. 또한 "메시지"필드가 이제 VS에서 항상 null 인 것 같습니다.

EDIT2 - EventSourceSettings.EtwSelfDescribingEventFormat을 아래의 이벤트 소스에 대한 생성자 인수로 사용하면 메시지 입력란이 누락 된 것으로 보입니다. 이것은 WAD에서 VS &의 경우 인 것으로 보입니다. 매니페스트 스타일을 사용할 때 더 eventmessage 방법 (심지어 속성을 증가와 버전 수있는 (자기가 묘사) 여부를 선택할 수 있습니다 순간

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

은 빈 줄은 여전히 ​​뭉치로 덤프됩니다.

+0

WAD에서 가져 오지 않은 메시지의 예를 공유 할 수 있습니까? 특수 문자가 안에 있습니까? –

+0

@KarolZ 우리의 경우 모든 메시지였습니다 - 일부는 단순히 "Y와 함께 X 수행"이었습니다. 여기서 Y는 간단한 유형의 값이됩니다. 일부는 내가 읽는 정규화 된 URL이 더 나은 html로 인코딩 될 것입니다. 우리는 4.6으로 전환했고 현재 더 잘 보이는 자체 기술 이벤트 소스를 사용하고 있습니다. 이제는 이벤트 메시지와 activityId가 누락되었습니다. https : // blogs에서 언급 한 시작/중지를 사용해 보았습니다. msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-cause-features하지만 자동 생성 된 것으로 보이지는 않습니다. – Nosmadas

+0

작업 활동 ID는 소비자 측에서 적절한 활성화 및 디코딩이 필요합니다.VS 진단 데이터 뷰어는 현재이 작업을 수행하지 않지만 해결할 작업에 패브릭 도구가 릴리스됩니다. WAD에서이 문제에 대한 지원에 대해 문의하고 여기에 의견을 게시하십시오 –

답변

0

자체 설명 ETW는 현재 EventAttribute.Message 속성을 지원하도록 설계되지 않았습니다. 메시지는 매니페스트 기반 개념입니다 (즉, 이벤트에 기록되지 않고 매니페스트에 배치됩니다.) 자체 기술 ETW에는 매니페스트 인 경우 Message 속성은 무시됩니다.

메시지 설명 문자열을 보유 할 수 있도록 자체 기술 ETW 이벤트와 연관된 메타 데이터를 보냈지 만 현재 존재하지 않으며 ETW를 변경해야합니다.

단순히 페이로드에 메시지를 포함 시키면 문제를 피할 수 있습니다.

관련 문제