如何使用JavaAPI获取云服务(托管服务)诊断数据?

How to get Cloud Service (Hosted Service) diagnostic data using Java API?

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

我们可以从 Azure 门户获取 DiagnosticsConnectionString for Roles 并使用它查询 WADPerformanceCounter Table(存储 API)。

执行时出现以下异常:

query:java.util.NoSuchElementException: An error occurred while enumerating the result, check the original exception for details. at com.microsoft.azure.storage.core.LazySegmentedIterator.hasNe‌​xt(LazySegmentedIter‌​ator.java:113) at TestStorage.main(TestStorage.java:225) Caused by: com.microsoft.azure.storage.table.TableServiceException: Bad Request

@Prit,你的问题中没有任何代码,所以我无法弄清楚是由什么引起的问题。

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

  1. 在Azure管理门户的云服务选项卡CONFIGURE复制云服务一个角色的DIAGNOSTICS CONNECTION STRINGS,连接字符串格式如DefaultEndpointsProtocol=https;AccountName=<storage-account-name>;AccountKey=<storage-key>.

  2. 使用 GUI 工具 Micorsoft Azure Storage Explorer 查找和查看 table WADPerformanceCounter

  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();
            }
        }
    
    }
    

希望对您有所帮助。