はじめに
本記事は OCI Compute のカスタムメトリクス取得方法 - Custom Logs Monitoring Plugin 編 です。
カスタムメトリクス取得方法の概要については以下記事を参照してみてください。
メトリクスを収集するサービスとしては Prometheus Node Exporter を使います。
使用方法(デモ)
検証構成
検証構成図は以下の通りです。
なお、以下リソースは作成済みで進めていきます。
- NWリソース
- OCI Bastion
- OCI Compute インスタンス
- IAM ポリシー
- Node Exporter
検証では、以下実施していきます。
- エージェント構成作成
- 環境コードは以下 GitHub にあげてますので、よかったら覗いてみてください
前提条件確認
以下設定項目は、後述するエージェント構成に加えて設定する必要があります。
- IAM ポリシー
- Oracle Cloud Agent の Custom Logs Monitoring Plugin の有効化
- OCI Monitoring への疎通性
IAM ポリシー
動的グループ (Compute) に、use metrics 権限を付与する必要があります。
本検証では以下のポリシーを作成しています。
allow dynamic-group Compute_Dynamic_Group_Oracle, Compute_Dynamic_Group_Windows to use metrics in compartment oci-compute-custom-metrics-broadcast-custom-logs-monitoring-plugin
上記権限を付与することで、Custom Logs Monitoring Plugin が OCI Monitoring にメトリクスをプッシュすることが可能となります。
加えて、動的グループ (Compute) に、UNIFIED_AGENT_CONFIG_GENERATE = use log-content 権限を付与する必要があります。
本検証では以下のポリシーを作成しています。
allow dynamic-group Compute_Dynamic_Group_Oracle, Compute_Dynamic_Group_Windows to {UNIFIED_AGENT_CONFIG_GENERATE} in compartment oci-compute-custom-metrics-broadcast-custom-logs-monitoring-plugin
上記権限を付与することで、Custom Logs Monitoring Plugin が エージェント構成情報を取得して、インスタンス内に設定ファイルを取り込めるようになります。
- 権限とは関係ないですが、インスタンスごとに動的グループを分けています
- というのも、後述するエージェント構成作成時に、関連付ける動的グループを指定する必要があり、管理をわかりやすくするため分けています
Oracle Cloud Agent の Custom Logs Monitoring Plugin の有効化
OS に関係なく、Custom Logs Monitoring Plugin が有効化されており、Running 状態である必要があります。

OCI Monitoring への疎通性
インスタンス内で稼働している Custom Logs Monitoring Plugin からの カスタムメトリクス出力 には、プラグインから Oracle Services Network に所属する OCI Monitoring への疎通性が必要となります。
本構成は以下の通り、インスタンスが所属するプライベートネットワークのルートテーブルに Service Gateway をネクストホップとするルートを設定しています。

-
NAT Gateway宛もありますが、こちらはミドルウェアインストールにインターネットと通信が必要なため追加しています - 正直、
NAT Gatewayで外に抜けられるのであれば、Oracle Services Network宛のTCP/443を個別に登録する必要はありません
エージェント構成作成
エージェント構成を作成していきましょう。
操作方法と設定項目はOSに関係なく同じなので、適宜読み替えてください。
OCI コンソール左上のハンバーガーマークをクリックし、Observability & Management → Agent Configurations をクリックします。

各設定を入力していきます。
コンパートメント は作成するエージェント構成を所属させたいところを指定します。
注意点としては、OCI Compute に付与しているIAMポリシーの権限範囲に、指定するコンパートメントが含まれているかどうかです。
グループタイプ は今回動的グループとしています。他にもユーザーグループがありますが、これは OCI Compute にAPIキーを登録して権限を付与する場合に用います。本構成では動的グループを介して権限を付与しているので、動的グループとしています。

HTTP Endpoint は、実際にメトリクスを収集しているサービスが公開しているエンドポイントを指定します。Custom Logs Monitoring Plugin は本項目で指定したエンドポイントにポーリングし、OCI Monitoring にプッシュします。
本構成では、インスタンス内で Prometheus Node Exporter を稼働させており、そのサービスが公開しているエンドポイントが http://localhost:9100/metrics なのでそのように指定しています。
Namespace は任意ですが、予約接頭辞 (oci_, oracle_) は使えないので注意。
入力が完了したら Create configuration をクリックして完了です。

