gpt4 book ai didi

c# - Azure 实例 0 到 3 未在 WadPerformanceCountersTable 中写入诊断数据

转载 作者:太空狗 更新时间:2023-10-29 21:50:42 34 4
gpt4 key购买 nike

我正在尝试从 Azure WadPerformanceCountersTable 查询数据。

我正在尝试获取最后 5 分钟的数据。

问题是我只从实例 nr 中获取数据。 4,5 和 6,但不是从 0,1,2 和 3 开始。

我用来提取数据的脚本是这样的:

Microsoft.WindowsAzure.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.CloudStorageAccount.Parse(AppDefs.CloudStorageAccountConnectionString);
CloudTableClient cloudTableClient = storageAccount.CreateCloudTableClient();
TableServiceContext serviceContext = cloudTableClient.GetDataServiceContext();
IQueryable<PerformanceCountersEntity> traceLogsTable = serviceContext.CreateQuery<PerformanceCountersEntity>("WADPerformanceCountersTable");
var selection = from row in traceLogsTable
where row.PartitionKey.CompareTo("0" + DateTime.UtcNow.AddMinutes(-timespanInMinutes).Ticks) >= 0
&& row.DeploymentId == deploymentId
&& row.CounterName == @"\Processor(_Total)\% Processor Time"

select row;
CloudTableQuery<PerformanceCountersEntity> query = selection.AsTableServiceQuery<PerformanceCountersEntity>();
IEnumerable<PerformanceCountersEntity> result = query.Execute();
return result;

我的diagnostics.wadcfg 文件是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<DiagnosticMonitorConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration" configurationChangePollInterval="PT1M" overallQuotaInMB="4096">
<PerformanceCounters bufferQuotaInMB="0" scheduledTransferPeriod="PT5M">
<PerformanceCounterConfiguration counterSpecifier="\Memory\Available Bytes" sampleRate="PT60S" />
<PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT60S" />
</PerformanceCounters>
</DiagnosticMonitorConfiguration>

编辑:此外,我将此代码部署在 azure 的测试环境中,并且运行得很好。

编辑 2:更新以包含服务定义 XML:

<ServiceDefinition name="MyApp.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-05.1.7">
<WebRole name="MyApp.Website" vmsize="ExtraSmall">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Imports>
<Import moduleName="Diagnostics" />
</Imports>
</WebRole>
<WorkerRole name="MyApp.Cache" vmsize="ExtraSmall">
<Imports>
<Import moduleName="Diagnostics" />
<Import moduleName="Caching" />
</Imports>
<LocalResources>
<LocalStorage name="Microsoft.WindowsAzure.Plugins.Caching.FileStore" sizeInMB="1000" cleanOnRoleRecycle="false" />
</LocalResources>
</WorkerRole>
</ServiceDefinition>

在阅读用户 @Igorek 的回答后,我已经包含了我的 ServiceDefinition.csdef 配置 XML。我仍然不知道如何配置配置的 LocalResources > LocalStorage 部分。必须为“MyApp.Website”设置配置。

编辑 3:我已对测试 Azure 帐户进行了这些更改。

我已在 ServiceDefinitions.csdef 中进行了设置

<LocalResources>
<LocalStorage name="DiagnosticStore" sizeInMB="4096" cleanOnRoleRecycle="false"/>
</LocalResources>

我已经降低了diagnostics.wadcfg中的OverallQuota和BufferQuota最后,在 WAD-control-container 中,每个实例都有以下配置: http://pastebin.com/aUywLUfE

我必须将其放入真实账户才能看到结果。

最终编辑:显然总体配额是问题所在,尽管我不能保证。

最后,在发布新内容后,我注意到了这一点:

  • 角色实例的配置 XML 位于 wad-control-container 中,总配额1024MB,BufferQuotaInMB 为 1024MB --> 这是正确的,
  • 另外 2 个角色实例的总体配额为 4080MB,BufferQuotaInMB 为 500MB --> 这是不正确的,它们没有写入 WADPerformanceCounters 表中。
  • 属于每个角色实例的两个 XML 配置文件(位于 wad-control-container 中)在新发布之前均已删除。
  • 配置文件 diagnostics.wadcfg 已正确配置:1024MB 全部

