Настройка уровня событий ETW в трассировке структуры служб

Когда вы создаете проект приложения Service Fabric с помощью Visual Studio, вы получаете реализацию EventSource (называемую ServiceEventSource). Например, вот одна из реализаций метода:

    private const int ServiceRequestStopEventId = 6;
    [Event(ServiceRequestStopEventId, Level = EventLevel.Informational, Message = "Service request '{0}' finished", Keywords = Keywords.Requests)]
    public void ServiceRequestStop(string requestTypeName)
    {
        WriteEvent(ServiceRequestStopEventId, requestTypeName);
    }

Как видите, у этого метода есть атрибут Event, для которого задан аргумент Level.

  1. Где бы я установил это значение аргумента уровня?
  2. Я думаю, что установка значения аргумента этого уровня покажет, сколько будет сгенерировано выходных данных. Я прав?
  3. Могу ли я изменить значение этого аргумента уровня динамически во время выполнения и по желанию?

person Raghu    schedule 13.07.2016    source источник


Ответы (2)


  1. Вы можете установить Level только в атрибуте Event.
  2. Количество генерируемых выходных данных зависит от потребителей журналов. Если нет потребителей или слушателей, событие не будет сгенерировано ни на каком уровне. Можно сказать, что уровень зависит от количества вывода, но только если есть потребители такого события.
  3. Нет, вы не можете изменять уровень динамически. Для этого у вас может быть два метода с одинаковой сигнатурой и разными уровнями.

Вы можете найти всю интересную информацию о ETW и его настройке здесь.

person cassandrad    schedule 13.07.2016
comment
Если WAD является моим потребителем, и я хотел бы захватывать, скажем, только все информационные сообщения, как мне настроить WAD для прослушивания только информационных сообщений? - person Raghu; 13.07.2016
comment
@Raghu, к сожалению, похоже, что нет возможности зарегистрировать только определенный уровень. Вместо этого вы можете указать минимальный уровень. См. здесь: раздел Добавить в массив расширений VirtualMachineProfile, EtwManifestProviderConfiguration, параметр ScheduleTransferLogLevelFilter. Дополнительную информацию о параметрах можно найти в xml-схеме. - person cassandrad; 13.07.2016
comment
Вы указали мне на флаг, который мне нужен в конфигурации WAD: scheduleTransferLogLevelFilter. Идеальный. - person Raghu; 13.07.2016

Код просто указывает информацию о генерируемых им событиях ETW. Настройка уровня указывает, в какую категорию будет помещено событие. Он не настраивает вывод события. Инструмент ведения журнала определяет, зарегистрирован он или нет. И обычно вы можете изменить этот уровень в инструменте ведения журнала во время выполнения.

Некоторые полезные ссылки:

  1. Настройте WAD: https://azure.microsoft.com/en-us/documentation/articles/service-fabric-diagnostics-how-to-setup-wad/

  2. Используйте эластичный поиск https://azure.microsoft.com/en-us/documentation/articles/service-fabric-diagnostic-how-to-use-elasticsearch/

  3. Используйте OMS для анализа событий. https://azure.microsoft.com/en-us/documentation/articles/log-analytics-service-fabric/

  4. Используйте Service Profiler (акторы) https://www.azureserviceprofiler.com/

person LoekD    schedule 13.07.2016
comment
Я так понимаю, что атрибут это всего лишь настройка, на каком уровне будет записываться событие. Я также посмотрел на конфигурацию WAD. Я не смотрю данные журнала в реальном времени, а только через определенный период. Я понимаю, что это архитектура pub/sub. В статье WAD я не увидел никакой информации об уровне, которая будет фиксировать события. В частности, я просмотрел раздел «IaaSDiagnostics». У него нет никакой информации об уровне. Кроме того, профилировщик службы предназначен только для веб-приложений Azure, а не для микрослужб, размещенных в кластере Service Fabric. - person Raghu; 13.07.2016