All Products
Search
Document Center

ApsaraMQ for RabbitMQ:Per-second metrics

Last Updated:Jun 13, 2026

Topik ini menjelaskan cara menggunakan manajemen log untuk menghasilkan metrik per detik.

Latar Belakang

Grafik dari Cloud Monitor menampilkan rata-rata tingkat per menit dan tidak dapat menampilkan data TPS per detik. Untuk ApsaraMQ for RabbitMQ, TPS adalah jumlah permintaan metode AMQP yang diajukan klien per detik.

Perhitungan TPS mencakup metode AMQP berikut:

  • ConnectionOpen, ChannelOpen

  • QueueDeclare, QueueDelete, QueueBind, QueueUnbind

  • ExchangeDeclare, ExchangeDelete

  • ExchangeBind, ExchangeUnBind

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

Untuk informasi selengkapnya tentang metode permintaan, lihat Request methods.

Prosedur

  1. Aktifkan manajemen log dan konfigurasikan indeks.

  2. Buat Metricstore untuk menyimpan data metrik yang telah dibersihkan.

    1. Pada halaman detail Project di Simple Log Service console, klik Create Now. Halaman kemudian menampilkan status kosong dengan pesan The current Project has no Metricstore.

    2. Pada panel Create Metricstore, konfigurasikan informasi dasar Metricstore. Parameter utama meliputi Name (nama Metricstore) dan data retention period (periode retensi data, default 30 hari).

  3. Buat pekerjaan transformasi data.

    1. Pada logstore, masukkan pernyataan kueri. Contoh ini melakukan kueri terhadap kode kesalahan instans.

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

      Format pernyataan adalah: Search statement | Analytic statement. Pernyataan pencarian memfilter data, sedangkan pernyataan analitik merupakan kueri SQL standar. Menulis data ke Metricstore memerlukan ekstraksi tiga komponen dari hasil kueri: label yang diperlukan, nilai metrik untuk setiap label, dan timestamp. Pada contoh ini, Code adalah label untuk kode kesalahan, num adalah nilai metrik untuk setiap kode, dan timeSecond adalah timestamp dalam satuan detik.

      Kueri mengembalikan tabel dengan tiga kolom: Code (kode kesalahan), num (jumlah), dan timeSecond (timestamp per detik).

    2. Pada hasil kueri, klik tab Graph, lalu klik Save as Scheduled SQL Job. Pada tab Compute Settings, konfigurasikan parameter, lalu klik Next. Untuk SQL Type, pilih Search & Analysis. Untuk Write Mode, pilih Import New Data. Konfigurasikan Write Column Mapping berdasarkan bidang dalam kueri SQL Anda.

      Catatan

      Store tujuan harus berupa Metricstore yang telah Anda buat pada langkah sebelumnya.

    3. Pada tab Scheduling Settings, atur interval penjadwalan, lalu klik OK. Anda dapat mengatur scheduling interval menjadi per jam atau interval kustom. SQL Timeout default adalah 600 detik, dan Execution Delay default adalah 60 detik.

  4. Kueri distribusi nilai metrik di Metricstore. Di panel navigasi kiri, pilih Metricstore tujuan, buka halaman kueri, lalu jalankan kueri.

    Contoh hasil kueri sebagai berikut:image

  5. Opsional: Hubungkan data di Metricstore ke dasbor visualisasi. Anda dapat menggunakan Grafana atau fitur visualisasi dari Simple Log Service.

Catatan

Tutorial di atas menggunakan data kode kesalahan instans sebagai contoh. Anda juga dapat membersihkan jenis data lain, seperti laju pengiriman dan penerimaan pesan untuk setiap channel pada setiap RemoteAddress, aktivitas per detik setiap queue, jumlah total pesan yang dikirim dan diterima per detik, serta jumlah panggilan per detik setiap API.

Pernyataan umum

TPS per detik instans

* | 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

Contoh hasil kueri sebagai berikut:

Kueri mengembalikan tabel dengan dua kolom: time (timestamp per detik) dan tps (permintaan per detik). Anda dapat beralih ke tab Graph untuk melihat grafik tren.

  • Sebelum menjalankan kueri, ganti ID instans amqp-xx-xxx dengan ID instans Anda.

  • Untuk panggilan BasicNack(multiple=false), TPS dihitung sebagai 1. Untuk panggilan BasicNack(multiple=true), TPS dihitung sebagai N. Oleh karena itu, nilai TPS yang dihitung dari log Simple Log Service mungkin lebih rendah daripada jumlah permintaan aktual.

  • Jika traffic klien tinggi saat Anda mengkueri grafik TPS, batasi rentang waktu menjadi 1 jam atau kurang. Selain itu, tambahkan limit 90000000 atau klausa limit dengan nilai sebesar mungkin di akhir pernyataan SQL.

Pesan yang dikirim oleh exchange

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id (ID instans), virtual_host (virtual host), exchange_name (nama exchange), routing_key (routing key), dan send_total_num (total pesan yang dikirim).

Laju pengiriman berdasarkan exchange

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, exchange_name, routing_key, time_second (timestamp per detik), dan send_qps (laju pengiriman per detik).

Pesan yang dikonsumsi berdasarkan queue

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, queue_name (nama queue), dan push_total_num (total pesan yang didorong).

Laju konsumsi berdasarkan queue

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, queue_name, time_second (timestamp per detik), dan push_qps (laju konsumsi per detik).

Laju pengiriman berdasarkan client

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, client_ip_port (alamat IP dan port klien), time_second, dan send_qps (pesan yang dikirim per detik).

Laju konsumsi berdasarkan client

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, client_ip_port, time_second, dan push_qps (pesan yang dikonsumsi per detik).

Laju aksi tertentu

Untuk mengkueri permintaan per detik (QPS) dari aksi tertentu untuk suatu klien, salin pernyataan berikut dan ganti {action_name} dengan nama aksi. Nama aksi yang valid meliputi:

  • 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

Sebagai contoh, untuk mengkueri QPS dari aksi ConnectionOpen pada suatu klien, gunakan pernyataan berikut:

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, client_ip_port, time_second, dan connection_open_qps (permintaan ConnectionOpen per detik).

QPS berdasarkan aksi

Pernyataan ini mengumpulkan statistik QPS untuk semua aksi pada setiap klien sekaligus.

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, client_ip_port, action_type (jenis aksi, seperti ExchangeDeclare atau ConnectionOpen), time_second, dan action_qps.

Frekuensi kesalahan

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: error_code (kode kesalahan), virtual_host, error_info (deskripsi kesalahan), time_second, dan error_num (jumlah kesalahan).

Ukuran rata-rata body pesan

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, queue_name, time_second, dan avg_body_size (ukuran rata-rata body pesan dalam byte).

Jumlah upaya dorong berdasarkan pesan

* 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

Contoh hasil kueri sebagai berikut:

Hasilnya berupa tabel dengan kolom berikut: instance_id, virtual_host, msg_id (ID pesan), dan push_times (jumlah upaya dorong). Hasil diurutkan secara menurun berdasarkan jumlah upaya dorong.