MySQL Database Service のモニタリング
MySQL Database Service (以下 MDS) はマネジメントサービスではありますが、死活監視やパフォーマンスに関するメトリクスは収集したいと思う事があるのでは無いでしょうか
そこで、本記事では MDS のモニタリングについて、3パターンほど検討してみたいと思います
OCI Monitoring サービス
OCI には標準で Monitoring サービスが備わっています、 MDS ももちろん Monitoring サービスで各種リソース情報のモニタリングに対応しており、以下のメトリクスが 対象 となっています
MySQL Databaseサービス・メトリック
メトリック | メトリック表示名 | 単位 | 説明 |
---|---|---|---|
CurrentConnections | 現在の接続 | count | MySQL Databaseへの接続の合計数 |
ActiveConnections | アクティブな接続 | count | MySQL Databaseへのアクティブな接続の数 |
Statements | 文の数 | count | MySQL Databaseに対して実行された文の数 |
StatementLatency | 文レイテンシ | ms | 実行されたすべての文の文待機時間 |
CPUUtilization | CPU使用率 | パーセント | MySQL DatabaseホストのCPU使用率 |
MemoryUtilization | メモリー使用率 | パーセント | MySQL Databaseホストのメモリー使用率 |
DbVolumeReadOperations | ディスク読取り操作 | count | DBボリュームに対する読取り操作の合計数 |
DbVolumeWriteOperations | ディスク書込み操作 | count | DBボリュームに対する書込み操作の合計数 |
DbVolumeReadBytes | ディスク読み取りバイト数 | bytes | DBボリュームに対する読取りバイト数 |
DbVolumeWriteBytes | ディスク書込みバイト数 | bytes | DBボリュームに対する書込みバイト数 |
引用元: 使用可能なメトリック: oci_mysql_database
備考: ディスク読み取りバイト数
と ディスク書込みバイト数
はドキュメントには記載がありませんが、 2021/01/13 時点で MDS の メトリクスでは表示されるため追加しています
また、 Monitoring サービスのサービス・メトリックでは表示されませんが、メトリック・エクスプローラーでは表示されますので、アラームの設定などは可能なようです
メリット・デメリット
- OCI 標準で利用可能な Monitoring サービスであるため、特別な設定などは必要なく利用可能
- oci_compute_infrastructure_health のようなヘルスチェック用のメトリックは存在しないため、単純な死活監視は行えない
- MySQL のサーバーステータス情報 (SHOW GLOBAL STATUS で取得できる情報) のような詳細情報は取得できない
MySQL Enterprise Monitor
MySQL には MySQL データベースのパフォーマンスなどをリアルタイムで可視化できる MySQL Enterprise Monitor (以下 MEM) というツールがあります
※商用版の MySQL Enterprise Edition よりご利用になれます
MEM を使用することができれば、オンプレミスの MySQL とほとんど同様の監視を行うことが可能になりますが、注意点もありますので、メリット・デメリットと併せて記載させていただきます
メリット・デメリット
- MDS には SSH などでログインする事ができず、エージェントもインストールできないため、 OS に関連する情報は基本的に取得する事ができません
- CPU やメモリー使用率の監視の為に、 Monitoring サービスとの併用が望ましいと考えます
- MEM 用に Compute が必要
- Hostname は OCI がユニークに設定したホスト名になっている為、表示名を変更しなければ監視対象が判らなくなる
- MySQL に特化されているため、内部情報など詳細に取得可能
OCI Logging サービス
昨年 8 月に Oracle Cloud Infrastructure Logging サービス (以下 Logging サービス) が正式にリリースされました
Logging サービスは、 OCI のサブネットやロード・バランサーのトラフィックなどをロギングする事ができるサービスとなっています
この Logging サービスでは、 Custom Log
という fluentd ベースのエージェントがあり、任意のログファイルを収集する事が可能となっています
今回は、下記のようなスクリプトを Compute に用意し、 MDS の情報が収集できないかを検証してみました
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash LOG_BASE=/var/log/mds mysql --login-path=root@mds202101.privatesubnet.blogvcn.oraclevcn.com --batch --silent --skip-column-names --execute="SHOW GLOBAL STATUS " > ${LOG_BASE}/tmp/status.log while read ST do set ${ST} VARIABLE_NAME=${1} VALUE=${2:-NULL} echo "${VALUE}" >> ${LOG_BASE}/logs/${VARIABLE_NAME}.log done < ${LOG_BASE}/tmp/status.log |
※ SHOW GLOBAL STATUS
の結果を1ファイルごとに保存しています
上記スクリプトの結果を Logging サービスのカスタム・ログで取り込んでみましたが、結果的には監視としては使えませんでした
下記画像のように、特定の値(例として Com_select
) の取得には成功しているのですが、この値をグラフ化したりアラート通知の元にする事はできず、単純に時間あたりの行数しかモニタリングする機能しか OCI には無かったため、カスタム・ログで取り込んだ値をグラフ化したり、アラート通知に用いる事はできませんでした
メリット・デメリット
- ログデータを JSON でエクスポートする事はできるので、収集だけ Logging サービスで行い、比較・検討は別システムという使い方なら可能
- Logging サービス用に Compute が必要
まとめ
単純な接続数などの確認をするだけなら、 Monitoring サービスで十分と思われるが、詳細な情報が欲しい場合は、 MEM と Monitoring サービスの併用が望ましいと思います