こんにちは! m.uriuです。
Oracle Cloud Infrastructure Advent Calendar 2024のシリーズ2、Day21記事です。
今回はZabbix 6.0.29でリリースされた「Oracle Cloud by HTTP」テンプレートについてのお話です。
私事ですが、ここ1年間は業務でZabbixと幾度となく格闘し続けておりました。
慣れないツールを相手に、時に振り回され、幾度となく心が折れそうになりましたが、今や愛着すら感じるようになりました。(筆者の主観)
そんなこんなで年末。アドベントカレンダーの記事を書こうとネタを探していたところ、ZabbixでOCIリソースのデータを簡単に取得できる機能が、Zabbix7.0に標準搭載されているというではありませんか。
使ってみるとあまりの便利さに驚愕。想像以上の素敵機能だったので、本記事ではOCIとの連携機能
「Oracle Cloud by HTTP」テンプレートについて、初期設定の手順やどんなデータが取得できるのか、といった内容をご紹介したいと思います。
目次
Oracle Cloud by HTTPテンプレートについて
まずは、Oracle Cloud by HTTPテンプレートの簡単な概要の説明から。
Oracle Cloud by HTTPテンプレートは、OCIのリソースを監視するためのマスターテンプレートです。
OCI上の主要なリソースを検出してホストとして登録し、6種のテンプレートから対応したものを適用して、リソースのデータの収集まで自動で行ってくれます。
通常Zabbixでは、オンプレやクラウド問わず監視対象サーバの情報を取得するには、監視対象ホストにZabbix Agentをインストールしてホストを有効化、Agentをインストールできない機器は外部からデータ取得できるように設定、Zabbixコンソールで監視対象にアイテムやトリガーといった監視設定を登録、といった手順が必要で、監視対象が多くなると初期設定が非常に面倒です。(実体験)
しかし、Oracle Cloud by HTTPテンプレートを使用してOCIリソースの読み込みを行うと、監視対象のホストにAgentをインストールせず、OCIリソースをZabbixコンソールにホスト登録できます。
特に、コンピュートインスタンスだけでなく、ブートボリュームやオブジェクトストレージ等もホストとして登録し、メトリクスデータを取得してくれるのは非常に嬉しい機能です。
Oracle Cloud by HTTPテンプレートに対応したOCIリソースは、以下の6種です。
- {$OCI.API.COMPARTMENT.COMPUTE} - コンピュートインスタンス用
- {$OCI.API.COMPARTMENT.VCN} - 仮想クラウドネットワーク用
- {$OCI.API.COMPARTMENT.VOLUME.BLOCK} - ブロックボリューム用
- {$OCI.API.COMPARTMENT.VOLUME.BOOT} - ブートボリューム用
- {$OCI.API.COMPARTMENT.OBJECT.STORAGE} - オブジェクトストレージ用
- {$OCI.API.COMPARTMENT.AUTONOMOUS.DB} - 自律型データベース用
ちなみに既存のZabbixでも似たような機能を持ったテンプレートは存在しており、AWS by HTTPやAzure by HTTPなどの、他クラウドでも同様のことは出来ました。2024年になってようやくOCI版が登場したわけです。
また冒頭でも触れましたが、Oracle Cloud by HTTPテンプレートはZabbix 6.0.29(2024年4月22日リリース)で導入され、現在のZabbix7.0では標準搭載されています。
もし既存のZabbix環境でこのテンプレートを導入する場合、最新のテンプレートをZabbix Gitリポジトリからダウンロード&インポートが必要です。(公式ドキュメント)
Oracle Cloud by HTTPテンプレートの仕組み
Oracle Cloud by HTTPテンプレートを使ってOCIの情報を取得する仕組みについて、軽く調べた内容をご紹介。
通信の流れとしては、Zabbix Server側で事前に入力しておいた監視用ユーザのAPIキーやテナンシのOCID等の認証情報を、Zabbix ServerからOCI APIエンドポイントへ送信。次にCore Services APIやDatabase Service APIといったOCI APIエンドポイントへアクセス。最後にHTTP GETリクエストと POSTリクエストを送信してOCIテナンシ内のリソースの情報を取得し、Zabbixコンソール上に表示します。
図にするとこんな感じ。
取得したOCIのリソースのホスト登録と対応したテンプレートの紐づけは、Oracle Cloud by HTTPテンプレートのディスカバリルールで実施され、ホストに合わせたメトリクスの収集を行ってくれます。(インスタンスならCPU/メモリ使用率、オブジェクトストレージならオブジェクト数と使用済みバケットサイズ等。)
Zabbix公式のブログに、この振り分けについて説明した画像があったので紹介。
取得できるデータ
先述した通り、Oracle Cloud by HTTPテンプレートを使用したデータの取得は、OCI APIエンドポイントからになります。
ホストにZabbix Agentを入れているわけではないので、このテンプレートで登録したホストから取得できるデータは、基本的にOCI上で確認できるメトリクスデータになります。
サーバ内にあるデータの監視、例えばSyslog監視やコンピュートのストレージの使用率など(ADBは取得可能)のOCIコンソール上で表示されないメトリクスデータは取得できないので、ホストにZabbix Agentをインストールしてデータを取得する必要があります。
取得できるメトリクスが決まっているものの、監視対象によく設定されるメトリクスはある程度抑えられており、監視設定からデータ収集まで自動的に行ってくれるのは非常に便利です。
以下に、取得できるメトリクスの一部を紹介します。
- CPU使用率(コンピュートインスタンス、ADB)
- メモリ使用率(コンピュートインスタンス)
- ストレージ使用率、クエリ実行数、セッション数(ADB)
- ボリュームのIOPS(ブートボリューム、ブロックボリューム)
- オブジェクト数や使用中のバケット容量(オブジェクトストレージ)
Oracle Cloud by HTTPテンプレートの導入手順
ここからはOracle Cloud by HTTPテンプレートを使って、OCIのリソースを読み取る手順を紹介します。
私も公式ドキュメントを見ながら実際に設定してみたのですが、少し手間取った部分もあったのでそこも紹介します。
Zabbix環境の構築については割愛します。以下のブログなどを参考にしてください。
参考ブログ
事前準備
- Zabbix 6.0以降で、Oracle Cloud by HTTPテンプレートが導入されている環境
- ZabbixサーバからOCI APIエンドポイントへのHTTPS通信(TCP/443)の通信許可設定
- 監視用のOCIユーザアカウント
- 監視対象のOCIリソース(今回はコンピュートインスタンス、ブートボリューム、ADBを用意)
1.まずOCIコンソールで監視用のユーザを作成(現在使用しているユーザでも可)して、以下のポリシーをアタッチします。
Allow group '監視用ユーザのグループ' to read metrics in tenancy
Allow group '監視用ユーザのグループ' to read instances in tenancy
Allow group '監視用ユーザのグループ' to read subnets in tenancy
Allow group '監視用ユーザのグループ' to read vcns in tenancy
Allow group '監視用ユーザのグループ' to read vnic-attachments in tenancy
Allow group '監視用ユーザのグループ' to read volumes in tenancy
Allow group '監視用ユーザのグループ' to read objectstorage-namespaces in tenancy
Allow group '監視用ユーザのグループ' to read buckets in tenancy
Allow group '監視用ユーザのグループ' to read autonomous-databases in tenancy
2.監視ユーザのAPIキーを作成し、キーペアとフィンガープリントを取得します。
3.テナンシ、監視ユーザ、監視したいリソースがあるコンパートメント、それぞれのOCIDを取得します。
4.Zabbixコンソールでホストを作成して、そのホストにOracle Cloud by HTTPテンプレートを設定します。
(ホスト作成時点では、最低限「ホスト名」と「ホストグループ」は設定します(適当でよい)。インターフェースは未設定でOK。)
5.ホストのマクロ設定で、以下の認証情報のマクロと値を設定します。
{$OCI.API.TENANCY}:テナンシのOCID
{$OCI.API.USER}:監視用ユーザのOCID
{$OCI.API.FINGERPRINT}:フィンガープリント
{$OCI.API.PRIVATE.KEY}:API秘密鍵の内容
ここで注意。公式ドキュメントでは{$OCI.API.PRIVATE.KEY}は秘密鍵内容をコピーして貼り付け、とありますが少し加工が必要。具体的には以下の3点。メモ帳ツールなどで少し加工して入力してください。
- 秘密鍵の内容は改行詰めして1行にする。
- 秘密鍵の内容をペーストすると改行部分で半角スペースが入り上手く認識されないので、半角スペースを削除する。
- 秘密鍵の末尾の「OCI_API_KEY」は取り除く。
こんな感じの1行のテキストになればOK。
例)
-----BEGIN PRIVATE KEY-----MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCaubV/KV6NByf7BWXkbz2+eXbMvxmolGP1F47Pm+yiUSeJtjVDRraGebLguokcFShBA51kYnmSwZVVv2kCTqqJI4NjUeV9jvmJeuMKIQ1PM1LBO/0jpZo2GDRT2BJo697fzk~中略~CgYB5I9gmnYtPKT1nJGCRtADhgFJ4WpFgAMTvlVWoJzgjlPaGzt9t5mNIuTLPzQDFKAnptusp17XavO8PG1lxgNh+JGkUBrApwGlNnQgn40g41mDmnLQjYLhp40WYRuzBp12Pk+DUXPyrsGLODp+d774IEHuJHAaY3bCNJX+CAjukjw==-----END PRIVATE KEY-----
6.ホストのマクロ設定で、以下のOCI APIエンドポイント情報のマクロと値を入力します。
リージョンは、リソースがある地域を選択しましょう。
各APIエンドポイントについては以下参照。
Core Services API
Database Service API
Object Storage Service API
Monitoring API
東京リージョンの例)
{$OCI.API.CORE.HOST}:iaas.ap-tokyo-1.oraclecloud.com
{$OCI.API.AUTONOMOUS.DB.HOST}:database.ap-tokyo-1.oraclecloud.com
{$OCI.API.OBJECT.STORAGE.HOST}:objectstorage.ap-tokyo-1.oraclecloud.com
{$OCI.API.TELEMETRY.HOST}:telemetry.ap-tokyo-1.oraclecloud.com
7.(オプション)6.までうまく入力できていればZabbixコンソールでホストとしてリソースが表示されますが、この時点で表示されるのはルートコンパートメントのリソースだけ。
特定の子コンパートメントのリソースのデータを収集する場合はホストのマクロを追加します。追加したいリソースのマクロを追加し、値にコンパートメントのOCIDを入力します。(複数設定する場合は、カンマ区切りにする。)
マクロは以下の6つありますが、これはデータを取得したい任意のマクロだけ設定すればOK。
{$OCI.API.COMPARTMENT.COMPUTE}:コンピュートインスタンス用
{$OCI.API.COMPARTMENT.VCN}:VCN用
{$OCI.API.COMPARTMENT.VOLUME.BLOCK}:ブロックボリューム用
{$OCI.API.COMPARTMENT.VOLUME.BOOT}:ブートボリューム用
{$OCI.API.COMPARTMENT.OBJECT.STORAGE}:オブジェクトストレージ用
{$OCI.API.COMPARTMENT.AUTONOMOUS.DB}:AutonomousDB用
ここまで設定し、ホストが読み込まれて順次表示されれば設定完了です。
追加設定
デフォルトの設定だとインスタンスやボリュームの表示名がOCID表記でわかりにくいです。(上の画像を参照)
これらは、各リソースに適用されたディスカバリルールの「ホストのプロトタイプ」タブで表示名が設定されているので、設定変更で表示名を変えられます。
テンプレートから「Oracle Cloud by HTTP」を選択し、表示名を変えるリソースのディスカバリルールを選択します。(上の画像の赤文字を参照)
ホスト名の部分を書き換えれば、そのディスカバリルールが適用されたホストの表示名全てを変更できます。
例えばコンピュートなら、ディスカバリルール「Compute instances discovery」の「ホストのプロトタイプタブ」で、ホスト名の項目を「OCI Compute - {#ID}」から「{#NAME}」に変更すれば、表示名をOCIコンソールでの表示名に変えられます。
更新して少し待つと、OCI上のリソース名に書き換わりました。
取得できたデータ
最後に、監視に追加されたADBでどんなデータが取得できたのか、グラフ図で一部ご紹介します。
動作検証のため、18時頃にOCIのADBチュートリアルに公開されていたSQL文を適当にポチポチ実行してます。
CPUやストレージの使用率、送信したSQLのbyte数やConnection Latencyといったメトリクスが取得できていました。
まとめ
Oracle Cloud by HTTPテンプレートの紹介は以上です。
ブログ執筆のため検証環境でZabbixをいじり、設定が終了した直後に続々とホストが追加されていく様子を見て、筆者はクリスマスプレゼントを開ける子どもの如く喜びの声を思わず上げておりました。
Zabbixの環境構築は、Agentインストールからテンプレート、アイテム、トリガーの設定が特に手間のかかる作業ですが、その手順を簡単に終わらせられるのは非常に素敵ポイント。
Syslog監視等このテンプレートで拾えない監視データはOCIのログ・アナリティクスサービス等でカバーできそうなので、次はそのあたりの検証も試してみようと思います。