当前位置: 首页 > news >正文

【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 invalid time interval input

问题描述

在使用 Java 代码调用虚拟机(VM)API获取指标数据时,出现时间格式解析错误。

错误信息:

'{
"code": "BadRequest",
"message": "Detected invalid time interval input: 2024-03-13T13:33:05.123 15:00/2024-03-13T13:48:05.233 15:00, supported Iso 8601 time interval format: (Datetime/Datetime, Datetime/Duration, Duration/Datetime, Duration)"
}'

JAVA 代码:

 static void query() {MetricsQueryClient metricsQueryClient = new MetricsQueryClientBuilder().endpoint("https://management.chinacloudapi.cn").credential(new DefaultAzureCredentialBuilder().build()).buildClient();String resourceId = "<resource id>";Response<MetricsQueryResult> metricsResponse = metricsQueryClient.queryResourceWithResponse(resourceId, Arrays.asList("CpuTime", "Requests"),new MetricsQueryOptions().setGranularity(Duration.ofHours(1)).setTimeInterval(new QueryTimeInterval(OffsetDateTime.now().minusDays(1), OffsetDateTime.now())).setAggregations(Arrays.asList(AggregationType.AVERAGE, AggregationType.COUNT)),Context.NONE);MetricsQueryResult metricsQueryResult = metricsResponse.getValue();for (MetricResult metric : metricsQueryResult.getMetrics()) {System.out.println("Metric name " + metric.getMetricName());for (TimeSeriesElement timeSeriesElement : metric.getTimeSeries()) {System.out.println("Dimensions " + timeSeriesElement.getMetadata());for (MetricValue metricValue : timeSeriesElement.getValues()) {System.out.println(metricValue.getTimeStamp() + " " + metricValue.getTotal());}}}
}

这个会是什么原因导致的呢?

 

问题解答

添加日志,对比代码生成的时间格式字符串后,发现问题根源于本地执行环境的时区设置相关!

因为 Java SDK中timespan参数仅支持UTC的ZoneOffset。如果本地环境设置为非UTC的时区,例如:export TZ="/usr/share/zoneinfo/Hongkong" 就可以复现此问题。

鉴于此种情况,如果不修改本地电脑环境的情况下,可以在代码中进行指定时间为UTC时区。

添加代码:ZoneOffset zoneOffsetUTC = ZoneOffset.ofHours(0);, 然后在设置 setTimeInterval 中指定时区  OffsetDateTime.now().withOffsetSameInstant(zoneOffsetUTC)。这样就可以解决时间格式因时区不同而产生的问题!

修改后的代码为:

 static void query() {MetricsQueryClient metricsQueryClient = new MetricsQueryClientBuilder().endpoint("https://management.chinacloudapi.cn").credential(new DefaultAzureCredentialBuilder().build()).buildClient();String resourceId = "<resource id>";    ZoneOffset zoneOffsetUTC = ZoneOffset.ofHours(0);
    Response<MetricsQueryResult> metricsResponse = metricsQueryClient.queryResourceWithResponse(resourceId, Arrays.asList("CpuTime", "Requests"),new MetricsQueryOptions().setGranularity(Duration.ofHours(1)).setTimeInterval(new QueryTimeInterval(OffsetDateTime.now().minusDays(1).withOffsetSameInstant(zoneOffsetUTC), OffsetDateTime.now().withOffsetSameInstant(zoneOffsetUTC))).setAggregations(Arrays.asList(AggregationType.AVERAGE, AggregationType.COUNT)),Context.NONE);MetricsQueryResult metricsQueryResult = metricsResponse.getValue();for (MetricResult metric : metricsQueryResult.getMetrics()) {System.out.println("Metric name " + metric.getMetricName());for (TimeSeriesElement timeSeriesElement : metric.getTimeSeries()) {System.out.println("Dimensions " + timeSeriesElement.getMetadata());for (MetricValue metricValue : timeSeriesElement.getValues()) {System.out.println(metricValue.getTimeStamp() + " " + metricValue.getTotal());}}}
}

 

参考资料

Azure Resource Metrics - List :https://learn.microsoft.com/en-us/rest/api/monitor/metrics/list?view=rest-monitor-2023-10-01&tabs=HTTP

 timespan :The timespan of the query. It is a string with the following format 'startDateTime_ISO/endDateTime_ISO'.
 

 

http://www.wxhsa.cn/company.asp?id=1261

相关文章:

  • 小记基环树上的最大独立集
  • 2025京东方全球创新伙伴大会隆重举行 AI焕新驱动产业质变跃迁
  • 张量链式法则(上篇):任意维度反向传播公式推导与常见算子解析
  • GAS_Aura-Aura Input Component
  • CF739C Alyona and towers
  • VMware Workstation 17.5.2 Build 23775571
  • 编程要求
  • qoj1828 TraveLog
  • CF827D Best Edge Weight
  • 基于 YOLOv8 和 Streamlit 搭建视频实时目标跟踪与分割 Web 应用的完整流程
  • win10休眠失败_自动启动 解决办法
  • 新人必看:入职第一个月,如何快速熟悉业务并开始测试?
  • 202210_QQ群_神秘的压缩包
  • 人闲的时候
  • 第一周作业
  • [杂谈] 关于听的音乐
  • C# GC
  • CCPC 2024 郑州 个人题解
  • Pollard Rho 分解质因数
  • 7777
  • [豪の学习笔记] 软考中级备考 基础复习#7
  • 经典面试题目:二叉树遍历
  • 十、微程序控制器是什么?
  • 2023CCPC秦皇岛站
  • 2
  • 1
  • 基本数据类型
  • 二、指令执行过程
  • 3
  • Linux命令实践