Просмотр/сбор событий ETW Service Fabric OnPrem

Мы пытаемся просмотреть события службы ETW в кластере OnPrem. Долгосрочный план будет заключаться в установке кластера ElasticSearch для отправки событий. У меня нет времени заниматься этим на этой неделе, вместо этого мне нужно понять, почему мое приложение не работает.

Мы установили Microsoft Message Analyzer на один из узловых серверов, и я могу подключиться к сеансу в реальном времени, чтобы просмотреть поставщика системы Service Fabric событий кластера ETW.

Я хотел бы иметь возможность просматривать события ETW для приложений. Я следовал инструкциям в статье здесь:

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-diagnostic-collect-logs-without-an-agent

В этой статье основное внимание уделяется трем файлам: eventFlowConfig.json, Program.cs и ServiceEventSource.cs.

EventFlowConfig.Json имеет:

    "inputs": [
    {
      "type": "EventSource",
      "sources": [
        { "providerName": "Microsoft-ServiceFabric-Services" },
        { "providerName": "Microsoft-ServiceFabric-Actors" },
        { "providerName": "TMHP-CacheApp-CacheAPI"  }
      ]
    }
  ],
  "filters": [
    {
      "type": "drop",
      "include": "Level == Verbose"
    }
   ],
   "outputs": [
    {
      "type": "StdOutput"
    }

В program.cs у меня есть:

  using (var diagnosticsPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("CacheApp-CacheAPI-DiagnosticsPipeline"))
                {

                    ServiceRuntime.RegisterServiceAsync("EndpointType",
                    context => new Endpoint(context)).GetAwaiter().GetResult();

                    ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Endpoint).Name);
                    // Prevents this host process from terminating so services keeps running. 
                    Thread.Sleep(Timeout.Infinite);
                }

ServiceEventSource.cs имеет:

 [EventSource(Name = "TMHP-CacheApp-CacheAPI")]

Я упаковываю и развертываю нормально, но с помощью MSMA я не знаю, как подключиться к поставщику приложений? Я думаю, что добавлю «Пользовательского поставщика», но он запрашивает GUID. Есть ли способ найти этот гайд? Я предполагаю, что хочу добавить поставщика клиентов для моего конкретного приложения ServiceFabric типа:

"TMHP-CacheApp-CacheAPI"

Заранее спасибо, Грег


person gperrego    schedule 25.01.2017    source источник
comment
Я установил PerfView на сервер. Я могу указать на процесс, чтобы создать файл дампа процесса. Это на самом деле не очень много для меня. Использование расширенных параметров @yoApe было полезно. Браузер поставщиков доступен оттуда, я не вижу в списке своего поставщика TMHP, а также Microsoft-ServiceFabric-Services или Microsoft-ServiceFabric-Actors. Мне интересно, не пропустил ли я что-то в приложении ServiceFabric? Тип провайдера, похоже, вообще не зарегистрирован. Следующий шаг — посмотреть на инструмент Кароля, чтобы понять, смогу ли я заставить его работать. Я думаю, что SF должен делать это?   -  person gperrego    schedule 26.01.2017
comment
К вашему сведению, я все еще работаю над этим. Я пробовал подход PerfView с небольшим успехом. Я работаю над этим и немного обновлю группу   -  person gperrego    schedule 31.01.2017
comment
Итак, я смог решить эту конкретную проблему, используя запуск PerfView из командной строки, указанный ниже. Я не обязательно увижу все ожидаемые события, но мы работаем над этим. Я встаю на ElasticStack и иду в этом направлении.   -  person gperrego    schedule 31.01.2017


Ответы (2)


Я бы порекомендовал вам вместо этого использовать PerFView, у Вэнса есть статья о том, как просматривать события на основе EventSource в PerfView https://blogs.msdn.microsoft.com/vancem/2012/07/09/introduction-tutorial-logging-etw-events-in-c-system-diagnostics-tracing-eventsource/ Символ «*» перед именем EventSource важен.

