ローカルストレージ(10MB、カスタムログおよびダンプデータファイル)を転送するようにAzureDiagnosticsを構成しました。ディレクトリの定期的な転送->blobは問題なく動作します。動作していないように見えるのはオンデマンドのものです。キューだけでなくブロブも手動で作成しましたが、それでも問題ありません。オンデマンド転送を行うコードは次のとおりです。
DiagHelper.cs
public void StartOnDemandTransfer()
{
OnDemandTransferOptions odtOptions = new OnDemandTransferOptions();
odtOptions.From = DateTime.UtcNow.AddMinutes(-10.0);
odtOptions.To = DateTime.UtcNow;
//odtOptions.LogLevelFilter = LogLevel.Verbose;
odtOptions.NotificationQueueName = "wad-on-demand-transfer";
RoleInstanceDiagnosticManager ridm = getRoleInstanceDiagnosticManager();
Guid odtTransferId = ridm.BeginOnDemandTransfer(DataBufferName.Directories, odtOptions);
}
public void EndTransfers()
{
RoleInstanceDiagnosticManager ridm = getRoleInstanceDiagnosticManager();
IDictionary<DataBufferName, OnDemandTransferInfo> activeTransfers = ridm.GetActiveTransfers();
foreach (KeyValuePair<DataBufferName, OnDemandTransferInfo> activeTransfer in activeTransfers)
{
OnDemandTransferInfo odtInfo = activeTransfer.Value;
Guid requestId = odtInfo.RequestId;
ridm.EndOnDemandTransfer(requestId);
}
}
public RoleInstanceDiagnosticManager getRoleInstanceDiagnosticManager()
{
if (roleInstanceDiagnosticManager == null)
{
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(
RoleEnvironment.GetConfigurationSettingValue(wadConnectionString));
roleInstanceDiagnosticManager =
cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
RoleEnvironment.DeploymentId,
RoleEnvironment.CurrentRoleInstance.Role.Name,
RoleEnvironment.CurrentRoleInstance.Id);
}
return roleInstanceDiagnosticManager;
}
admin/flushlogs.aspx.csからの実際のフラッシュ/オンデマンド転送
protected void Button1_Click(object sender, EventArgs e)
{
api.Diag.DiagHelper diag = new api.Diag.DiagHelper();
diag.StartOnDemandTransfer();
diag.EndTransfers();
}
質問:
Windows Azure Diagnosticsが指定したローカルストレージを転送しない理由を誰かが知っていますか?
追加の詳細:
定期的な転送は問題なく機能するため(手動でblobを作成する必要があったため)、Azure Diagnosticsを正しく初期化したと思いますが、それでもinitコードは次のとおりです。
// ... Other init stuff ...
// Custom logs
LocalResource localResource = RoleEnvironment.GetLocalResource("ApiLogFolder");
DirectoryConfiguration dirConfig = new DirectoryConfiguration();
dirConfig.Container = "apilog-blob";
dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes;
dirConfig.Path = localResource.RootPath;
config.Directories.DataSources.Add(dirConfig);
config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(10.0);
roleInstanceDiagnosticManager.SetCurrentConfiguration(config);
ServiceDefinition.csdefでローカルストレージを次のように定義しました
<LocalResources>
<LocalStorage name="Microsoft.WindowsAzure.Plugins.Caching.FileStore" sizeInMB="1000" cleanOnRoleRecycle="false" />
<LocalStorage name="ApiLogFolder" cleanOnRoleRecycle="false" sizeInMB="10" />
</LocalResources>