動作確認
最後、出力されたメトリクスを確認していきましょう。
操作方法はOSに関係なく同じなので、適宜読み替えてください。
- 確認時にはまりポイントがあったので、番外編 に記載しています
OCI コンソール左上のハンバーガーマークをクリックし、Observability & Management → Metrics Explorer をクリックします。

-
Service Metricsは、OCIサービスが出力するメトリクスのみ確認できる機能です -
Metrics Explorerは、OCIサービスのメトリクス及びカスタムメトリクスが確認できる機能です
各種項目を入力し、Update Chart をクリックします。
今回は、Linux インスタンス内で事前にサービス化した Nginx のステータスが running のメトリクスを確認します。

クリック後、画面上部に移動すると、問題なく取得できているのが確認できます。

おわりに
本記事では、Custom Logs Monitoring Plugin 方式についてまとめました。
Management Agent Plugin 方式に比べると、断然導入がしやすい方式ですが、メトリクス取得サービス側 (今回だと Prometheus Node Exporter) でより詳細にフィルタリングしないと、OCI Monitoring にプッシュされるメトリクスが大量になってしまうので、どちらの方式も一長一短だなと感じました。
🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。
番外編
Fluentd の初期設定ファイルに注意
権限、NW疎通性、エージェント構成もインスタンスに読み込まれているのに、なぜかメトリクスがプッシュされない。
そんな時は、Fluentd の設定ファイルを疑ってください。(結構はまった。。。)
- 設定ファイルが空の場合、OSに関係なく、
unified-monitoring-agentサービスを再起動してください - それでもだめな場合は、
Oracle Cloud Agentサービスを再起動してください
Linux における、インスタンスに読み込まれる初期設定ファイルは以下の通りです。
※OCIDはマスクしています
<source>
@type openmetrics
tag ocid1unifiedagentconfigurationoc1ap-tokyo-1hogehoge
<parse>
@type openmetrics
</parse>
<scrape>
resource_type URL
<target>
name custom-name-3be30b8f-80be-953b-3085-f4e94384cd40
url http://localhost:9100/metrics
</target>
</scrape>
</source>
<filter ocid1unifiedagentconfigurationoc1ap-tokyo-1hogehoge>
@type grep
<regexp>
key name
pattern /()/
</regexp>
<exclude>
key name
pattern /()/
</exclude>
</filter>
<match ocid1unifiedagentconfigurationoc1ap-tokyo-1hogehgoe.**>
@type oci_monitoring
compartment ocid1.compartment.oc1..hogehoge
metrics_namespace custom_metrics_namespace_oraclelinux
<buffer tag>
@type memory
queued_chunks_limit_size 20
flush_thread_burst_interval 0.1
chunk_limit_records 50
flush_thread_interval 0.5
flush_thread_count 10
flush_interval 2s
overflow_action drop_oldest_chunk
</buffer>
</match>
Windows における、インスタンスに読み込まれる初期設定ファイルは以下の通りです。
※OCIDはマスクしています
<source>
@type openmetrics
tag ocid1unifiedagentconfigurationoc1ap-tokyo-1hogehoge
<parse>
@type openmetrics
</parse>
<scrape>
resource_type URL
<target>
name custom-name-4d827a4f-ba4d-5de7-75ea-9e210af7e28f
url http://localhost:9182/metrics
</target>
</scrape>
</source>
<filter ocid1unifiedagentconfigurationoc1ap-tokyo-1hogehgoe>
@type grep
<regexp>
key name
pattern /()/
</regexp>
<exclude>
key name
pattern /()/
</exclude>
</filter>
<match ocid1unifiedagentconfigurationoc1ap-tokyo-1hogehoge.**>
@type oci_monitoring
compartment ocid1.compartment.oc1..hogehoge
metrics_namespace custom_metrics_namespace_windows
<buffer tag>
@type memory
queued_chunks_limit_size 20
flush_thread_burst_interval 0.1
chunk_limit_records 50
flush_thread_interval 0.5
flush_thread_count 10
flush_interval 2s
overflow_action drop_oldest_chunk
</buffer>
</match>
見ていただくと分かる通り、<filter>セクションの<exclude>にて全てマッチする正規表現が入っていました。
手動でエージェント構成を作成すると、デフォルトで入っているようです。。
- Terraform で作成する場合は、作成時に制御できます
なのでもし権限等問題ないのにメトリクスがプッシュされない場合は、設定ファイルを疑いましょう。




