すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RabbitMQ:Per-second metrics

最終更新日:Jun 13, 2026

このトピックでは、ログ管理を使用して秒間メトリクスを生成する方法について説明します。

背景情報

Cloud Monitor のチャートは分単位の平均値を表示するため、秒間 TPS データを表示できません。ApsaraMQ for RabbitMQ における TPS とは、クライアントが 1 秒間に開始する AMQP メソッドリクエストの数を指します。

TPS の計算には、以下の AMQP メソッドが含まれます。

  • ConnectionOpenChannelOpen

  • QueueDeclareQueueDeleteQueueBindQueueUnbind

  • ExchangeDeclareExchangeDelete

  • ExchangeBindExchangeUnBind

  • SendMessageBasicConsumeBasicGetBasicAckBasicRejectBasicNackBasicRecover

リクエストメソッドの詳細については、「リクエストメソッド」をご参照ください。

操作手順

  1. ログ管理を有効化し、インデックスを設定します。

  2. Metricstore を作成して、クリーンアップ済みのメトリクスデータを保存します。

    1. Simple Log Service コンソール のプロジェクト詳細ページで、[今すぐ作成] をクリックします。空の状態では、ページに 現在のプロジェクトには Metricstore がありません と表示されます。

    2. Create Metricstore パネルで、Metricstore の基本情報を設定します。主なパラメーターは、名前(Metricstore 名)および データ保持期間(デフォルトは 30 日)です。

  3. データ変換ジョブを作成します。

    1. Logstore でクエリ文を入力します。ここでは、インスタンスのエラーコードをクエリする例を示します。

      * | SELECT Code, count(*) as num, microtime / 1000 / 1000 as timeSecond group by Code, timeSecond limit 1000000

      文の形式は次のとおりです:検索文 | 分析文。検索文でデータをフィルターし、分析文は標準的な SQL クエリです。Metricstore へのデータ書き込みには、クエリ結果から次の 3 つのコンポーネントを抽出する必要があります:必須ラベル、各ラベルに対応するメトリクス値、タイムスタンプ。この例では、Code がエラーコードのラベル、num が各コードのメトリクス値、timeSecond が秒単位のタイムスタンプです。

      クエリ結果は、Code(エラーコード)、num(件数)、timeSecond(秒単位のタイムスタンプ)の 3 列からなるテーブルとして返されます。

    2. クエリ結果で [グラフ] タブをクリックし、次に [スケジュールされた SQL ジョブとして保存] をクリックします。[計算設定] タブでパラメーターを設定し、次へ をクリックします。SQL タイプ には 検索 & 分析 を選択します。書き込みモード には 新規データのインポート を選択します。SQL クエリ内のフィールドに基づいて、書き込みカラムマッピング を設定します。

      説明

      送信先ストアは、前のステップで作成した Metricstore である必要があります。

    3. [スケジューリング設定] タブでスケジューリング間隔を設定し、OK をクリックします。スケジューリング間隔 は、1 時間ごとまたはカスタム間隔に設定できます。SQL タイムアウト のデフォルト値は 600 秒、実行遅延 のデフォルト値は 60 秒です。

  4. Metricstore 内のメトリクス値ディストリビューションをクエリします。左側のナビゲーションウィンドウで送信先の Metricstore を選択し、クエリページに移動してクエリを実行します。

    クエリ結果のサンプルは次のとおりです:image

  5. オプション: Metricstore 内のデータを可視化ダッシュボードに接続します。Grafana または Simple Log Service の可視化機能を使用できます。

    • Grafana ダッシュボードに接続する方法については、「時系列データを Grafana に接続」をご参照ください。

    • Simple Log Service の可視化ダッシュボード機能を使用する方法については、「可視化」をご参照ください。

説明

上記のチュートリアルでは、インスタンスのエラーコードデータを例として使用しています。その他のデータタイプ(たとえば、各 RemoteAddress の各チャンネルにおけるメッセージ送受信レート、各キューの秒間アクティビティ、1 秒あたりのメッセージ送受信総数、各 API の秒間呼び出し回数など)もクリーンアップできます。

一般的な文

インスタンスの秒間 TPS

* | select microtime/1000/1000 as time, sum(count) as tps 
from 
  (SELECT  microtime, if(Action!='SendMessage', 1, tps) as count 
   from log 
   Where  InstanceId='amqp-xx-xxx' 
     and Action in ('SendMessage', 'ConnectionOpen', 'ChannelOpen', 'ExchangeDeclare', 'QueueBind', 'QueueDeclare', 'QueueDelete', 'ExchangeDelete', 'QueueUnBind', 'ExchangeBind', 'ExchangeUnBind', 'BasicConsume', 'BasicReject', 'BasicRecover', 'BasicAck', 'BasicNAck', 'PullMessage') 
   limit 90000000) 
  
GROUP by time ORDER by time limit 90000000

クエリ結果のサンプルは次のとおりです。

クエリ結果は、time(秒単位のタイムスタンプ)および tps(1 秒あたりのリクエスト数)の 2 列からなるテーブルとして返されます。[グラフ] タブに切り替えて、トレンドチャートを確認できます。

  • クエリを実行する前に、インスタンス ID amqp-xx-xxx をご利用のインスタンス ID に置き換えてください。

  • BasicNack(multiple=false) 呼び出しの場合、TPS は 1 としてカウントされます。BasicNack(multiple=true) 呼び出しの場合、TPS は N としてカウントされます。そのため、Simple Log Service ログから算出される TPS 値は、実際のリクエスト数よりも低くなる可能性があります。

  • クライアントトラフィックが多い場合に TPS チャートをクエリする際は、時間範囲を 1 時間以内に制限してください。また、SQL ステートメントの末尾に limit 90000000 または可能な限り大きな値を持つ limit 句を追加してください。

エクスチェンジによるメッセージ送信数

* and Action : SendMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  split_part(ResourceName,',',2) as exchange_name, 
  split_part(ResourceName,',',3) as routing_key, 
  count(*) as send_total_num 
group by 
  instance_id,
  virtual_host, 
  exchange_name, 
  routing_key 
order by 
  send_total_num 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_id(インスタンス ID)、virtual_host(バーチャルホスト)、exchange_name(エクスチェンジ名)、routing_key(ルーティングキー)、send_total_num(送信されたメッセージ総数)の列からなるテーブルです。

エクスチェンジ別の送信レート

* and Action : SendMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  split_part(ResourceName,',',2) as exchange_name, 
  split_part(ResourceName,',',3) as routing_key, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as send_qps 
group by 
  instance_id,
  virtual_host, 
  exchange_name, 
  routing_key,
  time_second 
order by 
  time_second, 
  send_qps 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostexchange_namerouting_keytime_second(秒単位のタイムスタンプ)、send_qps(秒間送信レート)の列からなるテーブルです。

キュー別に消費されたメッセージ数

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  Queue as queue_name, 
  count(*) as push_total_num 
group by 
  instance_id,
  virtual_host, 
  queue_name 
order by 
  push_total_num 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostqueue_name(キュー名)、push_total_num(プッシュされたメッセージ総数)の列からなるテーブルです。

キュー別の消費レート

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  Queue as queue_name, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as push_qps 
group by 
  instance_id,
  virtual_host, 
  queue_name, 
  time_second 
order by 
  time_second, 
  push_qps 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostqueue_nametime_second(秒単位のタイムスタンプ)、push_qps(秒間消費レート)の列からなるテーブルです。

クライアント別の送信レート

* and Action : SendMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as send_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  send_qps 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostclient_ip_port(クライアントの IP アドレスとポート)、time_secondsend_qps(1 秒あたりの送信メッセージ数)の列からなるテーブルです。

クライアント別の消費レート

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as push_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  push_qps 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostclient_ip_porttime_secondpush_qps(1 秒あたりの消費メッセージ数)の列からなるテーブルです。

特定のアクションレート

クライアントの特定のアクションに対する秒間クエリ数 (QPS) をクエリするには、次のステートメントをコピーし、{action_name} をアクション名に置き換えてください。有効な Action 名は以下のとおりです。

  • ConnectionOpen、ChannelOpen

  • QueueDeclare、QueueDelete、QueueBind、QueueUnbind

  • ExchangeDeclare、ExchangeDelete

  • ExchangeBind、ExchangeUnBind

  • SendMessage、BasicConsume、BasicGet、BasicAck、BasicReject、BasicNack、BasicRecover

* and Action : {action_name} and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as {action_name}_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  {action_name}_qps 
limit 10000000

たとえば、クライアントの ConnectionOpen アクションの QPS をクエリするには、次のステートメントを使用します。

* and Action : ConnectionOpen and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host, 
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as connection_open_qps 
group by 
  instance_id,
  virtual_host, 
  client_ip_port, 
  time_second 
order by 
  time_second, 
  connection_open_qps 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostclient_ip_porttime_secondconnection_open_qps(1 秒あたりの ConnectionOpen リクエスト数)の列からなるテーブルです。

アクション別の QPS

このステートメントは、各クライアントにおけるすべてのアクションの QPS 統計を一度に集計します。

* and Code : 200 | 
select 
  InstanceId as instance_id,
  VHost as virtual_host,
  Action as action_type,
  RemoteAddress as client_ip_port, 
  microtime / 1000 / 1000 as time_second, 
  count(*) as action_qps
group by 
  instance_id,
  virtual_host,
  client_ip_port,
  action_type,
  time_second 
order by
  time_second, 
  action_qps
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostclient_ip_portaction_type(ExchangeDeclare や ConnectionOpen などのアクションタイプ)、time_secondaction_qps の列からなるテーブルです。

エラー頻度

* and not Code = 200 | 
select 
  Code as error_code,
  VHost as virtual_host,
  split_part(split_part(Info, '[', 1), 'Req', 1) as error_info,
  microtime / 1000 / 1000 as time_second,
  count(*) as error_num
group by 
  virtual_host,
  error_code,
  time_second,
  error_info
order by
  time_second, 
  error_num
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、error_code(エラーコード)、virtual_hosterror_info(エラーの説明)、time_seconderror_num(エラー発生回数)の列からなるテーブルです。

メッセージ本文サイズの平均値

* and Action : SendMessage and Code: 200 | 
select 
  InstanceId as instance_id, 
  VHost as virtual_host, 
  split_part(Queue, ';', 1) as queue_name, 
  microtime / 1000 / 1000 as time_second, 
  avg(cast(split_part(ResourceName, 'bodySize=', 2) as bigint)) as avg_body_size 
group by 
  instance_id, 
  virtual_host, 
  queue_name, 
  time_second 
order by 
  time_second, 
  avg_body_size 
limit 10000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostqueue_nametime_secondavg_body_size(バイト単位の平均メッセージ本文サイズ)の列からなるテーブルです。

メッセージ別のプッシュ試行回数

* and Action : PushMessage and Code : 200 | 
select 
  InstanceId as instance_id, 
  VHost as virtual_host, 
  split_part(split_part(ResourceName, ',', 1), '=', 2) as msg_id, 
  count(*) as push_times 
group by 
  instance_id, 
  virtual_host, 
  msg_id 
order by 
  push_times desc 
limit 1000000

クエリ結果のサンプルは次のとおりです。

結果は、instance_idvirtual_hostmsg_id(メッセージ ID)、push_times(プッシュ試行回数)の列からなるテーブルです。結果は、プッシュ試行回数の降順でソートされています。