Oracle Cloud 甲骨文云利用 API(OCI)查询虚拟机实例(VM)已使用流量信息

小助手读文章 00:00 / 00:00

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

关于 OCI 命令行,在《Oracle Cloud 甲骨文云对象存储 ObjectStorage API(OCI)详细使用说明》已有提及,所以在进行下文操作前,请先看这篇文章第一节配置环境和第二节配置参数,下文默认认为您已配置好运行环境。

一般来说,上规模的厂商,系统就会做的更精细,也更复杂。Oracle Cloud 就不像良心云、套路云,会提供直接查询流量的地方,虽然 Oracle 很大方给了 10T 的免费流量,但是有时候还是会有想要查询已使用流量的需求,开搞。

原理

在 Web 控制面板中,有监督与管理-成本分析,在这里可以看到每一个云资源的详细使用情况,也可以看到统计信息:

统计分析.png

但是有时候不方便使用网页查询,比如要进行批量查询时,就需要 oci 命令来大展身手了。

OCI 命令

分析命令

root@oc-uk:~/.oci# oci usage-api usage-summary request-summarized-usages

必填参数

--granularity MONTHLY    统计粒度,HOURLY - 每小时汇总,DAILY - 每日汇总,MONTHLY - 每月汇总,TOTAL - 尚不支持
--time-usage-started 2021-08-01    统计开始时间
--time-usage-ended 2021-08-31     统计结束时间
--tenant-id    租户编号

选填参数

--query-type USAGE    查询类型,USAGE - 查询使用数据,COST- 查询成本/计费数据
--compartment-depth 6     隔间的深度级别
--group-by '["service"]'    按什么来汇总结果,service 是类别汇总,skuName 是明细汇总

使用示例

查询 8 月份使用量汇总

root@oc-uk:~/.oci# oci usage-api usage-summary request-summarized-usages --granularity MONTHLY --query-type USAGE --compartment-depth 6 --group-by '["service"]' --time-usage-started 2021-08-01 --time-usage-ended 2021-08-31 --tenant-id ocid1.tenancy.oc1..*

返回的是 json 格式,可以自己做个加工,比如使用 jq 命令摘取有用信息:

root@oc-uk:~/.oci# jq -r '.data.items[] as $t | [$t."service",$t."sku-name",$t."computed-quantity",$t."unit"] | @csv'
"Object Storage",,0.0007,"10K Requests"
"Telemetry",,0.02322,"Million Datapoints"
"Object Storage",,2.8177833e-05,"GB Months"
"Compute",,713,"OCPU Hours"
"Virtual Cloud Network",,21.65077404549,"GB Months"
"Block Storage",,44.63543981444,"GB Months"

其中 "Virtual Cloud Network" 就是流量信息,可以看出我 8 月份已经使用了 21G 左右。

Shell 脚本

说明

前提条件:oci 命令正确安装,配置文件为 ~/.oci/config
用法说明:执行 ./cost-analysis.sh '' 2021-08-01 2021-08-31

  • 第一个参数若指定任意值,则查询明细,否则查询汇总
  • 第二个参数是查询期间开始日期,不指定则默认当月 1 号
  • 第三个参数是查询期间结束日期,不指定则默认当月最后一天

脚本

