スマートスタイル TECH BLOG

データベース&クラウド技術情報

OCIの管理エージェントによる mysqld_exporter を使用したメトリックを収集してみる

はじめに

OCIチュートリアルに Prometheus Node Exporter を利用して Computeインスタンスの管理エージェントでメトリックを収集する方法が紹介されています。

これができるなら、mysqld_exporter を使用して、MySQLのメトリックも同様に収集できるのではと思い、今回は確認してみた備忘録となります。

前提条件

  • サーバは OCI のComputeインスタンスであることを前提としています。
    (検証時は、OracleLinux 8.7 のComputeインスタンスを使用しています。)
  • Computeインスタンスで管理エージェントプラグインを有効にし、必要な権限が割り当てられていること。
    (詳細は上記、チュートリアルをご参照下さい。)
  • 検証サーバに MySQL Server がインストール済みであること。
    (検証時は、最新バージョンとなる MySQL Server Ver 8.0.33 をインストールしています。)

手順

mysqld_exporter のインストール

まずは、mysqld_exporter をインストールします。

MySQLユーザの作成と権限設定

MySQLサーバにログインし、メトリックを収集する為のユーザを作成し、権限設定を行います。

接続情報の設定

メトリックを収集する為のユーザ情報を定義します。
MySQLサーバ側でソケットファイルをデフォルトから変更されている場合は、 socket パス情報を変更したファイルパスに変更する必要があります。

mysqld_exporter 起動オプションの編集

mysqld_exporter は、デフォルトで多くのメトリックが収集されます。
例えば、多数のテーブルが存在するような環境で、information_schema から多くの情報を収集すると、mysqld_exporter の情報収集によって MySQL Server に負荷が生じてしまう可能性があります。

https://github.com/prometheus/mysqld_exporter/issues/133

今回の検証では、SHOW GLOBAL STATUS; の結果のみを参照できればよいので、/etc/default/mysqld_exporter で、デフォルトで有効になっている不要なオプションを無効化します。

オプションについての詳細は、以下を参照して下さい。

mysqld_exporter の起動とサービス自動起動の有効化

mysqld_exporter を起動し、サービス自動起動を有効にします。

起動後、curl コマンドで http://localhost:9104/metrics にアクセスし、以下のような出力があることを確認します。

管理エージェントの構成ファイルの作成

mysqld_exporter でメトリックの出力が確認した後、管理エージェントの構成ファイルを作成します。

各項目に設定する値は、以下のようになります。

項目 説明
url mysqld_exporter のメトリックを表示するURL
namespace メトリックのネームスペース
compartmentId メトリックを格納するコンパートメントのOCID
allowMetrics 収集するメトリック

構成ファイルについての詳細は、以下のリファレンスをご参照下さい。

また、allowMetrics で指定しているメトリックは、以下になります。

メトリック 説明
mysql_up MySQLへ接続可能であるかを表す(0:接続不可 / 1:接続可能)
mysql_global_status_aborted_clients クライアントが接続を適切に閉じずに終了した接続の数
mysql_global_status_aborted_connects サーバへの接続に失敗した回数

mysqld_exporter の起動オプションで収集する情報を限定したものの、SHOW GLOBAL STATUS; の出力項目には多くの項目が存在します。
カスタムメトリックのInjectionは課金対象となる為、収集するメトリックは必要なもののみに限定した方がよいでしょう。

メトリックの確認

構成ファイルを作成した後、しばらく時間を置いてからコンソール画面でメトリックを確認してみます。
メニューから「監視および管理」-「メトリック・エクスプローラ」を選択します。

「問い合せ1」の「コンパートメント」に構成ファイルで指定したコンパートメントOCIDのコンパートメントを指定すると、「メトリック・ネームスペース」には、構成ファイルで指定したネームスペースの「mysql」が表示されています。

そのまま、「メトリック・ネームスペース」で「mysql」を選択し、「メトリック名」で「mysql_up」を選択した後、「チャートの更新」ボタンを押下します。

すると、画面上部のグラフに、5分間隔で、MySQLへの接続が可能であったことを示す「1」でメトリックが収集されていることが分かります。

続いて、「メトリック名」で「mysql_global_status_aborted_clients」を選択し、「チャートの更新」ボタンを押下すると、以下のように5分間隔で、0を記録していることが分かります。

「mysql_global_status_aborted_clients」は、クライアントが接続を適切に閉じずに終了した接続の数となりますので、MySQLサーバ側で KILL ステートメントで、既存の接続を終了させてみます。

5分程待ってから、再度、「mysql_global_status_aborted_clients」のチャートを確認すると、カウントされていることが分かります。

「クイック選択」で「過去12時間」と少し長めに指定すると、見やすいグラフになります。

次は、「mysql_global_status_aborted_connects」をカウントさせる為に、ログイン失敗を5回実行します。

実行後に、「mysql_global_status_aborted_connects」のチャートを確認すると、5回カウントされていることが分かります。

最後に、「mysql_up」も確認しておきます。
MySQLをサービス停止します。

その後、しばらくして「mysql_up」のチャートを確認すると、mysqld_exporter から接続できなかったことを示す「0」が記録されています。

まとめ

今回取得したメトリックとアラームを組み合わせれば、何かをトリガーにメール通知したりする事も可能となります。

但し、収集間隔が5分間隔となっていて、この間隔を狭める手法が公開されている情報では見当たりませんでした。
また、そのまま mysqld_exporter の値をPOSTするだけでは確認できない項目、例えばInnoDBバッファプールのヒット率を確認したい場合等、SHOW GLOBAL STATUS; の出力項目を組み合わせて確認したい時に、こちらのように、別途スクリプトを実装してカスタム・メトリックを収集する形式にする必要がありそうです。

このような手間を考えると、詳細な監視を必要とする場合には、弊ブログでも何度か紹介している Percona Monitoring and Management を使用することを検討頂ければと思います。

Return Top