如何使用Java API获取Cloud Service(托管服务)诊断数据?

时间:2016-08-30 13:13:45

标签: java azure azure-cloud-services azure-java-sdk

如何使用Java或Rest API获取Cloud Service(托管服务)诊断数据?

我们可以从Azure Portal for Roles获取DiagnosticsConnectionString,并使用它来查询WADPerformanceCounter表(存储API)。

执行时获取以下异常:

  

query:java.util.NoSuchElementException:枚举结果时发生错误,请检查原始异常以获取详细信息。在test.microsoft.azure.storage.core.LazySegmentedIterator.hasNe xt(LazySegmentedIter ator.java:113)的TestStorage.main(TestStorage.java:225)引起:com.microsoft.azure.storage.table.TableServiceException :错误的请求

1 个答案:

答案 0 :(得分:1)

@Prit,你的问题中没有任何代码,以至于我无法弄清楚由什么造成的问题。

所以我在这里发布我的步骤和代码作为帮助的参考。

  1. 将Azure服务的一个角色的DIAGNOSTICS CONNECTION STRINGS复制到Azure管理门户上Cloud Service的选项卡CONFIGURE,连接字符串的格式类似于DefaultEndpointsProtocol=https;AccountName=<storage-account-name>;AccountKey=<storage-key>。< / p>

  2. 使用GUI工具Micorsoft Azure Storage Explorer查找&amp;查看表WADPerformanceCounter

  3. enter image description here

    1. Java代码,用于检索所有诊断数据,如下所示。

      import com.microsoft.azure.storage.CloudStorageAccount;
      import com.microsoft.azure.storage.table.CloudTable;
      import com.microsoft.azure.storage.table.CloudTableClient;
      import com.microsoft.azure.storage.table.TableQuery;
      import com.microsoft.azure.storage.table.TableServiceEntity;
      
      public class WADPerformanceCounterReader {
      
          public static final String storageConnectionString = 
              "DefaultEndpointsProtocol=https;"+
              "AccountName=<storage-account-name>;"+
              "AccountKey=<storage-key>";
      
          public static void main(String[] args) {
              try {
                  // Retrieve storage account from connection-string.
                  CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
      
                  // Create the table client.
                  CloudTableClient tableClient = storageAccount.createCloudTableClient();
      
                  CloudTable cloudTable = tableClient.getTableReference("WADPerformanceCountersTable");
                  TableQuery<TableServiceEntity> query = TableQuery.from(TableServiceEntity.class);
                  for (TableServiceEntity entity : cloudTable.execute(query)) {
                      System.out.println(entity.getPartitionKey()+"\t"+entity.getRowKey());
                 }
              } catch (Exception e) {
                  // Output the stack trace.
                  e.printStackTrace();
              }
          }
      
      }
      
    2. 希望它有所帮助。