【问题标题】:How to get Cloud Service (Hosted Service) diagnostic data using Java API?如何使用 Java API 获取云服务(托管服务)诊断数据?
【发布时间】:2016-08-30 13:13:45
【问题描述】:

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

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

执行时出现以下异常:

query:java.util.NoSuchElementException: 枚举结果时出错,详情请查看原始异常。在 com.microsoft.azure.storage.core.LazySegmentedIterator.hasNe‌​xt(LazySegmentedIter‌​ator.java:113) 在 TestStorage.main(TestStorage.java:225) 引起:com.microsoft.azure.storage.table.TableServiceException : 错误的请求

【问题讨论】:

  • 感谢@Brian 编辑问题。

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


【解决方案1】:

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

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

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

  2. 使用 GUI 工具 Micorsoft Azure Storage Explorer 查找和查看表格 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();
            }
        }
    
    }
    

希望对你有帮助。

【讨论】:

  • 感谢@Peter Pan -MSFT。表名有错别字。我正在查询 $WADPerformanceCountersTable。它应该是 WADPerformanceCountersTable。
  • 我们可以使用某些 API 获取云服务的诊断连接字符串或存储帐户名称吗?
  • @Prit,DiagnosticConnection 字符串在 serviceconfiguration.cscfg 文件中配置,例如 &lt;Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=xxxx;AccountKey=XXXXX" /&gt;。似乎没有任何公共 API 可用于从 serviceconfiguration.cscfg 文件中提取连接字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 2010-11-29
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多