質問: さくらのクラウド・データベースアプライアンスにおけるアクティビティで表示している内容について、手元で動かしているZABBIXサーバーに監視させたいです。 同じアカウント・ゾーンで動作中のサーバー上で動いているZABBIXエージェントを経由しても構わないので、あまり手間を掛けずデータベースアプライアンスを監視対象にする方法を教えて下さい。 データベースアプライアンスについてpingは返すが、データベースの動作として問題があったことがあったので、ZABBIXから徴候があれば(こちらで指定するしきい値を超えたら)ZABBIXから自動通知するようにしたいと考えています。 そこで、同じ問題に遭遇した人がすでにいるだろうと思い、自分でほぼコードを書かず実装できる資料を探していたのですが見つからなかったので、相談する次第です。 虫の良い話で恐縮ですが、よろしくお願いいたします。
回答: まずさくらのクラウドでのアクティビティグラフについてですが、以下のような特徴があります。 * 値の反映は5分間隔 * 最新の値が反映されるまでタイムラグがある(体感だと5分~20分くらい) 例えば13:15にアクティビティグラフを取得した場合、13:05までの分しか値がないという状態が起こり得ます。 このため、何か兆候があったタイミングから5分以上検知が遅れることに注意が必要です。 ある程度即時性を求められる場合、かつデータベースアプライアンスに直接接続できるエージェントが存在する場合はTemplate DB MySQL/PostgreSQLやUserParameterを通じて直接コマンドを実行しステータス確認を行うほうが良いかと思います。 即時性を求めない/データベースアプライアンスへの直接接続が難しい場合はご質問内容の通りに さくらのクラウドAPI経由でアクティビティグラフの値を取得する方法もとれます。 この場合いくつか実現方法が考えられます。 1. さくらのクラウド向けのPrometheus Exporterを併用する(ZABBIX 4.2以降) 2. HTTP agentを利用してさくらのクラウドAPIを叩く(ZABBIX 4.0以降) 3. CLI/curlコマンドなどの実行結果をUserParameterを利用して監視する ### 1. さくらのクラウド向けのPrometheus Exporterを併用する(ZABBIX 4.2以降) 一番手っ取り早くコードを書かずに済むのは1.のさくらのクラウド向けPrometheus Exporterを利用する方法です。 * さくらのクラウド向け Prometheus Exporter このExporterはアクティビティグラフで参照可能な値をエクスポートしていますので、Exporter+ZABBIX 4.2以降で利用できるPrometheus checksを併用することでデータベースアプライアンスを監視できるようになります。 データベースアプライアンス関連では以下のようなメトリクスが用意されています。 * `sakuracloud_database_info`: データベースの基本情報 * `sakuracloud_database_up`: データベースの起動状況 * `sakuracloud_database_cpu_time`: CPU-TIME * `sakuracloud_database_memory_used`: メモリ使用量 * `sakuracloud_database_memory_total`: メモリ総量 * `sakuracloud_database_nic_info`: NICの基本情報 * `sakuracloud_database_nic_receive`: NICのデータ転送量(受信) * `sakuracloud_database_nic_send`: NICのデータ転送量(送信) * `sakuracloud_database_disk_system_used`: ディスクの使用量(SYSTEM) * `sakuracloud_database_disk_system_total`: ディスクの総量(SYSTEM) * `sakuracloud_database_disk_backup_used`: ディスクの使用量(Backup) * `sakuracloud_database_disk_backup_total`: ディスクの総量(Backup) * `sakuracloud_database_binlog_used`: binlogの使用量 * `sakuracloud_database_disk_read`: ディスクの読み込み量(SYSTEM) * `sakuracloud_database_disk_write`: ディスクの書き込み量(SYSTEM) * `sakuracloud_database_replication_delay`: レプリケーションの遅延時間 (全メトリクス一覧はGitHub上のREADME.mdを参照してください) ### 2. HTTP agentを利用してさくらのクラウドAPIを叩く(ZABBIX 4.0以降) ZABBIX 4.0以降で利用可能なHTTP agentも利用できますが、こちらはアクティビティグラフAPIから返される値が少々特殊なため扱いに注意が必要です。 例えばデータベースアプライアンスのCPU-TIMEを取得するAPIでは以下のようなJSONが返されます。 ``` $ curl -s --user "$SAKURACLOUD_ACCESS_TOKEN":"$SAKURACLOUD_ACCESS_TOKEN_SECRET" \ https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/appliance/<アプライアンスのID>/cpu/monitor | jq . { "Data": { "2020-01-17T16:45:00+09:00": { "CPU-TIME": 0.043333333333 }, "2020-01-17T16:50:00+09:00": { "CPU-TIME": 0.046666666667 }, "2020-01-17T16:55:00+09:00": { "CPU-TIME": null }, "2020-01-17T17:00:00+09:00": { "CPU-TIME": null }, "2020-01-17T17:05:00+09:00": { "CPU-TIME": null }, "2020-01-17T17:10:00+09:00": { "CPU-TIME": null }, "2020-01-17T17:15:00+09:00": { "CPU-TIME": null }, "2020-01-17T17:20:00+09:00": { "CPU-TIME": null } }, "is_ok": true } ``` 日時がキーとなっていることと値がnullの場合がある点に注意して設定する必要があります。 (前述のPrometheus Exporterや後述のUsacloudはこの辺りの考慮がされた実装となっています) ### 3. CLI/curlコマンドなどの実行結果をUserParameterを利用して監視する 少々コードを書くことが問題なければ3.の方法もあります。 例えばさくらのクラウド向けCLIであるUsacloudを利用する場合、アクティビティグラフの値は以下のように取得可能です。 ``` # データベースアプライアンスのCPU-TIMEを取得する例 $ usacloud database monitor-cpu -o json <アプライアンスのName or ID>| jq '[-1].CPUTime | tonumber' 0.046667 ``` このスクリプトをUserParameterを通じて実行することで監視可能になります。 以上、監視要件に沿って適切な方法をご検討ください。