2016-08-24 3 views
2

Мы только начали использовать Service Fabric и только болевые точки до сих пор был ETW с ВАД, который всегда кажется, чтобы выйти с недостающими данными (сообщения, EventMessage.)Service Fabric ETW Журналы всегда неполны

Наша опыт показывает, что он всегда работает в visual studio (иногда вам нужно добавить имя провайдера) и что он редко работает при развертывании в кластере в Azure. Когда он работает в Azure - версия &, обновляющая функцию источника события или добавляя другую, выйдет с пустыми точками данных.

Это раздел, который мы имеем в нашем сценарии ARM для ETW/WAD, который мы развертываем с использованием 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" 
} 

Это наш источник событий, хотя мы пробовали массу вариаций.

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. Также кажется, что поле «сообщение» всегда имеет значение null в VS.

EDIT2 - Кажется, что поле сообщения отсутствует при использовании EventSourceSettings.EtwSelfDescribingEventFormat в качестве аргумента конструктора для источника событий, как показано ниже. Это похоже на VS & в WAD.

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

На данный момент я могу либо выбирать между не EventMessage (Self Описывая) или нет возможности версии методы (даже с приращением атрибута, пустые строки по-прежнему сбрасываются в ВАД при использовании манифеста стиля.

+0

Можете ли вы поделиться примером сообщения, которое не получает WAD? Любые специальные символы внутри? –

+0

@ KarolZ В нашем случае это были все сообщения - некоторые были просто «Выполнение X с Y», где Y было бы значением простого типа. Некоторые из них будут полностью квалифицированными URL-адресами, которые я прочитал, были бы лучше закодированы html. Мы перешли на 4.6 и теперь используем сам описывающий источник событий, который кажется намного лучше - теперь мы просто пропускаем eventmessage и activityId - мы пытались использовать Start/Stop, как упоминалось здесь https: // blogs. msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-causation-features, но ничего не создается автоматически. – Nosmadas

+0

Идентификаторы активности задачи требуют правильного включения и декодирования на стороне потребителя.В настоящее время просмотрщик данных диагностики VS не делает этого, но у нас есть выпуск инструментов Fabric в работах, которые его исправят. Я спрошу о поддержке этого в WAD и опубликую здесь комментарии –

ответ

0

Самоописывающийся ETW в настоящее время не предназначен для поддержки свойства EventAttribute.Message. Message - это концепция, основанная на манифестах (то есть они не регистрируются в событии, а скорее помещаются в манифест. Поскольку самоописательная ETW не имеет манифест, свойство Message эффективно игнорируется.

Можно представить, что ex сохраняя метаданные, связанные с самоописывающимися событиями ETW, чтобы он мог содержать строку Message, но в настоящее время она не существует и требует изменения ETW.

Простое включение сообщения в полезную нагрузку - это ожидаемый способ избежать проблемы.

Смежные вопросы