所以我认为他们的出版商有问题。

尝试了两种解决方案:

  1. 我从“wad-control-container”中删除了 1 个不正确的 XML,并重新启动了计算机。 XML 被重写,角色实例开始写入 WADPerfCountTable。

  2. 我在另一个不正确的实例上使用了以下脚本,并且不正确的角色实例开始写入 WADPerfCountTable。

            var storageAccount = CloudStorageAccount.Parse(AppDefs.CloudStorageAccountConnectionString);

    DeploymentDiagnosticManager diagManager = new DeploymentDiagnosticManager(storageAccount, deploymentId);

    IEnumerable<RoleInstanceDiagnosticManager> instanceManagers = diagManager.GetRoleInstanceDiagnosticManagersForRole(roleName);

    foreach (var roleInstance in instanceManagers)
    {
    DiagnosticMonitorConfiguration currentConfiguration = roleInstance.GetCurrentConfiguration();
    TimeSpan configurationChangePollInterval = TimeSpan.FromSeconds(60);
    if (!IsCurrentConfigurationCorrect(currentConfiguration, overallQuotaInMb, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1)))
    {
    // Add a performance counter for processor time.
    PerformanceCounterConfiguration pccCPU = new PerformanceCounterConfiguration();
    pccCPU.CounterSpecifier = @"\Processor(_Total)\% Processor Time";
    pccCPU.SampleRate = TimeSpan.FromSeconds(60);

    // Add a performance counter for available memory.
    PerformanceCounterConfiguration pccMemory = new PerformanceCounterConfiguration();
    pccMemory.CounterSpecifier = @"\Memory\Available Bytes";
    pccMemory.SampleRate = TimeSpan.FromSeconds(60);

    currentConfiguration.ConfigurationChangePollInterval = TimeSpan.FromSeconds(60);
    currentConfiguration.OverallQuotaInMB = overallQuotaInMb;
    currentConfiguration.PerformanceCounters.BufferQuotaInMB = overallQuotaInMb;
    currentConfiguration.PerformanceCounters.DataSources.Add(pccCPU);
    currentConfiguration.PerformanceCounters.DataSources.Add(pccMemory);
    roleInstance.SetCurrentConfiguration(currentConfiguration);
    }

    }

此外,我时常收到此错误配置文件缺少一个或多个角色的诊断连接字符串

最后我会选择当前的回复作为答案,因为我已经找到了问题所在。不幸的是,我还没有找到问题的原因。每次发布时,我都会面临配置 XML 发生更改的风险。

最佳答案

查看您的第一个实例如何不将数据传输到诊断,而后面的实例则这样做,一个可能的原因如下:

服务器上的本地诊断存储已填满诊断数据,Azure 无法再将数据从本地存储传输到存储。确保角色配置中分配给 DiagnosticStore 的空间(在本地存储下)大于在diagnostics.wadcfg 中分配的缓冲区配额量

详细说明:我与许多客户有过亲身经历,因此以下是我根据 Microsoft 支持人员的评论得出的自己的解释。 Azure 诊断 API 不会根据 BufferQuota 清理本地存储,直到超出该配额。云项目中的 DiagnosticStore 默认大小与所有示例中使用的 BufferQuota 大小相同 (4096)。发生的情况是,您的 BufferQuota 非常接近 4096megs,但不等于限制,并且您的诊断 API 不会启动清除过程。同时,您对诊断数据的捕获无法再正常运行,因为本地存储几乎已满,并且 Azure 主机停止了应用程序写入 DiagnosticStore 的能力。

一旦本地存储填满,您的其他服务器也应该停止写入诊断数据。

希望这是有道理的。

编辑我的回复,以便为稍后阅读的人准确指出更改:

最简单的方法是降低对OverallQuotaInMb 中指定的需求Diagnostics.wadcfg 类似于 4000(请确保所有其他缓冲区的组合不超过此数字)

或者,或者另外,可以使用 .CSDEF 文件中的 LocalStorage 设置手动指定分配给 VM 上诊断存储的空间。此链接显示了如何操作:http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.diagnostics.diagnosticmonitorconfiguration.overallquotainmb.aspx

关于c# - Azure 实例 0 到 3 未在 WadPerformanceCountersTable 中写入诊断数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17021212/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com