La question fatidique avant adoption de Windows Azure est bien sûr de savoir combien l’hébergement dans le cloud va couter concrètement. L’état actuel des APIs de Windows Azure ne permet pas de répondre directement à cette question.
La méthode la plus simple pour déterminer la consommation des instances déployées dans le cloud, et donc d’en déduire le cout, est d’utiliser l’API de diagnostic de Windows Azure, qui permet (entre autres) d'utiliser des compteurs de performance. Il faut donc déterminer les compteurs à utiliser et parvenir à configurer la production automatique des données de diagnostic. L’exemple suivant montre comment configurer un Web Role pour qu’il enregistre automatiquement et périodiquement le nombre total d’octets sortants de toutes les instances du rôle :
public override bool OnStart()
{DiagnosticMonitorConfiguration diagnosticMonitorConfiguration = DiagnosticMonitor.GetDefaultInitialConfiguration();
PerformanceCounterConfiguration performanceCounterConfiguration = new PerformanceCounterConfiguration(); performanceCounterConfiguration.CounterSpecifier = @"\Applications ASP.NET(__Total__)\Total de demandes sortantes en octets";performanceCounterConfiguration.SampleRate = TimeSpan.FromSeconds(10);
diagnosticMonitorConfiguration.PerformanceCounters.DataSources.Add(performanceCounterConfiguration);
diagnosticMonitorConfiguration.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"));DiagnosticMonitor.Start(cloudStorageAccount, diagnosticMonitorConfiguration);
return base.OnStart();
}
Au bout d’une minute (comme configuré dans le code), la table WADPerformanceCountersTable est créée :
Elle contient bien les données du compteur de performance :
On remarque aisément que le Role écrit dans la table toutes les minutes, en insérant à chaque fois 6 enregistrements, étant donné que SimpleRate a été défini à 10 secondes.
En staging ou en production, les noms des compteurs de performance sont logiquement en Anglais. On pourra utiliser ASP.NET Applications(__Total__)\Request Bytes In Total et ASP.NET Applications(__Total__)\Request Bytes Out Total à la place.
Etant donné que les données sont dans une Table Azure, un simple mécanisme de filtrage OData et des calculs simples permettent de déduire le cout quotidien ou mensuel en fonction des tarifs Azure.
A noter également : les mêmes compteurs permettent de connaitre la consommation en bande passante de n’importe quel site, afin de prévoir le cout potentiel avant une migration dans le cloud.