root@oc-uk:~/.oci# cat ./cost-analysis.sh
#!/bin/bash
if [ -n "$1" ]; then
echo -e "++++++查询目标是用量明细++++++\n"
group_by="[\"service\",\"skuName\"]"
else
echo -e "++++++查询目标是用量汇总++++++\n"
group_by="[\"service\"]"
fi
if [ ! -n "$2" ]; then
start_date=`date +"%Y-%m-01"`
else
start_date=$2
fi
if [ ! -n "$3" ]; then
end_date=`date -d"$(date -d"1 month" +"%Y%m01") -1 day" +"%Y-%m-%d"`
else
end_date=$3
fi
echo -e "查询期间:${start_date} ~ ${end_date}"
ten_id=$(cat ~/.oci/config |grep tenancy=|awk -F = '{print $2}')
echo -e "查询租户:${ten_id}"
jq_para="jq -r '.data.items[] as \$t | [\$t.\"service\",\$t.\"sku-name\",\$t.\"computed-quantity\",\$t.\"unit\"] | @csv'"
cmd="eval echo \$(oci usage-api usage-summary request-summarized-usages --granularity MONTHLY --query-type USAGE --compartment-depth 6 --group-by '${group_by}' --time-usage-started ${start_date} --time-usage-ended ${end_date} --tenant-id ${ten_id} ) | ${jq_para}"
echo -e "查询命令:\n"
echo -e "echo \$(oci usage-api usage-summary request-summarized-usages --granularity MONTHLY --query-type USAGE --compartment-depth 6 \\"
echo -e " --group-by '${group_by}' --time-usage-started ${start_date} --time-usage-ended ${end_date} \\"
echo -e " --tenant-id ${ten_id}"
echo -e ") | ${jq_para}"
echo -e "\n"
echo "++++++查询结果++++++"
${cmd}

执行结果

root@oc-uk:~/.oci# ./cost-analysis.sh '' 2021-08-01 2021-08-31
++++++查询目标是用量汇总++++++

查询期间:2021-08-01 ~ 2021-08-31
查询租户:ocid1.tenancy.oc1..*
查询命令:

echo $(oci usage-api usage-summary request-summarized-usages --granularity MONTHLY --query-type USAGE --compartment-depth 6 \
 --group-by '["service"]' --time-usage-started 2021-08-01 --time-usage-ended 2021-08-31 \
 --tenant-id ocid1.tenancy.oc1..*
) | jq -r '.data.items[] as $t | [$t."service",$t."sku-name",$t."computed-quantity",$t."unit"] | @csv'


++++++查询结果++++++
ServiceError:
{
    "code": "NotAuthenticated",
    "message": "The required information to complete authentication was not provided or was incorrect.",
    "opc-request-id": "688F5804577846C4BB1A5D06E1A027B2/86D060DFAE01AC47E7C2231AB285390F/B5EE261D09EB51552842C5DA8492F914",
    "status": 401
}

发现问题,查询命令在 shell 可以直接执行查询,但是放在脚本里,就出现了错误 401,希望有大佬帮忙看下是什么原因。


参考文章:

1、《OCI CLI Command Reference - usage-api


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 部署教程流量监控apioracle甲骨文oci云主机 的文章

 本文最后更新于 2021/08/31 11:41:28,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 经验 > Oracle Cloud 甲骨文云利用 API(OCI)查询虚拟机实例(VM)已使用流量信息

精选评论

  1. kevin
    kevin 回复

    Windows 10Chrome 92.0.4515.159来自 火星 的大神

    你的script没问题啊,我的都可以显示呢。我没遇到你那个问题。

    查询目标是用量汇总

    查询期间:2021-09-01 ~ 2021-09-30
    查询租户:ocid1.tenancy.oc1..*
    查询命令:

    echo $(oci usage-api usage-summary request-summarized-usages --granularity MONTHLY --query-type USAGE --compartment-depth 6 \
    --group-by '["service"]' --time-usage-started 2021-09-01 --time-usage-ended 2021-09-30 \
    --tenant-id ocid1.tenancy.oc1..*
    ) | jq -r '.data.items[] as $t | [$t."service",$t."sku-name",$t."computed-quantity",$t."unit"] | @csv'

    查询结果
    "Virtual Cloud Network",,74.71667381425,"GB Months"
    "Compute",,288,"OCPU Hours"
    "Block Storage",,108.176879999952,"GB Months"
    "Telemetry",,0.1044,"Million Datapoints"

    1. 欧文斯

      感谢反馈,我再研究一下自己是哪里的配置问题