Вот несколько инструкций о том, как просматривать события актера, ваш пользовательский источник событий должен быть таким же шаблоном.

Актер и ReliableServices основаны на EventSource, поэтому для их просмотра в PerfView вам необходимо следовать инструкциям в блоге Вэнса. Не забудьте '*'!!!

  1. Запустите PerfView с помощью следующей командной строки: perfview /onlyproviders=*Microsoft-ServiceFabric-Actors
  2. Вы можете собирать, используя Собрать | Собрать | Начать сбор. Убедитесь, что Дополнительные параметры | Поле дополнительных поставщиков содержит =*Microsoft-ServiceFabric-Actors
  3. Когда вы закончите сбор, их можно будет просмотреть в разделе «События».

введите здесь описание изображения

person Todd Abel    schedule 25.01.2017
comment
Спасибо, Тодд, что вы думаете о комментарии Кароль выше? Я думаю, что текущий вопрос заключается в том, регистрирует ли Service Fabric тип поставщика или это нужно сделать вручную? Сейчас я установил perfView и пытаюсь выяснить, есть ли у него проблемы с поиском провайдера, как это делает MSMA. Спасибо, - person gperrego; 26.01.2017
comment
Да, исходя из того, что я вижу, PerfView хочет открыть файл, но я не думаю, что ServiceFabric на самом деле создаст какие-либо файлы. Он будет использовать только типы вывода ElasticSearch и StdOutput и т. д. Может быть, я просто невежественен, но нет способа использовать приведенную выше статью и запустить исполняемый файл приложения ServiceFabric таким образом, насколько я понимаю? - person gperrego; 26.01.2017

Guid поставщика событий на основе .NET EventSource фактически основан на имени поставщика, он генерируется с использованием хеш-алгоритма. Эта запись в блоге содержит краткое описание: https://blogs.msdn.microsoft.com/dcook/2015/09/08/etw-provider-names-and-guids/. Вы можете использовать предоставленный ETWGuid.exe для создания Guid для вашего провайдера:

C:\code> .\EtwGuid.exe TMHP-CacheApp-CacheAPI

TRACELOGGING_DEFINE_PROVIDER(
    g_hMyProvider,
    "TMHP-CacheApp-CacheAPI",
    // {9deef099-8d1a-568a-1618-08ffbb7146b3}
    (0x9deef099,0x8d1a,0x568a,0x16,0x18,0x08,0xff,0xbb,0x71,0x46,0xb3));

Таким образом, Guid для TMHP-CacheApp-CacheAPI будет 9deef099-8d1a-568a-1618-08ffbb7146b3. Кстати, это работает только для .NET EventSources, у других поставщиков событий могут быть другие способы установки guid для поставщика.

Затем вы можете найти этого провайдера в анализаторе сообщений Microsoft, PerfView или любой другой инструмент для просмотра ETW.

Что касается поставщиков событий Microsoft, у вас есть три встроенных поставщика, на которые следует обратить внимание при работе с Service Fabric:

