0

ローカルストレージ(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>
4

1 に答える 1

0

BeginOnDemandTransferを呼び出した直後にEndOnDemandTransferを呼び出していることが原因である可能性があります。これらのメソッドの名前に基づいて、EndOnDemandTransferが転送が完了するまで、またはそれらの線に沿った何かがブロックされると考える理由を簡単に理解できます。しかし、MSDN(http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.diagnostics.management.roleinstancediagnosticmanager.endondemandtransfer.aspx)によると:

EndOnDemandTransferメソッドは、進行中の診断データの転送を停止します。

于 2013-02-15T13:05:31.917 に答える