OCIリソースの使用状況を Autonomous Database のビュー(OCI_USAGE_DATAなど)で確認する。(Oracle Cloud Infrastructure)

OCIリソースの使用状況は OCIコンソール の Limits, Quotas and Usage などから確認できますが、追加設定を行うと Autonomous Database のビューでも参照できるようになります。本記事は Autonomous Database のビューで OCIリソースの使用状況を確認しますやで。
彡(ﾟ)(ﾟ)

# 1. 参考マニュアル

下記マニュアルの記載に従って操作していきます。

> Autonomous Databaseビューを使用したOracle Cloud Infrastructureリソース、コストおよび使用状況レポートの追跡
> https://docs.oracle.com/ja-jp/iaas/autonomous-database-shared/doc/oci-resources-cost-usage-views.html#ADBSA-GUID-7ABD40B3-A9CC-491E-8FBA-E6F37F722E7D

# 2. Autonomous Database の作成

OCIコンソールから Autonomous Database を作成します。特に難しいところは無いのでポチポチと。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/04c9204c-0f52-8d00-02f2-458cc46c6f26.png)

# 3. 動的グループ(Dynamic Group)の作成

動的グループ(Dynamic Group)を作成します。動的グループのマッチングルールは今回はコンパートメントの OCID を設定しました。

```
All {resource.compartment.id = 'ocid1.compartment.oc1..aaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/fcb0694b-ca17-7629-a11d-1ec03c4e7092.png)

# 4. 動的グループへのポリシー(権限)付与

上記3. で作成した動的グループに以下のポリシー(権限)を付与します。マニュアルにも記載がありますが tenancy の OCID はユーザーテナントの OCID ではなくマニュアルに記載された固定のOCIDをそのまま記述します。

> このポリシーのOCIDを別のOCIDに置き換えないでください。このusage-report OCIDは、テナンシのOracle Cloud Infrastructure使用状況データを提供します。

```
Define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq
Endorse dynamic-group ayu-dynamic-group01 to read objects in tenancy usage-report
Allow dynamic-group ayu-dynamic-group01 to read buckets in tenancy
Allow dynamic-group ayu-dynamic-group01 to read autonomous-database in tenancy
Allow dynamic-group ayu-dynamic-group01 to read usage-budgets in tenancy
```

# 5. Autonomous Database のリソース・プリンシパルの有効化

DBMS_CLOUDパッケージを実行して Autonomous Database のリソース・プリンシパルを有効化します。

```sql
COLUMN OWNER FORMAT A30;
COLUMN CREDENTIAL_NAME FORMAT A50;

EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL();

SELECT owner, credential_name FROM dba_credentials 
   WHERE credential_name = 'OCI$RESOURCE_PRINCIPAL' AND owner = 'ADMIN';

OWNER                          CREDENTIAL_NAME
------------------------------ --------------------------------------------------
ADMIN                          OCI$RESOURCE_PRINCIPAL
```

Autonomous Database のリソース・プリンシパル変更は2時間のインターバルを必要とするケースがあるため、認識の上で操作して下さい。

> Autonomous Databaseでリソース・プリンシパルを使用するための前提条件の実行
> https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/adbsa/resource-principal-prereq.html#GUID-3CF59CED-F7DF-46AF-B3CF-E703ED0BB3EE
> リソース・プリンシパル・トークンは2時間キャッシュされます。 したがって、ポリシーまたは動的グループを変更した場合、変更の影響を確認するには、2時間待つ必要があります。

# 6. Autonomous Database のビュー(OCI_USAGE_DATAなど)経由でリソース使用状況を確認

Autonomous Database に接続してビューを SELECT します。

```sql
SET LINESIZE 300;
COLUMN INTERVAL_USAGE_START FORMAT A30 TRUNC;
COLUMN INTERVAL_USAGE_END FORMAT A30 TRUNC;
COLUMN SERVICE_NAME FORMAT A30;
COLUMN RESOURCE_NAME FORMAT A50;
COLUMN CONSUMED_QUANTITY FORMAT A30;
COLUMN CONSUMED_QUANTITY_MEASURE FORMAT A30;
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY/MM/DD HH24:MI:SS.FF';

SELECT DISTINCT SERVICE_NAME, RESOURCE_NAME, CONSUMED_QUANTITY, CONSUMED_QUANTITY_MEASURE, CONSUMED_QUANTITY_UNITS, INTERVAL_USAGE_START, INTERVAL_USAGE_END FROM OCI_USAGE_DATA WHERE SERVICE_NAME = 'DATABASE' AND RESOURCE_NAME = 'PIC_DATABASE_CLOUD_STANDARD_EDITION' ORDER BY 1, 2, 5, 6;

SERVICE_NAME                   RESOURCE_NAME                                      CONSUMED_QUANTITY              CONSUMED_QUANTITY_MEASURE      CONSUMED_QUANTITY_UNITS          INTERVAL_USAGE_START           INTERVAL_USAGE_END
------------------------------ -------------------------------------------------- ------------------------------ ------------------------------ -------------------------------- ------------------------------ ------------------------------
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3419618.0                      OCPUS                          MS                               2020/11/30 18:00:00.000000     2020/11/30 19:00:00.000000
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3600000.0                      OCPUS                          MS                               2020/11/30 19:00:00.000000     2020/11/30 20:00:00.000000
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3600000.0                      OCPUS                          MS                               2020/11/30 20:00:00.000000     2020/11/30 21:00:00.000000
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3600000.0                      OCPUS                          MS                               2020/11/30 21:00:00.000000     2020/11/30 22:00:00.000000
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3600000.0                      OCPUS                          MS                               2020/11/30 22:00:00.000000     2020/11/30 23:00:00.000000
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3600000.0                      OCPUS                          MS                               2020/11/30 23:00:00.000000     2020/12/01 00:00:00.000000
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3600000.0                      OCPUS                          MS                               2020/12/01 00:00:00.000000     2020/12/01 01:00:00.000000
DATABASE                       PIC_DATABASE_CLOUD_STANDARD_EDITION                3600000.0                      OCPUS                          MS                               2020/12/01 01:00:00.000000     2020/12/01 02:00:00.000000
：
```

リソース使用状況をビュー経由で SELECT できました。ちなみにこれらのビューはとても遅かったので、Autonomous Database のユーザー表として CTAS(CREATE TABLE AS SELECT ...) してそちらを参照した方がストレス無く確認できます。
彡(^)(^)

```sql
CREATE TABLE OCI_USAGE_DATA_CTAS AS SELECT * FROM OCI_USAGE_DATA;
```

# 7. まとめ

OCIリソースの使用状況を Autonomous Database のビュー経由で参照できました。リソースの使用状況は OCI CLIコマンドでも採取可能なのですが、取得した情報を使用して色々と計算したいケースなどは RDBMS形式 で SQL を使えた方が便利なケースも多いので、どんどん活用して下さいね。
彡(^)(^)

# Appendix. 

OCI CLI の場合は下記記事の手順でリソースの使用状況は取得可能です。ただしとても面倒(ﾟεﾟ )

https://qiita.com/ora_gonsuke777/items/e0622a2bc2836fab6090