Аварийные дампы Azure не отображаются - PullRequest
1 голос
/ 20 апреля 2011

Приведенный ниже код создает аварийный дамп при запуске его в среде разработки Azure, но не при его развертывании в облаке. У меня есть:

  • Выполнено Инструкции Microsoft (см. Ниже)
  • Протестировал учетные данные в Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString, загрузив большой двоичный объект.
  • Ожидал его сбоя (примерно десять раз).
  • Остановил развертывание и подождал полчаса.

Но я все еще не могу найти что-либо в учетной записи хранения. Я нацеливаюсь на .Net 4 с использованием VS 2010 Pro SP1 и развертывание с использованием его встроенных компонентов. Что я делаю не так?

public override void Run()
{
   throw new ApplicationException("bugger");
}

public override bool OnStart()
{
    ServicePointManager.DefaultConnectionLimit = 12;

    DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
    string conn_str = RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
    CloudStorageAccount account = CloudStorageAccount.Parse(conn_str);
    DiagnosticMonitor diagnosticMonitor = DiagnosticMonitor.Start(account, config);

    CrashDumps.EnableCollection(true);

    return base.OnStart();
}

Вот моя конфигурация:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzureProject1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="WorkerRole1">
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WorkerRole>
</ServiceDefinition>

и

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="WindowsAzureProject1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
  <Role name="WorkerRole1">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="AccountName=XXX;AccountKey=XXX;DefaultEndpointsProtocol=https" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

(Мой реальный проект создает аварийные дампы, но у меня возникают проблемы с их анализом, поэтому я пытаюсь создать урезанный пример. Когда это сработает, я посмотрю, есть ли у него аварийные дампы лучше.)

РЕДАКТИРОВАТЬ: Часть решения заключается в добавлении

config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);

, который создает контейнер BLOB-объектов wad-crash-dumps, но, к сожалению, он остается пустым. Также см. мой вопрос о том, что происходит с диагностическими данными при сбое роли .

Ответы [ 3 ]

1 голос
/ 27 апреля 2011

Добавлен Thread.Sleep (60000) перед выдачей исключения.Я думаю, что происходило так:

  1. Возникло исключение.
  2. Дамп сбоя сохранен в локальном хранилище «DiagnosticStore», которое предположительно настроено с параметром cleanOnRoleRecycle, установленным в false.1007 * Виртуальная машина переработана, так как экземпляр умер.Это завершает работу диспетчера диагностики, прерывая все выполняющиеся загрузки.
  3. Запущен новый экземпляр диспетчера диагностики.Начинается загрузка старого дампа.
  4. Перейти к 1.
0 голосов
/ 27 апреля 2011

Возможно, вы не установили ScheduledTransferPeriod и LogLevelFilter?

TimeSpan tsLogPeriod = TimeSpan.FromMinutes(double.Parse(RoleEnvironment.GetConfigurationSettingValue("LogIntervalInMinutes")));
            DiagnosticMonitorConfiguration diagnosticMonitorConfiguration = DiagnosticMonitor.GetDefaultInitialConfiguration();

            diagnosticMonitorConfiguration.Logs.ScheduledTransferPeriod = tsLogPeriod;

            diagnosticMonitorConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;

            DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagnosticMonitorConfiguration);

        }
0 голосов
/ 21 апреля 2011

Я полагаю, что вам не хватает RoleInstanceDiagnosticManager.Попробуйте сделать это:

DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
    string conn_str = RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
    CloudStorageAccount account = CloudStorageAccount.Parse(conn_str);
RoleInstanceDiagnosticManager roleInstanceDiagnosticManager = account.CreateRoleInstanceDiagnosticManager(RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id);

    CrashDumps.EnableCollection(true);
config.Directories.DataSources.Add(AzureLocalStorageTraceListener.GetLogDirectory());
            config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
config.ConfigurationChangePollInterval = TimeSpan.FromMinutes(5);

            //set the configuration for use
            roleInstanceDiagnosticManager.SetCurrentConfiguration(config);  

RoleEnvironment.Changing += new EventHandler<RoleEnvironmentChangingEventArgs>(RoleEnvironment_Changing);

    return base.OnStart();
...