Últimos cambios en Diagnósticos de Azure (SDK 2.0)

Actualizado: noviembre de 2015

La biblioteca Diagnósticos de Microsoft Azure (Microsoft.WindowsAzure.Diagnostics.dll) en Microsoft Azure SDK para .NET versión 2.0 incluye cambios importantes respecto a la versión 1.8 de la biblioteca. La biblioteca de cliente Diagnósticos de Microsoft Azure ha sido actualizada y ya no depende de la Biblioteca de cliente de almacenamiento versión 1.7, y puede requerir cambios en el código. Este cambio facilita que la aplicación pueda usar las versiones más recientes de la Biblioteca de cliente de almacenamiento. Este tema proporciona información sobre lo que cambió entre las versiones 1.8 y 2.0 y ofrece sugerencias para ayudarle a migrar las aplicaciones existentes a la versión 2.0.

Se han quitado las dependencias de la Biblioteca de cliente de almacenamiento de las API de Microsoft.WindowsAzure.Diagnostics y Microsoft.WindowsAzure.Diagnostics.Management. Varios métodos aceptan un objeto CloudStorageAccount como parámetro de entrada para especificar la cuenta de Almacenamiento de Microsoft Azure asociada a la aplicación (la cuenta de almacenamiento donde se almacena la configuración de diagnóstico de aplicaciones). Estos métodos se han reemplazado por nuevos métodos que ahora aceptan una cadena de conexión en lugar de un objeto CloudStorageAccount para especificar la cuenta de almacenamiento.

La tabla siguiente muestra la asignación entre el método obsoleto y el nuevo en el espacio de nombres de Microsoft.WindowsAzure.Diagnostics.Management:

 

Versión 1.8 (obsoleta) Versión 2.0 (nueva)

CloudAccountDiagnosticMonitorExtensions.CreateDeploymentDiagnosticManager(this CloudStorageAccount storageAccount,string deploymentId)

CreateDeploymentDiagnosticManager

CloudAccountDiagnosticMonitorExtensions.CreateRoleInstanceDiagnosticManager(this CloudStorageAccount storageAccount, string deploymentId, string roleName, string roleInstanceId)

CreateRoleInstanceDiagnosticManager

OnDemandTransferInfo.FromQueueMessage(CloudQueueMessage queueMessage)

FromQueueMessage

DeploymentDiagnosticManager.DeploymentDiagnosticManager(CloudStorageAccount storageAccount, string deploymentId)

DeploymentDiagnosticManager

RoleInstanceDiagnosticManager(CloudStorageAccount storageAccount, string deploymentId, string roleName, string roleInstanceId)

RoleInstanceDiagnosticManager

La tabla siguiente muestra la asignación entre el método obsoleto y el nuevo en el espacio de nombres de Microsoft.WindowsAzure.Diagnostics :

Microsoft.WindowsAzure.Diagnostics

Versión 1.8 (obsoleta) Versión 2.0 (nueva)

DiagnosticMonitor.Start(CloudStorageAccount storageAccount, DiagnosticMonitorConfiguration initialConfiguration)

StartWithConnectionString

DiagnosticMonitor.UpdateStorageAccount(CloudStorageAccount storageAccount)

UpdateStorageAccount

El ejemplo siguiente cambia de forma remota la configuración de diagnóstico de todas las instancias en un rol específico mediante un objeto DeploymentDiagnosticManager. Dos contadores de rendimiento están habilitados para la recopilación y los cambios de configuración guardados. Este ejemplo utiliza la versión 1.8 del ensamblado Microsoft.WindowsAzure.Diagnostics.dll y el constructor DeploymentDiagnosticManager acepta un objeto CloudStorageAccount como parámetro de entrada. El objeto CloudStorageAccount se utiliza para especificar la cuenta de almacenamiento donde se almacena la configuración de diagnóstico de su aplicación.

// Get the connection string. It's recommended that you store the connection string in 
// your web.config or app.config file. Use the ConfigurationManager type to retrieve your 
// storage connection string.  You can find the account name and key in the Windows Azure 
// Management Portal (http://manage.windowsazure.com).
//string connectionString = "DefaultEndpointsProtocol=https;AccountName=<AccountName>;AccountKey=<AccountKey>";
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;

