Как добавить поставщика ETW в существующий кластер Service Fabric с помощью PowerShell?

Я уже создал кластер Service Fabric с диагностикой Azure, и в настоящее время он работает, когда мои службы развернуты в этом кластере. В моей службе есть ETW EventSource, из которого я хотел бы начать сбор событий, поскольку мой код службы уже использует этот источник событий для записи событий, связанных с моей службой. Поскольку кластер уже включен для диагностики Azure, а мои службы уже развернуты в этом кластере, я думаю, что достаточно просто обновить поставщика ETW с помощью моего источника событий в этом кластере фабрики служб. Вот экспортированный шаблон (показана только его часть, актуальная для диагностики Azure):

{
"properties": {
    "publisher": "Microsoft.Azure.Diagnostics",
    "type": "IaaSDiagnostics",
    "typeHandlerVersion": "1.5",
    "autoUpgradeMinorVersion": true,
    "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": "Bb.ServiceFabric.Infrastructure.Container",
                            "scheduledTransferPeriod": "PT1M",
                            "DefaultEvents": {
                                "eventDestination": "ServiceFabricReliableServiceEventTable"
                            }
                        }
                    ],
                    "EtwManifestProviderConfiguration": [
                        {
                            "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                            "scheduledTransferLogLevelFilter": "Information",
                            "scheduledTransferKeywordFilter": "4611686018427387904",
                            "scheduledTransferPeriod": "PT5M",
                            "DefaultEvents": {
                                "eventDestination": "ServiceFabricSystemEventTable"
                            }
                        }
                    ]
                }
            }
        },
        "StorageAccount": "sfdgsmsraghuplaygrou6827"
    }
},
"name": "VMDiagnosticsVmExt_vmNodeType0Name"
}

Я хотел бы обновить следующие EtwProviders/EtwEventSourceProviderConfiguration, чтобы они содержали следующий раздел (поскольку MyCompany.MyServices.MyStatelessService — это имя EventSource моей службы):

{
"provider": "MyCompany.MyServices.MyStatelessService",
"scheduledTransferPeriod": "PT5M",
"DefaultEvents": {
    "eventDestination": "ServiceFabricReliableServiceEventTable"
}
}

Вот мои вопросы:

  1. Является ли это правильным способом вставки поставщика ETW/EventSource (из моей службы) в существующий кластер (который уже включен с диагностикой Azure)?
  2. Можно ли добавить этот источник событий (в качестве поставщика источника событий ETW) с помощью команд PowerShell?
  3. Если да, то какова точная команда powershell (с использованием всей информации из приведенного выше фрагмента кода)?

Примечание. Я использую .net framework 4.5.2.


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


Ответы (1)


Все выглядит хорошо с добавленной конфигурацией выше. Просто имейте в виду, что для ETWProviders EventDestination не может содержать дефисы (-), у вас их нет, так что все в порядке.

Чтобы обновить конфигурацию агента Windows Azure Diagnostics (WAD), вы можете использовать PowerShell или Cloud Explorer в Visual Studio.

В первом случае просто обновите шаблон ARM и используйте командлет New-AzureRmResourceGroupDeployment. Дополнительные сведения см. здесь: https://azure.microsoft.com/en-us/documentation/articles/service-fabric-diagnostics-how-to-setup-wad/#update-diagnostics-to-сбориотправкажурналовизновыхканаловисточникасобытий

Для использования Cloud Explorer в Visual Studio. Перейдите к масштабируемому набору виртуальных машин (поскольку это ресурс Azure, содержащий конфигурацию WAD). Щелкните правой кнопкой мыши и выберите «Обновить диагностику». В показанном диалоговом окне у вас есть возможность загрузить частный и общедоступный файл конфигурации. Просто возьмите документ .json, содержащий элемент {"WadCfg": {}}, и загрузите его как общедоступную конфигурацию.

Если вам нужно обновить частную конфигурацию, укажите имя учетной записи хранения и AccessKey: { "storageAccountName": "", "storageAccountKey": "", "storageAccountEndPoint": "https://core.windows.net", }

Надеюсь это поможет. Миккель

person Mikkel Mørk Hegnhøj    schedule 26.08.2016
comment
Что в данном контексте означает частный, публичный? - person Raghu; 27.08.2016
comment
Когда я использую облачный обозреватель для загрузки файла json, я получаю следующую ошибку: Обновление расширения диагностики — виртуальная машина сообщила об ошибке при обработке расширения «VMDiagnosticsVmExt_vmNodeType0Name». Сообщение об ошибке: Не удалось прочитать конфигурацию.. Microsoft.Cct.StatusWindow.DispatchedStatusItemContainer - person Raghu; 28.08.2016
comment
Я получаю эту ошибку, даже если я скачал файл и повторно загрузил тот же файл без каких-либо изменений. - person Raghu; 28.08.2016
comment
Этот процесс загрузки кажется ошибочным. Когда я удалил все пробелы и загрузил файл. Это работает только иногда. Даже когда это работает, я не вижу никаких событий в таблице WADServiceFabricReliableServiceEventTable. Однако независимо от того, загрузил ли я свой EventSource с помощью раздела WadConfig или нет, я ВИЖУ события, связанные с контекстом службы, такие как создание службы, удаление службы и т. д. Но мое событие из следующего кода: ServiceEventSource.Current.Message (это мое сообщение); никогда не появляется. ServiceEventSource — это мой источник событий, и я назвал его MyCompany.MyServices.MyStatelessService. - person Raghu; 28.08.2016
comment
Что касается частного/общедоступного: конфигурация, хранящаяся в шаблоне ARM, является экспортируемой (общедоступной), учетные данные (приватной). - person Mikkel Mørk Hegnhøj; 29.08.2016
comment
Извините, что я пропустил это в первую очередь, но имя поставщика не должно использовать знаки препинания (.). Попробуйте удалить их. Вы также можете использовать свой собственный eventDestination, просто не используйте дефисы (-) для этого имени. - person Mikkel Mørk Hegnhøj; 29.08.2016