はじめに

DatadogにはOracle Cloud Infrastructure(OCI)とのインテグレーションが用意されており、インテグレーションを実施することで監視対象のOCIテナンシのメトリクスやログ、リソース情報等を収集することが可能です。
インテグレーション設定自体はOCIのリソースマネージャーのスタックとして用意されており、数ステップで完了する簡単なものになっています。
インテグレーションを実施してしまえば何も考えずにDatadogで監視することができるのですが、ここではどのような仕組みでOCIとDatadogが連携しているのか理解していきたいと思います。

インテグレーションの全体構成

インテグレーションの全体図はDatadogのドキュメントより引用します。
Datadog より引用

インテグレーションによりOCI側に作成される主なリソースは以下のとおりです。

作成されるリソース 説明
IAMユーザー、グループ Datadog専用のユーザーが作成されます。テナンシ内のリソースの情報を取得したり、メトリクスやログをDatadogに送信するための仕組みの設定等に利用されます。
動的グループ コネクタ・ハブ、ファンクション用の動的グループがそれぞれ作成されます。
ポリシー Datadog用ユーザーや動的グループの権限を定義するポリシーが作成されます。ポリシーの内容は後で詳しく見ていきます。
コンパートメント Datadog用のリソースが格納される専用のコンパートメントが作成されます。ただし上記のIAMやポリシーはルートコンパートメントに作成されます。
コネクタ・ハブ コネクタハブにコネクタが作成されます。メトリクス転送用やログ転送用のコネクタです。
ファンクション メトリクス転送用とログ転送用のファンクションが作成されます。コンテナイメージはDatadog所有のコンテナ・レジストリから取得されるみたいです。
VCN、サブネット、NATゲートウェイ Datadog用のネットワークリソースが作成されます。メトリクスやログはここのNATゲートウェイからDatadogへ送信されます。

Datadogに付与される権限

Datadog用ユーザーや動的グループに付与されるポリシーを見ていきます。
OCIDは一部マスクしています。

dd-svc-policy

Define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wf********
Allow group id ocid1.group.oc1..aaaaaaaaewqe2m2yp3lwzod3qb3cydwthwk52qkcfe4l******** to read all-resources in tenancy
Allow group id ocid1.group.oc1..aaaaaaaaewqe2m2yp3lwzod3qb3cydwthwk52qkcfe4l******** to use tag-namespaces in tenancy
Allow group id ocid1.group.oc1..aaaaaaaaewqe2m2yp3lwzod3qb3cydwthwk52qkcfe4l******** to manage serviceconnectors in compartment id ocid1.compartment.oc1..aaaaaaaaw5yjp3tredilc7bak2abyl4lybrlcfkp57wzplwm2j5xbo34rg5q
Allow group id ocid1.group.oc1..aaaaaaaaewqe2m2yp3lwzod3qb3cydwthwk52qkcfe4l******** to manage functions-family in compartment id ocid1.compartment.oc1..aaaaaaaaw5yjp3tredilc7bak2abyl4lybrlcfkp57wzplwm2j5xbo34rg5q where ANY \{request.permission = 'FN_FUNCTION_UPDATE', request.permission = 'FN_FUNCTION_LIST', request.permission = 'FN_APP_LIST'\}
Endorse group id ocid1.group.oc1..aaaaaaaaewqe2m2yp3lwzod3qb3cydwthwk52qkcfe4l******** to read objects in tenancy usage-report

1行目と6行目のポリシーはOCI管理のバケットからコスト・レポートを取得するために必要な権限です。
残りが監視対象テナンシに対してDatadog用ユーザーが持つ権限になります。
すべてのリソースの読み取り権限とタグの利用権限、そしてDatadogコンパートメント内のコネクタ・ハブとファンクションの管理権限が付与されていることがわかります。

dd-dynamic-group-policy

Allow dynamic-group id ocid1.dynamicgroup.oc1..aaaaaaaa46hu7bz3etakm7nnpbzezekeawyfftbkdqies7******** to read log-content in tenancy
Allow dynamic-group id ocid1.dynamicgroup.oc1..aaaaaaaa46hu7bz3etakm7nnpbzezekeawyfftbkdqies7******** to read metrics in tenancy
Allow dynamic-group id ocid1.dynamicgroup.oc1..aaaaaaaa46hu7bz3etakm7nnpbzezekeawyfftbkdqies7******** to use fn-function in compartment id ocid1.compartment.oc1..aaaaaaaaw5yjp3tredilc7bak2abyl4lybrlcfkp********
Allow dynamic-group id ocid1.dynamicgroup.oc1..aaaaaaaa46hu7bz3etakm7nnpbzezekeawyfftbkdqies7******** to use fn-invocation in compartment id ocid1.compartment.oc1..aaaaaaaaw5yjp3tredilc7bak2abyl4lybrlcfkp********
Allow dynamic-group id ocid1.dynamicgroup.oc1..aaaaaaaaasin2s4it26hyamkskxfx2o34qvlrisrvowmzs******** to read secret-bundles in compartment id ocid1.compartment.oc1..aaaaaaaaw5yjp3tredilc7bak2abyl4lybrlcfkp********

コネクタ・ハブ用の動的グループにはログとメトリクスの読み取り権限、Datadogコンパートメント内のファンクションの実行権限が付与されていること、ファンクション用の動的グループにはVaultに格納されたシークレットを読み取る権限が付与されていることがわかります。

インテグレーション設定がどのように反映されるか

Datadog側でインテグレーション設定をいくつか変更してそれがOCI側にどのように反映されるのかを見ていきたいと思います。

取得対象メトリクスを変更する

変更前Datadogインテグレーション設定
すべてのサービスがオンになっています。

変更前OCIコネクタ・ハブ設定
コネクタのソース接続設定に多数のネームスペースが登録されていることがわかります。


変更後Datadogインテグレーション設定
対象のサービスをComputeのみに変更しました。

変更後OCIコネクタ・ハブ設定
ソース接続のネームスペースが少なくなっています。
コネクタが対象とするネームスペースを調整することでメトリクス取得対象をコントロールしていることがわかります。

監査ログからDatadog用ユーザーがコネクタを変更していることがわかります。

監査ログを除外する

次はログ収集の設定を変更していきます。
変更前Datadogインテグレーション設定

変更前OCIコネクタ・ハブ設定
監査ログ用のコネクタがアクティブな状態です。

変更後Datadogインテグレーション設定
Auditのみオフにします。

変更後OCIコネクタ・ハブ設定
監査ログ収集用のコネクタが削除されました。

監査ログにはDatadogユーザーがコネクタを削除している履歴が記録されていました。

ログ収集を無効化する

最後にログ収集設定自体を無効化してみます。
変更前Datadogインテグレーション設定
Enable Log Collectionは有効な状態です。

変更後Datadogインテグレーション設定
Enable Log Collectionをオフにします。

変更後OCIコネクタ・ハブ設定
ログ収集用のコネクタがすべて削除されました。

変更後OCIファンクション設定
ログ収集用のファンクションは削除されず残ったままでした。
呼び出し元のコネクタが削除されているためファンクションが起動することはなく費用も発生しないことから、そのまま残る仕様になっていると考えられます。

まとめ

OCIの機能をうまく組み合わせてOCIの情報をDatadogに送信する仕組みが構築されていました。
またDatadog側の設定変更がどのようにOCI側の動作に影響するかも見ることができました。
OCIサービスの使い方としてもとても良く考えられており、OCIの使い方の参考にもなると感じました。