// The deployment ID and role name for your application can be obtained from the Windows 
// Azure Management Portal (http://manage.windowsazure.com). See your application dashboard 
// under Cloud Services.
string deploymentID = "2f10410d4a194b0fa8863365674828ba";
string roleName = "WebRole1";

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);

// Get the DeploymentDiagnosticManager object for your deployment.
DeploymentDiagnosticManager diagManager = new DeploymentDiagnosticManager(storageAccount, deploymentID);

// Get the RoleInstanceDiagnosticManager object for each instance of your role.
IEnumerable<RoleInstanceDiagnosticManager> instanceManagers = diagManager.GetRoleInstanceDiagnosticManagersForRole(roleName);

// Add a performance counter for processor time.
PerformanceCounterConfiguration pccCPU = new PerformanceCounterConfiguration();
pccCPU.CounterSpecifier = @"\Processor(_Total)\% Processor Time";
pccCPU.SampleRate = perfSampleRate;

// Add a performance counter for available memory.
PerformanceCounterConfiguration pccMemory = new PerformanceCounterConfiguration();
pccMemory.CounterSpecifier = @"\Memory\Available Mbytes";
pccMemory.SampleRate = perfSampleRate;

// Iterate through the role instances and update the configuration.
foreach (var roleInstance in instanceManagers)
{
   DiagnosticMonitorConfiguration currentConfiguration = roleInstance.GetCurrentConfiguration();

   currentConfiguration.PerformanceCounters.DataSources.Add(pccCPU);
   currentConfiguration.PerformanceCounters.DataSources.Add(pccMemory);

   //Update the configuration
   roleInstance.SetCurrentConfiguration(currentConfiguration);
}

A continuación se muestra el ejemplo anterior, escrito de nuevo para usar la versión 2.0 del ensamblado Microsoft.WindowsAzure.Diagnostics.dll. El constructor DeploymentDiagnosticManager ahora acepta una cadena de conexión para la cuenta de almacenamiento en lugar de un objeto CloudStorageAccount.

// Get the connection string. It's recommended that you store the connection string in 
// your web.config or app.config file. Use the ConfigurationManager type to retrieve your 
// storage connection string.  You can find the account name and key in the Windows Azure 
// Management Portal (http://manage.windowsazure.com).
//string connectionString = "DefaultEndpointsProtocol=https;AccountName=<AccountName>;AccountKey=<AccountKey>";
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;

// The deployment ID and role name for your application can be obtained from the Windows 
// Azure Management Portal (http://manage.windowsazure.com).  See your application dashboard 
// under Cloud Services.
string deploymentID = "e2ab8b6667644666ba627bdf6f5e4daa";
string roleName = "WebRole1";

// Get the DeploymentDiagnosticManager object for your deployment.
DeploymentDiagnosticManager diagManager = new DeploymentDiagnosticManager(connectionString, deploymentID);

// Get the RoleInstanceDiagnosticManager object for each instance of your role.
IEnumerable<RoleInstanceDiagnosticManager> instanceManagers = diagManager.GetRoleInstanceDiagnosticManagersForRole(roleName);

// Use 45 seconds for the performance counter sample rate.
TimeSpan perfSampleRate = TimeSpan.FromSeconds(45.0);

// Add a performance counter for processor time.
PerformanceCounterConfiguration pccCPU = new PerformanceCounterConfiguration();
pccCPU.CounterSpecifier = @"\Processor(_Total)\% Processor Time";
pccCPU.SampleRate = perfSampleRate;

// Add a performance counter for available memory.
PerformanceCounterConfiguration pccMemory = new PerformanceCounterConfiguration();
pccMemory.CounterSpecifier = @"\Memory\Available Mbytes";
pccMemory.SampleRate = perfSampleRate;

// Iterate through the role instances and update the configuration.
foreach (RoleInstanceDiagnosticManager roleInstance in instanceManagers)
{
   DiagnosticMonitorConfiguration currentConfiguration = roleInstance.GetCurrentConfiguration();

   currentConfiguration.PerformanceCounters.DataSources.Add(pccCPU);
   currentConfiguration.PerformanceCounters.DataSources.Add(pccMemory);

   roleInstance.SetCurrentConfiguration(currentConfiguration);
}

Mostrar: