全部产品
Search
文档中心

ApsaraMQ for RabbitMQ:Metode untuk menghasilkan metrik yang presisi hingga detik

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menghasilkan metrik presisi detik menggunakan fitur manajemen log pesan.

Informasi latar belakang

CloudMonitor menyediakan grafik yang menampilkan nilai rata-rata statistik tingkat menit untuk instance ApsaraMQ for RabbitMQ. CloudMonitor tidak menyediakan grafik transaksi per detik (TPS), yaitu statistik yang dihitung per detik. Jumlah permintaan yang dikirim klien per detik dengan memanggil metode Protokol Pengaturan Pesan Lanjutan (AMQP) digunakan untuk menghitung TPS dari sebuah ApsaraMQ for RabbitMQ instance.

Berikut adalah metode AMQP yang terlibat dalam perhitungan TPS:

  • ConnectionOpen dan ChannelOpen

  • QueueDeclare, QueueDelete, QueueBind, dan QueueUnbind

  • ExchangeDeclare dan ExchangeDelete

  • ExchangeBind dan ExchangeUnBind

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

Untuk informasi lebih lanjut, lihat Metode Permintaan.

Prosedur

  1. Aktifkan fitur log pesan dan konfigurasikan indeks.

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

    1. Masuk ke konsol Simple Log Service. Di bagian Proyek pada halaman yang muncul, klik nama proyek yang ingin Anda kelola. Pada halaman detail proyek, pilih ikon image dan klik Buat Sekarang.image

    2. Di panel Create Metricstore, tentukan informasi dasar tentang Metricstore yang ingin Anda buat.image

  3. Buat tugas pembersihan.

    1. Pergi ke halaman Pencarian & Analisis dari logstore yang ingin Anda kelola dan masukkan pernyataan pencarian. Dalam contoh berikut, kode kesalahan dari instance ApsaraMQ for RabbitMQ dibersihkan.

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

      Pernyataan sebelumnya berada dalam format Pernyataan Pencarian/Pernyataan Analitik. Dalam format ini, pernyataan pencarian menentukan kondisi filter dan pernyataan analitik adalah pernyataan SQL standar. Data hanya dapat ditulis ke Metricstore jika item berikut dibersihkan dari hasil kueri: label yang Anda butuhkan, nilai metrik setiap label, dan waktu. Dalam pernyataan sebelumnya, Code menentukan label, yaitu kode respons dari setiap permintaan, num menentukan nilai setiap label, dan timeSecond menentukan waktu dalam detik.

      Gambar berikut menunjukkan hasil kueri sampel.image

    2. Di hasil kueri, klik tab Graph dan kemudian klik Save as Scheduled SQL Job. Di langkah Compute Settings dari wizard yang muncul, konfigurasikan parameter berikut dan klik Next.image

      Catatan

      Saat mengonfigurasi parameter sebelumnya, tentukan Metricstore yang Anda buat untuk parameter Proyek/Sumber Logstore.

    3. Di langkah Scheduling Settings, tentukan interval penjadwalan dan klik OK.image

  4. Kueri distribusi nilai metrik di Metricstore.image

    Gambar berikut menunjukkan hasil kueri sampel.image

  5. (Opsional) Integrasikan data di Metricstore ke Grafana atau Simple Log Service dan tampilkan data tersebut di dashboard.

Catatan

Dalam contoh sebelumnya, kode kesalahan dari instance ApsaraMQ for RabbitMQ dibersihkan. Anda juga dapat membersihkan data lainnya, seperti laju pesan setiap saluran pada setiap klien jarak jauh, beban kerja dan status kesehatan setiap antrian per detik, jumlah total pesan yang dikirim dan diterima per detik, serta jumlah panggilan untuk setiap operasi API per detik.

Pernyataan Umum

Kueri grafik TPS suatu instance

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

Gambar berikut menunjukkan hasil kueri sampel.

image

  • Ganti amqp-xx-xxx dalam kode sebelumnya dengan ID instance yang grafik TPS-nya ingin Anda kueri.

  • Jika klien memanggil BasicNack dengan pengaturan multiple=false, satu permintaan dikirimkan untuk setiap pemanggilan. Jika klien memanggil BasicNack dengan pengaturan multiple=true, beberapa permintaan dikirimkan untuk setiap pemanggilan. Namun, SLS hanya membuat satu entri log untuk pemanggilan BasicNack, terlepas dari apakah beberapa permintaan dikirimkan dalam pemanggilan tersebut. Oleh karena itu, TPS yang dikembalikan dalam grafik TPS lebih kecil daripada TPS aktual.

  • Saat Anda mengkueri grafik TPS, jika klien Anda menerima sejumlah besar lalu lintas, kami sarankan Anda menentukan rentang waktu yang kurang dari atau sama dengan 1 jam dan menambahkan limit 90000000 ke pernyataan SQL yang dieksekusi untuk mengkueri grafik TPS. Anda juga dapat mengganti 90000000 dalam limit dengan nilai terbesar yang mungkin.

Kueri jumlah total pesan yang dikirim oleh exchange dan routing key

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri laju pengiriman pesan per detik berdasarkan exchange dan routing key

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri jumlah pesan yang dikonsumsi oleh setiap antrian per detik

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri laju konsumsi pesan setiap antrian per detik

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri jumlah pesan yang dikirim oleh setiap klien per detik

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri jumlah pesan yang dikonsumsi oleh setiap klien per detik

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri laju pelaksanaan operasi pada setiap klien per detik

Jika Anda ingin mengkueri permintaan per detik (QPS) dari operasi yang dilakukan pada klien tertentu, salin pernyataan berikut dan ganti {action_name} dengan nama operasi. Operasi berikut tersedia:

  • ConnectionOpen dan ChannelOpen

  • QueueDeclare, QueueDelete, QueueBind, dan QueueUnbind

  • ExchangeDeclare dan ExchangeDelete

  • ExchangeBind dan ExchangeUnBind

  • SendMessage, BasicConsume, BasicGet, BasicAck, BasicReject, BasicNack, dan 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, Anda dapat menggunakan pernyataan berikut untuk mengkueri QPS pembukaan koneksi:

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri QPS setiap operasi

Anda dapat menggunakan pernyataan berikut untuk mengkueri QPS semua operasi 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri frekuensi kemunculan setiap 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri ukuran rata-rata badan 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

Gambar berikut menunjukkan hasil kueri sampel.

image

Kueri jumlah kali setiap pesan didorong

* 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

Gambar berikut menunjukkan hasil kueri sampel.

image