person yoape    schedule 25.01.2017
comment
Спасибо за быстрый ответ. Когда я пытаюсь добавить пользовательский провайдер с этим GUID и TMHP-CacheApp-CacheAPI, я получаю, что провайдер не установлен. Есть ли какие-то шаги, которые мне нужно сделать, чтобы установить тип провайдера? Я думал, что когда Service Fabric либо загрузит пакет в хранилище образов, либо когда он создаст экземпляр этого приложения, он создаст тип поставщика. Сейчас я читаю об этом парне, но я надеялся, что SF справится с этим: [msdn.microsoft.com/en-us/library/cc432688.aspx] - person gperrego; 26.01.2017
comment
На самом деле это неправильная статья выше, technet.microsoft.com/en-us/library /jj714799.aspx - person gperrego; 26.01.2017
comment
Вы работаете в своем локальном кластере разработки, когда тестируете это, или в реальном кластере? Если вы используете кластер разработки, я полагаю, что он удаляет поставщика, когда вы останавливаете (и удаляете) приложение (если вы не изменили поведение по умолчанию). - person yoape; 26.01.2017
comment
У вас должна быть возможность запустить PerfView на узле (или на вашем локальном компьютере), а затем добавить guid поставщика в поле «Дополнительные параметры» > «Дополнительные поставщики», а затем начать сбор. Если вы затем запустите службу, вы должны увидеть в журнале события, полученные от вашего провайдера. - person yoape; 26.01.2017
comment
По умолчанию EventSource использует динамическую генерацию манифеста; это не работает с инструментами, которые ожидают, что основные поставщики ETW зарегистрированы в системе. Но вы можете использовать инструмент EventRegister для создания и регистрации манифеста для ваш источник событий. - person Karol Z; 26.01.2017
comment
@KarolZ, PerfView отображает события, зарегистрированные из EventSource в приложениях SF, автоматически ли SF регистрирует поставщиков событий при размещении служб? - person yoape; 26.01.2017
comment
@KarolZ Что еще мне нужно сделать, чтобы использовать инструмент EventSource? Я установил его с открытым, упакованным и развернутым в кластере проектом Service Fabric. Это должно покрывать это? Я гуглил и с трудом нашел документ. Спасибо - person gperrego; 26.01.2017
comment
@yoape PerfView хорошо разбирается в EventSources и не требует регистрации поставщика ETW. Некоторые другие инструменты MS, такие как расширение Azure Diagnostics, делают это. Если вы посмотрите на документы для схемы конфигурации Azure Diagnostics docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/ вы заметите различие между EtwEventSourceProviderConfiguration и EtwManifestProviderConfiguration. SF не регистрирует EventSources автоматически в качестве поставщиков ETW. - person Karol Z; 27.01.2017
comment
@gperrego В идеале для мониторинга вашего приложения вы должны использовать инструмент, такой как расширение диагностики Azure или PerfView, который понимает об источниках событий. Предполагая, что это недоступно, вам необходимо зарегистрировать свой EventSource в качестве обычного поставщика ETW на основе манифеста с помощью инструмента EventRegister. В контексте приложения Service Fabric это можно сделать как часть задачи запуска приложения. SF не сделает это автоматически за вас. - person Karol Z; 27.01.2017
comment
@KarolZ Запуск PerfView с указанной выше командной строкой, которой поделился Тодд (perfview /onlyproviders=*TMHP-CacheApp-CacheAPI), ищет события с тем же идентификатором GUID, который был создан yoape выше. Учитывая, что вы написали статью, на которую я ссылаюсь, в документации Azure выше, не могли бы вы еще раз взглянуть на мою настройку и сообщить мне, если я что-то пропустил? - person gperrego; 31.01.2017
comment
@KarolZ Я получаю некоторые события через описанную выше настройку, похоже, я получаю только события запуска и регистрации. Мы пытаемся выяснить, почему, но хотели предупредить вас. Спасибо - person gperrego; 31.01.2017
comment
@gperrego Если вы можете захватить событие ServiceTypeRegistered, но не другие события из того же EventSource, мое первое подозрение будет заключаться в том, что другие события просто не вызываются. В исходном сообщении вы сказали, что приложение взрывается, может быть, у кода службы никогда не будет возможности вызвать методы события и, таким образом, вызвать события, которые вы ожидаете? - person Karol Z; 01.02.2017
comment
@KarolZ мы преодолели часть взрыва, удалив некоторые средства безопасности на основе утверждений, чтобы приложение было запущено и работало. Я тоже думаю, что что-то подобное происходит. Я все еще копаюсь в этом и немного обновлю вас. Спасибо еще раз. - person gperrego; 07.02.2017