サーバヘルス
1台以上のサーバの過去のメトリクスを収集して可視化します:QPS、スレッド、キャッシュヒット率、ネットワーク、DMLなど。データは自分で選んだ集中管理のサーバに保存され、アプリを閉じたあとも参照できます。
場所: ワークスペース › ツール › ヘルスモニタ
ヘルスモニタを使うと、複数のサーバのパフォーマンスを時間を追って追跡できます。ダッシュボード(いま接続しているサーバのリアルタイムのメトリクスを表示)とは違い、ヘルスモニタは過去のスナップショットを集中管理のストアに保存します。どのセッションからも参照でき、チームのメンバーで共有できます。
構成:
- 「保存先サーバ」 — Calíopeがcaliope_monitoringストアとそのスナップショットのテーブルを作成するサーバ。MySQL、MariaDB、SQL Serverではデータベース、PostgreSQLではプロファイルが指すデータベースの中のスキーマです。そのため、同じサーバで別々のデータベースを指す2つのプロファイルは、別々のストアになります。履歴を参照したいすべてのユーザがアクセスできる必要があります。
- 「監視対象のサーバ」 — メトリクスを収集するサーバ。保存先サーバとは別のサーバでもかまいません。
- 監視エンジン — アプリの起動時からバックグラウンドで動きます。監視が動くのにタブを開いておく必要はありません。
最初の設定:
1. ワークスペースのナビゲーションバー(ハートのアイコン)から「ヘルスモニタ」タブを開きます。
2. 「監視の設定」(表示するものがあるときは歯車のアイコン(⚙))をタップして設定を開きます。
3. パネル上部の「監視を有効にする」をオンにします。いつでも無効にでき、設定を失わずにメトリクスの収集を完全に止められます。
4. 「保存先サーバ」で既存の接続プロファイルを選び、「保存して準備」をタップします。Calíopeがcaliope_monitoringストアと必要なテーブルをすべて自動で作成します。ユーザには、選んだサーバでのCREATE権限が必要です。
5. 「監視対象のサーバ」で「+」をタップし、監視したいサーバを1台ずつ追加します。サーバごとに次のものを設定できます:
- 「エイリアス」 — グラフで見分けるためのわかりやすい名前。
- 「間隔」 — 収集の頻度:15秒、30秒、1分(デフォルト)、5分、15分、30分、1時間。
- 「アクティブ」 — サーバを削除せずに監視を一時停止する切り替え。
6. 「データの保持」で、データを保持する日数(7、14、30、60、90、180日)を選びます。「制限なし」を選ぶと、すべてのデータを無期限に保持します。
7. 設定を閉じます。監視が有効なら、エンジンが自動で開始します。
バックグラウンドでの動作:
アプリを開いている間は、どのタブがアクティブでも監視が続きます。アプリを閉じて開き直すと、起動時にエンジンが自動で再開します。
表示:
- 上部のバーのセレクタでサーバを選ぶと、そのメトリクスが表示されます。
- 時間の範囲を「過去1時間」から「過去30日間」までの中から選びます。
- エンジンの状態(緑、黄、赤の点とそのラベル:「実行中」「開始中…」「再試行中」「保存先なし」…)は、監視がアクティブか、開始中か、保存先サーバに届かないかを示します。その横のオレンジの三角形は、選択したサーバの最後のポーリングが失敗したことを意味し、ツールチップに理由が表示されます。iPadとiPhoneではタップすると理由を読めます。エンジンがストアに届かないときの状態ラベルも同じです。
- 最後のポーリングが正常でも何かがしきい値を超えると、三角形の代わりに警告が、その理由ときっかけになった数値とともに表示されます。警告は琥珀色の三角形、重大なものは赤い八角形です。たとえば「ストレージの空きが少ない:100%」です。Calíope TVとサーバ群のウィジェットに届くのと同じ判定で、iPadとiPhoneではタップすると読めます。
- ↻ボタンは、保存先サーバからデータを手動で読み込み直します。
- ⏱ボタン(矢印付きの時計)は30秒ごとの自動更新を有効にします。↻をタップしなくても、グラフが自動で読み込み直されます。macOSでは、オンのときアイコンの横に「30秒」のラベルが表示されます。データが変わらない静的な表示で調べたいときは、オフにします。
グラフの並べ方:
- スライダのボタン(「ヘルスグラフの配置をカスタマイズ」)を押すと、すべてのグラフに2つの矢印と目が表示されます。矢印はグラフを1つ移動し(ドラッグしてもかまいません)、目はグラフを非表示にします。非表示のグラフは下の「非表示のグラフ」で、クリックされるまで待ちます。
- ↺ボタン(「配置をリセット」)は、確認のあと、すべてのグラフをデフォルトの位置に戻します。
- チェックマークで終了します。配置は記憶され、iCloud同期がオンならほかのデバイスにも届きます。
macOS、iPad、iPhone、Apple Vision Proで使えます。
ClickHouse
ClickHouseの場合:ClickHouseのサーバは監視できますが、ストアは置けません。履歴はMySQL、MariaDB、PostgreSQL、SQL Serverのサーバに保存され、「保存先サーバ」の選択肢にはClickHouseのプロファイルは表示されません。
Oracle
Oracleの場合:Oracleのサーバは監視できますが、ストアは置けません。履歴はMySQL、MariaDB、PostgreSQL、SQL Serverに保存され、「保存先サーバ」の選択肢にはOracleのプロファイルは表示されません。Oracleのストアがほかのデバイスや古い設定から届いたときは、画面に「このサーバには履歴を保存できません」とその理由が表示され、残る手は「監視の設定」で別のものを選ぶことです。Calíopeは、もっとも使用率の高い表領域が最大サイズの85%を超えると警告し、95%からは赤で示します。インスタンスがOPENでないか、データベースがACTIVEでないときも赤で示します(「インスタンスが開いていません」と、サーバの2つの単語)。
Apple Vision Pro:iPadやiPhoneと同じように、三角形やラベルを見てピンチすると理由が表示されます。
キーワード: ヘルスモニタ、監視、メトリクス、履歴、スナップショット、ストレージ、caliope_monitoring、準備、間隔、保持期間、バックグラウンド、監視対象のサーバ、QPS、キャッシュ、InnoDB、有効にする、無効にする、自動更新、30秒
各グラフの説明:接続中のスレッド、QPS、キャッシュヒット率、アクティブなプロセス、ネットワーク(バイト/秒)、1秒あたりのDML。
場所: ワークスペース › ツール › ヘルスモニタ
モニタには6つの時系列グラフが表示されます。値が1つの4つのグラフは塗りつぶした領域の上に線を描き、「ネットワーク」と「DML」は系列ごとに1本の線を描きます。その4つでは、任意の点をタップまたはクリックすると、その時点の正確な値が表示されます。
接続中のスレッド
その時点で開いている接続の数。max_connectionsの上限に近い値は、飽和のおそれを示します。
QPS(1秒あたりのクエリー数)
1秒あたりに実行されたクエリーの割合。連続するスナップショット間のQueriesの差を間隔で割って計算します。サーバ全体の負荷を反映します。
キャッシュヒット率(%)
ディスクに行かずにサーバのキャッシュから返された読み取り要求の割合。次のように計算します:
(1 − Δディスク読み取り / Δ読み取り要求) × 100
エンジンごとにこの2つのカウンタを独自の名前で公開しており、どちらも公開しないサーバではグラフは空のままです。
95%を下回る値が続くのは、キャッシュが負荷に対して足りず、増やすべきことを示します。
アクティブなプロセス
その瞬間に実行中のSQL文の数:クエリーを実行しているスレッド(SHOW PROCESSLISTのQueryまたはExecute。PostgreSQLではactive状態のセッション、SQL Serverでは要求を処理中のユーザセッション)です。アイドルの接続、レプリケーションのスレッド、サーバ自身のデーモンは数えません。高い値が続くのは、遅いクエリーかロックを示唆します。
ネットワーク(バイト/秒)
サーバとの間のネットワークトラフィック:
- RX — 1秒あたりの受信バイト数(Bytes_received)。
- TX — 1秒あたりの送信バイト数(Bytes_sent)。
異常に大量のデータを転送するクエリーを見つけるのに役立ちます。
DML/秒(データを変更するSQL文)
1秒あたりのDML文の割合を、次の内訳で示します:
- SELECT — 読み取り。
- INSERT — 挿入。
- UPDATE — 更新。
- DELETE — 削除。
INSERT/UPDATE/DELETEの急増は、バッチ処理やETL処理が動いていることを示す場合があります。
全般的な読み方:
- グラフはサーバの累積カウンタから計算した値を示すので、絶対的な合計ではなく1秒あたりの割合を表します。
- すべてのエンジンがすべてのカウンタを公開しているわけではありません。サーバが計測しないものは空で保存され、そのグラフには「このサーバでは計測されません」と表示されます。たとえばPostgreSQLはネットワークトラフィックを数えず、SQL文を動詞ごとに分けず、QPSはSQL文ではなくトランザクションを数えます。SQL Serverはネットワークのバイト数も行数も数えず、SQL文を動詞ごとに分けることもなく、QPSはバッチを数えます。
- 短いサンプリング間隔(15秒、30秒)はより詳細なグラフになりますが、保存先サーバに生じるデータも増えます。
- 設定できる保持期間(「サーバヘルスモニタ」を参照)が、「過去30日間」の範囲で見える期間を決めます。
ClickHouse
ClickHouseの場合:「接続中のスレッド」はTCPとHTTPの接続を合計します(TCPConnection + HTTPConnection)。「QPS」は受け取ったクエリーを数えます(system.eventsのQuery)。「アクティブなプロセス」は実行中のクエリーです。「ネットワーク」はNetworkReceiveBytesとNetworkSendBytesから取ります。「キャッシュヒット率(%)」と「DML/秒」には「このサーバでは計測されません」と表示されます。ClickHouseにはページキャッシュも動詞ごとのカウンタもないからです。
TiDB
TiDBの場合:「接続中のスレッド」はCLUSTER_PROCESSLISTのセッションを数えます。TiDBには上限がないので、最大値の線はありません。「QPS」は現在のSTATEMENTS_SUMMARYウィンドウの実行回数から取り、サーバが30分ごとにそれを切り替えるときは、その間隔の点は描かれません。「アクティブなプロセス」は何かを実行中のセッションです。「キャッシュヒット率(%)」「ネットワーク」「DML/秒」には「このサーバでは計測されません」と表示されます。TiDBはそれらをSQLで公開しないからです。
Oracle
Oracleの場合:「接続中のスレッド」はV$SESSIONのユーザセッションです。「QPS」はSQL文の実行回数を数えます(V$SYSSTATのexecute count)。「キャッシュヒット率(%)」はphysical readsとsession logical readsから取ります。「アクティブなプロセス」はACTIVE状態のユーザセッションです。「ネットワーク」はSQL*Net経由でクライアントとの間を行き来したバイト数から取ります。「DML/秒」には「このサーバでは計測されません」と表示されます。Oracleには動詞ごとのカウンタがないからです。
キーワード: 接続中のスレッド、threads_connected、QPS、1秒あたりのクエリー数、キャッシュヒット率、InnoDBのヒット率、バッファプール、アクティブなプロセス、PROCESSLIST、bytes_received、bytes_sent、com_select、com_insert、com_update、com_delete、DML、ネットワーク、スループット、時系列、グラフ、メトリクス
監視を有効にし、保存先サーバを選び、監視対象のサーバを追加して、保持期間を設定する方法。
場所: ヘルスモニタ › 監視の設定
Calíopeの「サーバヘルスモニタ」は、サーバから定期的にサンプリングしたメトリクスの履歴を保持します。その履歴はアプリの中ではなく、自分で選んだサーバ上の専用のスキーマcaliope_monitoringに置かれます。
設定ダイアログを開く
- 「ヘルスモニタ」の上部のバーにある⚙︎ボタン(macOS、iPad、iPhone、Apple Vision Pro)。何も設定していない間は、バーと空の画面に「監視の設定」として表示されます。
- 変更はするたびに保存されます。「閉じる」(Mac以外では「完了」)はダイアログを閉じるだけです。
1. 監視を有効にする
- ダイアログ上部の切り替え。オンにするとMonitoringEngineがバックグラウンドで開始し、オフにすると止まります。
2. 保存先サーバ
- グループ分けされた選択肢から、どのプロファイルにcaliope_monitoringスキーマを置くかを選びます。
- 監視するサーバと同じでも、専用のサーバでもかまいません(本番環境では専用を推奨)。
- 「保存して準備」をタップすると、Calíopeがストアと必要なテーブルを作成します。冪等(CREATE … IF NOT EXISTSを使用)なので、何かを手動で削除してしまったときも安全にやり直せます。
- 表示される状態:うまくいけば緑で「スキーマの準備ができました」、接続に失敗すれば赤いラベルでエラーが表示されます。
作成されるテーブル
- caliope_monitoring.monitoring_config — スキーマのバージョン、保持期間、最後のクリーンアップの日時。
- caliope_monitoring.monitored_servers — 監視対象として登録したサーバ。
- caliope_monitoring.server_snapshots — 時系列のスナップショット(稼働時間、スレッド、キャッシュ、動詞ごとのSQL文、トラフィック、アクティブなプロセス、もっとも長いクエリーなど)。
- caliope_monitoring.collection_errors — 収集のエラー。診断に役立ちます。
3. 監視対象のサーバ
- +ボタンで追加します。プロファイルを選び、わかりやすいエイリアスを付け、「ポーリング間隔」(15秒、30秒、1分、5分など)を選びます。
- 各行には、設定を削除せずに有効・無効を切り替えるチェックボックス(Mac以外ではスイッチ)、その間隔、そのサーバ独自のヘルスのしきい値のボタン、そして削除する−ボタンがあります。
- 保存先サーバをそれ自身の監視対象のサーバとして追加することはできません。一覧に表示されません。
- 一覧の下の「ヘルスのしきい値」は、Apple TVのCalíopeダッシュボード、サーバ群のウィジェット、このモニタのバーで、サーバがいつ警告や重大になるかを決めます。もっとも使用率の高いストレージのしきい値(いまはOracleだけが計測します)はシートにはありません。85%で警告、95%で重大になります。
4. データの保持
- プリセット(7、14、30、60、90、180日、そして「制限なし」)のドロップダウン。
- 「制限なし」は何も削除せず、オレンジの警告を表示します。server_snapshotsは収集のたびに大きくなることを忘れないでください。
- クリーンアップは、エンジンが開始するたびと、アプリを開いている間1日に1回実行されます。
セキュリティについて
- 保存先サーバへの接続はすべて、そのプロファイルのキーチェーンに保存された同じ資格情報を使います(キーチェーンの同期は任意)。
- アプリを削除するか「自分のデータをすべて削除」を実行すると、アプリは書き込みを止めます。caliope_monitoring.*のテーブルは、手動で削除する(DROP DATABASE caliope_monitoring;)までサーバに残ります。
キーワード: 監視、サーバヘルス、caliope_monitoring、準備、保存先サーバ、保持期間、スナップショット、MonitoringEngine、間隔、ポーリング、monitored_servers、server_snapshots、設定