皆様、こんにちは。y.kobayashiです。
※本記事はOracle Cloud Infrastructure Advent Calendar 2025シリーズ3のDay25にエントリーしています。
本記事では、コネクタ・ハブとFunctionsを組み合わせてモニタリングに送られるメトリックの中からCPUUtilizationだけを抽出し、オブジェクト・ストレージに保存する方法をご紹介します。
目次
コネクタ・ハブについて
コネクタ・ハブは、OCI各サービスが生成するログやメトリックなどのデータを他のサービスへ転送できるサービスです。
さらに途中にFunctionsを挟むことで、任意のロジックを適用しデータの加工・フィルタリング・変換など行うことが可能になります。
今回の構成では、モニタリングのメトリックをコネクタ・ハブが受け取り、FunctionsでCPUUtilizationだけを抽出してオブジェクト・ストレージに保存する仕組みを構築します。
構成イメージ

設定手順
ポリシーの作成
コネクタ・ハブ、ファンクション、オブジェクト・ストレージが相互にアクセスできるようにするため、必要なポリシーを作成します。
| ポリシー | 説明 |
| allow any-user to use fn-function in compartment id <ファンクションが配置されているコンパートメントOCID> where all {request.principal.type='serviceconnector', request.principal.compartment.id=<'コネクタ・ハブが配置されているコンパートメントOCID'>} | サービスコネクタがファンクションを利用できるようにするためのポリシー |
| allow any-user to use fn-invocation in compartment id <ファンクションが配置されているコンパートメントOCID> where all {request.principal.type='serviceconnector', request.principal.compartment.id=<'コネクタ・ハブが配置されているコンパートメントOCID'>} | サービスコネクタがファンクションを実行できるようにするためのポリシー |
| allow any-user to manage objects in compartment id <オブジェクト・ストレージが配置されているコンパートメントOCID> where all {request.principal.type='serviceconnector', target.bucket.name=<'バケット名'>, request.principal.compartment.id=<'コネクタ・ハブが配置されているコンパートメントOCID'>} | サービスコネクタが対象バケット内のオブジェクト操作を実行できるようにするためのポリシー |
オブジェクト・ストレージの作成
抽出したCPUUtilizationメトリックを保存するバケットを作成します。
こちらのドキュメントをご参照ください。
その7 - オブジェクト・ストレージを使う | OCIチュートリアル
ファンクションの作成
コネクタ・ハブから受け取ったメトリックを解析し、CPUUtilizationのみを抽出する関数を作成します。
こちらのドキュメントをご参照ください。
OCI Functions ハンズオン | OCIチュートリアル
今回使用するファンクションは以下のとおりです。

次にファンクションで使用するPythonコードはこちらになります。
import io
import json
"""CPUUtilizationメトリックだけ抽出するスクリプトです"""
def handler(ctx, data: io.BytesIO = None):
try:
#受け取ったバイトデータを読み込む
row_bytes = data.read()
#バイトデータをUTF-8に変換
json_text = row_bytes.decode("utf-8")
#JSON文字列をリストに変換
metrics = json.loads(json_text)
#CPUUtilizationメトリックだけを格納するリスト
cpu_utilization_metrics =[]
#CPUUtilizationメトリックのみを抽出
for metric in metrics:
if metric.get("name") == "CpuUtilization":
cpu_utilization_metrics.append(metric)
return cpu_utilization_metrics
except (Exception) as ex:
#エラー内容をログ出力
print("ERROR", ex, flush=True)
コネクタ・ハブの作成
モニタリングをソース、ターゲットをオブジェク・トストレージとして設定し、ファンクションを中継させるコネクタ・ハブを作成します。
OCIコンソールのメニューから「監視および管理」→「コネクタ」を選択します。

「コネクタの作成」を選択し、以下の内容を入力のうえ「作成」をクリックします。
※()内に記載している値は、今回の設定例です。
- コネクタ名:任意(cpu-metrics-connector)
- 説明:任意(CPUUtilizationメトリックを抽出するコネクタ)
- リソース・コンパートメント:任意
- ソース:モニタリング
- ターゲット:オブジェクト・ストレージ
メトリック・コンパートメント:任意
ネームスペース:oci_computeagent - タスクの選択:ファンクション
- コンパートメント:任意
- ファンクション・アプリケーション:任意(cpu-metrics-app)
- ファンクション:任意(get-cpu-metrics)
- コンパートメント:任意
- バケット:任意(buket-1)
コネクタ・ハブの作成ができました。

動作確認
オブジェクト・ストレージに保存されたファイルを確認し、メトリックが正しく抽出されていることを確認します。
まず、オブジェクト・ストレージから対象のファイルをダウンロードします。

ダウンロードしたファイルの内容を確認するとCPUUtilizationのみが正しく抽出されていることが確認できます。
本ログはログファイルの一部を抜粋したものです。

さいごに
本記事ではコネクタ・ハブとFunctionsを組み合わせてモニタリングのメトリックからCPUUtilizationのみを抽出し、オブジェクト・ストレージに保存する方法をご紹介しましたが、いかがでしたでしょうか。
本構成は「特定のメトリックだけを蓄積したい」「独自の処理を行ってから保管したい」などのユースケースに応用できます。
メトリックの加工や活用を検討する際の一例としてご参考になれば幸いです。
最後まで読んでいただき、ありがとうございました。
参考
以下のドキュメントもあわせてご参照ください。



