4

我想根据 azure 队列的长度自动缩放我的 azure worker 角色。根据我看到的所有文档,这应该非常简单,使用 queueLength 操作数。

我已经实现了自动缩放器,将其上传到我的服务并在我的队列中添加了一堆元素,但是实例的数量并没有增加。

故障排除的最佳方法是什么?我已远程桌面化到该角色,事件日志中没有任何内容。是否有我可以检查的自动缩放事件/错误日志?

编辑:当我在开发环境中运行应用程序时,我看到 autscaler 已成功加载 ServiceInfo.xml。有一个队列条目和一个角色条目。但是,规则似乎并未从 rules.xml 文件中加载。

更多编辑:当我从 rules.xml 文件中删除反应规则和操作数节点时,约束规则加载成功。所以问题出在其中一个节点上。

我的服务信息 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<serviceModel xmlns="http://schemas.microsoft.com/practices/2011/entlib/autoscaling/serviceModel">
  <subscriptions>
<subscription name="MySubscription" subscriptionId="blah" certificateThumbprint="‎blah" certificateStoreName="My" certificateStoreLocation="CurrentUser">
      <storageAccounts>
        <storageAccount alias="targetstorage" connectionString="DefaultEndpointsProtocol=https;AccountName=blah; AccountKey="blah">
          <queues>
            <queue alias="auditqueue" queueName="auditqueue"/>
          </queues>
        </storageAccount>
      </storageAccounts>
      <services>
        <service dnsPrefix="blah" slot="Production" scalingMode="Scale">
          <roles>
            <role alias="ScalingWebRole" roleName="ScalingWebRole" wadStorageAccountName="targetstorage" />
          </roles>
        </service>
      </services>
    </subscription>
  </subscriptions>
</serviceModel>

我的规则 xml 文件:

  <constraintRules>

    <rule name="Default" enabled="true" rank="1">
      <actions>
        <range target="ScalingWebRole" min="1" max="10" />
      </actions>
    </rule>

  </constraintRules>

  <reactiveRules>

    <rule name="Scale up when queue is long" enabled="true">
      <actions>
        <scale target="ScalingWebRole" by="1" />
      </actions>
      <when>
        <greaterOrEqual operand="QueueLength_Avg" than="5" />
      </when>
    </rule>

    <rule name="Scale down when queue is short" enabled="true">
      <actions>
        <scale target="ScalingWebRole" by="-1" />
      </actions>
      <when>
        <less operand="QueueLength_Avg" than="5" />
      </when>
    </rule>

  </reactiveRules>

  <operands>
    <queueLength alias="QueueLength_Avg" aggregate="Average" queue="auditqueue" timespan="00:01:00" />
  </operands>

</rules>
4

2 回答 2

4

Wasabi 会发布很多诊断信息,但您必须启用它。在您托管自动缩放​​器的角色中,更新 app.config 以包含以下内容:

  <system.diagnostics>
    <sources>
      <source name="Autoscaling General" switchValue="All">
        <listeners>
          <add name="AzureDiag" />
        </listeners>
      </source>
      <source name="Autoscaling Updates" switchValue="All">
        <listeners>
         <add name="AzureDiag" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiag"/>
    </sharedListeners>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>

然后,如果您的角色配置为将日志条目上传到 WADs 表(Windows Azure 诊断表),您将在那里看到这些条目。

有关 Wasabi在此处生成的日志条目的更多信息。

于 2012-11-29T00:14:26.250 回答
1

在诊断提供的帮助下(感谢@Julian Dominguez),很明显,自动缩放块第一次尝试访问服务(检查队列长度)时失败了。这是因为系统在 CurrentUser 存储而不是 LocalMachine 存储中查找证书。

一旦我在配置中更改了该设置,它就开始工作了。

于 2012-12-03T05:22:48.143 回答