是否有API可以查看您为Google Cloud Vision API进行此结算周期的通话次数? 我想将此信息添加到用户界面,以便用户知道他们何时会提出要收费的查询。
答案 0 :(得分:2)
最简单的方法是使用控制台上的API page。这将显示请求的总数。考虑到您可以编辑URL以匹配所需的天数。例如,由于今天是4月9日,并且UI上没有9天按钮,我将URL参数编辑为&duration=P9D
。结果是:
这也可以使用Stackdriver Monitoring以编程方式完成,但并不简单。 serviceruntime
指标收集Google API的资源使用情况。
如果您导航到SD监控中的Metrics Explorer并开始在文本框中输入serviceruntime
,则可以选择api/request_count
指标类型:
然后,在filter
选项中,您可以选择包含service=vision.googleapis.com
的Vision API指标。请注意,您还可以通过其他参数(例如请求方法或响应代码)进行筛选和聚合。
这将显示对Vision API的请求数(在我的情况下为4):
但是,这不适合您的使用案例,因为这是一个DELTA
指标,而不是CUMULATIVE
指标(Metric Kinds)。您需要将所有请求相加以获取总数。
由于我不熟悉custom metrics,我的想法是调查基础API call并使用bash脚本汇总时间序列中的所有数据点。
首先,我们需要项目ID和访问令牌:
TOKEN=$(gcloud auth application-default print-access-token)
PROJECT=$(gcloud config get-value project 2>\dev\null)
此外,我们还需要提供TimeInterval
格式的初始和最终时间戳。我们对最新的统计信息感兴趣,因此结束时间将是当前时间(credit)。
在初始阶段,我们只需解析当前年份和月份,因为日期和时间将是已知的:
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
AUX=-01T00:00:00Z
START_MONTH=$(echo $NOW | cut -c1-7)$AUX
考虑到您可能需要在实际重新填充配额时进行调整。 然后,您可以继续调用SD Monitoring API(修改除Vision之外的其他选项或API的过滤器):
curl "https://monitoring.googleapis.com/v3/projects/$PROJECT/timeSeries?filter=metric.type%3D%22serviceruntime.googleapis.com%2Fapi%2Frequest_count%22%20AND%20resource.labels.service%3D%22vision.googleapis.com%22&interval.endTime=$NOW&interval.startTime=$START_MONTH" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
--compressed > result.txt
您可以更改其他服务的指标的过滤器属性。将结果保存到中间文件中不是必需的,但有助于将其可视化。响应将包含timeSeries
对象,请求计数在每个数据点的值字段中:
{
"timeSeries": [
{
...
},
"metricKind": "DELTA",
"valueType": "INT64",
"points": [
{
"interval": {
"startTime": "2018-04-08T11:20:48.224Z",
"endTime": "2018-04-08T11:21:48.224Z"
},
"value": {
"int64Value": "1"
}
},
{
"interval": {
"startTime": "2018-04-08T11:18:18.224Z",
"endTime": "2018-04-08T11:19:18.224Z"
},
"value": {
"int64Value": "2"
}
},
{
"interval": {
"startTime": "2018-04-08T11:18:08.224Z",
"endTime": "2018-04-08T11:19:08.224Z"
},
"value": {
"int64Value": "1"
}
}
]
}
]
}
然后,您可以使用jq
或在我的情况下使用bash脚本(credit)来解析结果以添加这些值:
cat result.txt | grep int64Value | cut -d '"' -f4 | awk '{s+=$1} END {printf "%.0f\n", s}'
根据我案例中的累计请求数
,这将输出4,如预期的那样