機能の適用範囲
この内容はOceanBaseデータベースEnterprise版にのみ適用されます。OceanBaseデータベースCommunity版は、現在アービトレーションサービス機能をサポートしていません。
概要
アービトレーションサービス(Arbitration Service)は、Prometheusプロトコルを介したモニタリングメトリクスの収集をサポートしています。アービトレーションサービスには標準のGET /metricsインターフェースが組み込まれており、arbserverのCPU、メモリ、ディスク使用率、および現在管理されているクラスタ、テナント、LS、選挙、設定バージョン、モードバージョン、RPC遅延などのメトリクスを取得できます。
アービトレーションサービスは、組み込みのHTTP Serverを通じてモニタリングメトリクスを公開しています。Prometheus Serverを使用してこれらのメトリクスデータを取得・保存し、Grafanaでメトリクスを表示し、Alertmanagerでアラートを送信できます。この機能にはPrometheus、Grafana、Alertmanagerのインストールと設定は含まれません。これらの外部コンポーネントはご自身でデプロイおよび設定する必要があります。
アービトレーションサービスのPrometheusモニタリングメトリクスを利用することで、arbserverのリソース使用状況(CPU、メモリ、ディスク使用率)をリアルタイムで把握し、現在管理されているクラスタ、テナント、LSの数を確認し、各LSのリーダー状態や選挙頻度を監視し、設定バージョンやモードバージョンの変更履歴を追跡し、RPC遅延がネットワーク伝送段階とサーバー処理段階でどのように分布しているかを分析できます。
前提条件
- 現在のクラスタにアービトレーションサービスがデプロイ済みであること。アービトレーションサービスのデプロイ手順の詳細については、2レプリカ + アービトレーションサービスのOceanBaseクラスタのデプロイを参照してください。
- 外部環境にPrometheus Serverがデプロイ済みであり、Prometheus Serverとarbserver間のネットワーク相互接続が確保されていること。
- (オプション)可視化表示やアラートが必要な場合は、GrafanaとAlertmanagerもデプロイする必要があります。
Prometheusによるスクレイピングの設定
メトリクス収集ポートの設定
アービトレーションサービスは、構成パラメータprometheus_metrics_portを使用してメトリクス収集ポートの有効化と無効化を制御します。このサービスを有効にするには、以下の2つの方法があります:
方法1:
アービトレーションサービスの起動設定にポートパラメータを追加することで、メトリクス収集インターフェースを有効にできます。例:
-o "ob_startup_mode=arbitration,prometheus_metrics_port=2886"
完全な起動コマンドについては、コマンドラインを使用した2レプリカ + アービトレーションサービスのOceanBaseクラスタのデプロイを参照してください。
デフォルト設定を使用する場合、ポートを明示的に入力する必要はありません。arbserverは2886をリッスンしようと試みます。メトリクス収集インターフェースを無効にするには、このパラメータを0に設定します。例:
-o "ob_startup_mode=arbitration,prometheus_metrics_port=0"
方法2:
クラスタの稼働中にalter system setを使用してポートを変更し、arbserverプロセスを再起動することで変更が有効になります。
alter system setを使用してポートを変更します。alter system set prometheus_metrics_port = 2887;アービトレーションサービスプロセスを再起動することで変更が有効になります。
アービトレーションサービスは特別モードで起動する軽量なobserverプロセスです。ノードプロセスの再起動については、ノードの再起動を参照してください。
この場合、メトリクス収集インターフェースを無効にするには、prometheus_metrics_portのポート番号を0に変更した後、再度再起動する必要があります。
動作の説明
prometheus_metrics_port構成パラメータの異なる設定シナリオにおける動作の説明は以下のとおりです。
- ポートが明示的に設定されていない場合:デフォルトポート
2886を使用して/metricsを公開します。 - 他の正の数値に設定されている場合:arbserver が再起動すると、指定されたポートをリスニングするように変更されます。
0に設定されている場合:メトリクス HTTP サーバーは起動せず、/metricsはアクセスできません。- ポートを変更したが再起動していない場合:arbserver が再起動するまで、元のポートを引き続き使用します。
- ポートが既に使用中またはリスニングに失敗した場合:メトリクスサービスの初期化に失敗し、自動的に閉じられます。すべてのメトリクスは更新されなくなりますが、arbserver の正常な起動には影響しません。同時に、システムはログに WARN レベルのリスニングエラーメッセージ(
disable Prometheus monitoring)を記録します。ポート競合問題が解決した後、メトリクス収集を復旧するには、arbserver を再起動する必要があります。 - 1つのarbserverが複数のクラスタにサービスを提供する場合:各収集周期で同じエンドポイントを複数回スクレイピングする必要はありません。LSメトリクスは、ラベルによってクラスタ、テナント、LSを区別します。
- arbserverが再起動した場合:永続化された状態から管理オブジェクトおよび関連するバージョンのメトリクスを再読み込みします。
メトリクスインターフェースの可用性検証
設定完了後、curl コマンドを使用してメトリクスインターフェースが正常にアクセス可能かどうかを検証できます。
Prometheus Server または同一収集ネットワーク内のマシンで以下のコマンドを実行します:
curl -fsS http://<arbserver_ip>:2886/metrics
正常な応答には # HELP、# TYPE、および arb_* メトリクスデータが含まれます。応答例は以下のとおりです:
# HELP arb_cluster_count number of clusters managed
# TYPE arb_cluster_count gauge
arb_cluster_count 1
スクレイピング設定
Prometheusの設定ファイルであるprometheus.ymlに、arbserverのメトリクスデータを取得するためのスクレイプジョブを追加します。設定例は以下のとおりです:
scrape_configs:
- job_name: oceanbase-arbserver
metrics_path: /metrics
scrape_interval: 15s
static_configs:
- targets:
- <arbserver_ip>:2886
labels:
service: arbserver
構成パラメータの説明は以下のとおりです:
パラメータ |
必須 |
説明 |
|---|---|---|
job_name |
はい | スクレイピングタスクの名前です。任意に設定できますが、Prometheus内での迅速な識別を容易にするため、oceanbase-arbserver の使用を推奨します。 |
metrics_path |
いいえ | メトリクスの公開パスです。デフォルトは /metrics で、arbserverの組み込みインターフェースと一致しています。通常は変更不要です。 |
scrape_interval |
いいえ | スクレイピング間隔、つまりPrometheusがメトリクスデータを取得する時間間隔です。15s に設定することを推奨します。短すぎるとarbserverの負荷が増加し、長すぎると監視のリアルタイム性に影響します。 |
targets |
はい | arbserverのアクセスアドレスです。形式は <arbserver_ip>:<prometheus_metrics_port> です。ここで、prometheus_metrics_port はarbserverの構成パラメータ prometheus_metrics_port の値で、デフォルトは 2886 です。複数のarbserverインスタンスがある場合は、各インスタンスのアドレスをこのリストに追加する必要があります。 |
labels |
いいえ | このスクレイピングタスクのすべてのメトリクスにカスタムラベルを追加します。例では service: arbserver ラベルを追加しており、GrafanaやPromQLでのクエリ時にサービス名でフィルタリングできるようにしています。 |
複数のarbserverインスタンスがある場合は、各インスタンスのアドレスを targets リストに追加するか、デプロイメントプラットフォームの既存のサービスディスカバリメカニズムに接続する必要があります。Prometheusスクレイピング設定の詳細な形式については、Prometheus Configurationを参照してください。
スクレイピング状態の検証
スクレイピング設定が完了したら、以下の手順に従って、Prometheusがarbserverメトリクスを正常に取得したかどうかを検証してください。
Prometheus Server上で
prometheusユーザーを使用して、設定ファイルの構文が正しいかどうか確認します。promtool check config <prometheus.yml>設定ファイルの構文が正しい場合、出力結果に
SUCCESSが表示されます。Prometheus Server上でPrometheusサービスをリロードまたは再起動し、設定を有効にします。
Prometheusでホットリロード機能が有効になっている場合、ネットワークアクセス権限を持つ任意のユーザーがHTTP APIを使用して設定の再読み込みをトリガーできます:
curl -X POST http://<prometheus_ip>:9090/-/reloadrootユーザーを使用するか、sudo権限を使用してPrometheusサービスを直接再起動することもできます:sudo systemctl restart prometheus
sudo journalctl -u prometheus -fでログを確認し、Completed loading of configuration fileが表示され、エラーがないことを確認します。Prometheus Web UIにアクセス可能な任意のマシンで、arbserverのtarget状態が
UPであることを確認します。説明
upはPrometheusが各スクレイピングターゲットごとに自動生成するメトリクスであり、arbserver自体が公開するarb_*メトリクスには含まれません。状態がUPであることは、PrometheusサーバーがarbserverのexposerにHTTPリクエストを正常に送信し、形式に合致する応答を正常に受信したことを意味します。ブラウザを使用して
http://<prometheus_ip>:9090/targetsにアクセスし、targetリストでoceanbase-arbserverを見つけて、その状態がUPであることを確認します。Prometheus APIにアクセス可能な任意のマシンでコマンドを使用してtarget状態を確認することもできます。例:
curl -s http://<prometheus_ip>:9090/api/v1/targets | grep -o '"health":"[^"]*"'
Prometheus APIにアクセス可能な任意のマシンで、
upメトリクスを照会してarbserverが正常にスクレイピングされたことを確認します。例:curl -s "http://<prometheus_ip>:9090/api/v1/query?query=up%7Bjob%3D%22oceanbase-arbserver%22%7D"実行結果で
valueが1の場合、スクレイピングは正常です。0の場合、スクレイピングに失敗したため、Prometheusとarbserver間のネットワーク接続性とポート設定を調査する必要があります。Prometheus APIにアクセス可能な任意のマシンで、
arb_cluster_count、arb_ls_has_leaderなどのビジネスメトリクスを照会して、arbserverのメトリクスが正常に収集されたことを確認します。例:curl -s "http://<prometheus_ip>:9090/api/v1/query?query=arb_cluster_count"すべての
arb_プレフィックスのメトリクスを一覧表示して、メトリクスが完全に収集されたことを確認することもできます。例:curl -s "http://<prometheus_ip>:9090/api/v1/label/__name__/values" | grep '^arb_'
指標の説明
arbserverは現在、リソースと管理規模、LS状態、RPC遅延の3つのカテゴリに分類される13個の論理指標を提供しています。
リソースと管理規模
指標 |
タイプ |
意味 |
更新方法 |
|---|---|---|---|
arb_memory_usage_percent |
Gauge | arbserverプロセスのVmRSSが物理メモリに占める割合 | 10秒ごと |
arb_cpu_usage_percent |
Gauge | arbserverプロセスのCPU使用率 | 10秒ごと。初回サンプリングではベースラインの設定のみを行う |
arb_disk_usage_percent |
Gauge | arbserverデータディレクトリが配置されているファイルシステムの使用率 | 10秒ごと |
arb_cluster_count |
Gauge | 現在管理しているクラスタ数 | ライフサイクルイベント発生時に更新 |
arb_tenant_count |
Gauge | 現在管理しているテナント数 | ライフサイクルイベント発生時に更新 |
arb_ls_count |
Gauge | 現在管理しているLSの総数 | ライフサイクルイベント発生時に更新 |
LS状態
以下の指標にはすべてcluster_id、tenant_id、ls_idのラベルが付いており、異なるクラスタ、テナント、ログストリームを区別するために使用されます。
指標 |
タイプ |
意味 |
更新方法 |
|---|---|---|---|
arb_ls_has_leader |
Gauge | アービトレーションの観点から見たLSにリーダーが存在するかどうか。1は存在、0は存在しないことを表す |
2秒ごと |
arb_ls_election_count |
Counter | アービトレーション側で観測された選挙回数 | 選挙イベント発生時に更新 |
arb_ls_config_version_proposal_id |
Gauge | LogConfigVersionの提案ID |
設定イベント発生時に更新 |
arb_ls_config_version_config_seq |
Gauge | LogConfigVersionの設定シーケンス |
設定イベント発生時に更新 |
arb_ls_mode_version |
Gauge | LogModeMetaのモードバージョン |
モードイベント発生時に更新 |
RPC遅延
指標 |
タイプ |
ラベル |
意味 |
|---|---|---|---|
arb_rpc_process_latency_seconds |
Histogram | なし | arbserver側でのRPCのキュー待ちと処理遅延 |
arb_rpc_transport_latency_seconds |
Histogram | なし | クライアントが送信してからarbserverが受信するまでの転送遅延 |
Histogramタイプの指標は、/metrics配下で _bucket、_sum、_countに展開されます。デフォルトのbucketは以下のとおりです:
100us, 500us, 1ms, 5ms, 10ms, 50ms,
100ms, 500ms, 1s, 5s, 10s, +Inf
説明
2つのRPC Histogram指標には現在、pcode、cluster、またはtenantのラベルがないため、arbserverのグローバル集計結果を表します。Histogram指標のクエリ方法については、Prometheus Histograms and Summariesを参照してください。
一般的なクエリ例
以下のクエリ文は、Prometheus Web UIのクエリボックスで直接実行することも、Prometheus HTTP APIを通じてクエリすることもできます。
arbserverのスクレイピング状態を確認する:
up{job="oceanbase-arbserver"}現在リーダーのいないLSを照会する:
arb_ls_has_leader == 0過去10分間の選挙回数を照会する:
increase(arb_ls_election_count[10m])サーバー側RPC P99遅延を照会する:
histogram_quantile( 0.99, sum by (le) (rate(arb_rpc_process_latency_seconds_bucket[5m])) )ネットワーク転送RPC P99遅延を照会する:
histogram_quantile( 0.99, sum by (le) (rate(arb_rpc_transport_latency_seconds_bucket[5m])) )
制限事項
- 現在、SQLを通じた指標収集ポートのオンライン切り替えはサポートされていません。構成パラメータ
prometheus_metrics_portは静的に有効となり、変更後はarbserverを再起動しなければ変更が反映されません。 - 現在、HTTPSおよびAPI認証はサポートされていません。
/metricsインターフェースは平文HTTPであり、認証やTLS暗号化はありません。 - 現在、IPv6アドレスのリスニングはサポートされていません。固定でIPv4アドレス
0.0.0.0をリスニングします。observerがIPv6アドレスでデプロイされている場合、PrometheusはIPv6アドレス経由で/metricsインターフェースにアクセスできず、アービトレーションサービスの監視データが取得できません。 - 現在、arbserverの自動検出メカニズムは提供されていません。Prometheusで静的targetを手動で設定するか、デプロイプラットフォームの既存のサービスディスカバリメカニズムに接続する必要があります。
- 現在、プリセットのGrafana DashboardやAlertmanagerアラートルールは提供されていません。GrafanaとAlertmanagerでご自身で作成・設定する必要があります。
- 現在、CPU使用率、メモリ使用率、ディスク使用率の3種類のリソース系指標のみを提供しており、ホストのネットワークやファイルシステムの包括的な監視は含まれていません。パケット損失、再送信、読み取り専用ファイルシステムなどの指標を監視する必要がある場合は、node_exporterの使用を推奨します。
- 現在、arbserverの指標には、observerのログレプリケーションの遅延やFPAXOS状態情報(例:follower lag、Q1/Q2、Reconfirm待機メンバーなど)が含まれていません。
- 現在、2つのRPCヒストグラム指標にはグローバル集計値のみがあり、RPCタイプ、クラスタ、またはテナント別に遅延を分析することはできません。
セキュリティと容量に関する注意事項
/metricsインターフェースはすべてのIPv4 NICをリスニングしており、認証やTLS暗号化はありません。セキュリティグループ、ファイアウォール、コンテナネットワーク、またはリバースプロキシなどを使用し、Prometheusの収集ネットワークからのみ、このインターフェースへのアクセスを許可することを推奨します。これにより、インターフェースを信頼できないネットワークに直接露出させることを防ぎます。同一マシン上で複数のarbserverインスタンスを実行する場合、各インスタンスは異なるポートを使用する必要があります。ポートを変更した後は、Prometheusのtarget設定も同期して更新してください。
リソース指標は10秒ごとに1回サンプリングされ、リーダー状態は2秒ごとに更新されます。実際の監視データの更新遅延は、arbserverのサンプリング間隔とPrometheusの
scrape_intervalの合計です。アラートルールでは、状態の継続時間を考慮してforパラメータを設定することを推奨します。これにより、単一のサンプリングでの変動によって即座にアラートがトリガーされるのを防ぐことができます。各LSは、
cluster_id、tenant_id、ls_idラベルを持つ5組の指標を生成します。大規模なLSシナリオでは、取得応答サイズ、Prometheus series数、ストレージコスト、クエリオーバーヘッドを評価し、必要に応じてscrape_intervalを適宜拡大して収集頻度を下げることができます。