All Products
Search
Document Center

ApsaraMQ for RabbitMQ:Kueri troubleshooting umum

Last Updated:Jun 21, 2026

Topik ini menyediakan kueri Simple Log Service (SLS) umum untuk membantu Anda melakukan troubleshooting masalah di ApsaraMQ for RabbitMQ, seperti kegagalan pengiriman pesan, error konsumsi, dan backlog pesan.

Prasyarat

Anda telah mengaktifkan fitur manajemen log dan mengonfigurasi indeks.

Kueri umum

Topik ini mencantumkan kueri Simple Log Service (SLS) umum. Untuk langkah-langkah detail dan deskripsi format log, lihat manajemen log.

Temukan alamat IP produsen berdasarkan exchange

Jalankan kueri berikut untuk menampilkan daftar alamat IP produsen.

* and Action : SendMessage and Code : 200 | 
select 
  split_part(ResourceName,',',2) as exchange_name, 
  split_part(ResourceName, ',', 3) as routing_key, 
  RemoteAddress as ip_port, 
  count(*) as total_send_num 
group by 
  exchange_name, routing_key, ip_port 
order by 
  total_send_num DESC 
limit 1000000 

Temukan alamat IP konsumen berdasarkan queue

Jalankan kueri berikut untuk menampilkan daftar alamat IP konsumen.

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

Lacak sebuah pesan

Jalankan kueri di kotak pencarian untuk melacak sebuah pesan.

  • Lacak pesan berdasarkan ID pesan

    InstanceId:amqp-cn-i7m29o3s**** and VHost:cycle**** and ResourceName:msgId=27127757-44dc-4373-afc5-f8ea12f****

    Kueri ini mengembalikan dua entri log: satu dengan Action SendMessage (Code: 200) dan satu lagi dengan Action PushMessage (Code: 200). Hal ini menunjukkan bahwa pesan berhasil dikirim dan didorong.

    Saat client berlangganan menggunakan BasicConsume, Anda dapat melacak pesan dari pengiriman hingga pengiriman oleh server. Aksi SendMessage berkorespondensi dengan panggilan BasicPublish oleh client, dan aksi PushMessage berkorespondensi dengan server yang mendorong pesan ke client. Jika client menarik pesan menggunakan BasicGet, nilai Action adalah BasicGet dan bukan PushMessage.

    Catatan
    • Jika hasil log hanya berisi satu entri SendMessage tetapi beberapa entri PushMessage or BasicGet, kemungkinan client gagal mengonfirmasi pesan dengan memanggil BasicAck dalam periode consumption timeout setelah PushMessage or BasicGet pertama. Hal ini menyebabkan server mengasumsikan bahwa konsumsi gagal dan mengirim ulang pesan tersebut. Untuk informasi lebih lanjut tentang consumption timeout, lihat Deskripsi parameter kebijakan retry instans.

    • Jika hasil log berisi entri log SendDlqMessage selain entri SendMessage dan PushMessage, entri log SendDlqMessage menunjukkan bahwa pesan saat ini dipindahkan ke dead-letter queue.

  • Periksa apakah sebuah pesan telah dikonsumsi

    InstanceId:amqp-cn-i7m29o3s**** and VHost:cycle**** and Queue:cycleCheckQueue**** and ConnectionId:00163efffe08281f-00004e11-0009732f-799c0af9bc4e4913-96b3**** and  ChannelId:1 and (ResourceName:deliveryTag=90 or Property:deliveryTag=90) and RemoteAddress:"/192.168.XX.XX:XXXX"            

    Ambil nilai untuk ConnectionId, ChannelId, deliveryTag, dan RemoteAddress dari log PushMessage. RemoteAddress adalah alamat IP client. ConnectionId adalah pengidentifikasi unik untuk koneksi. ChannelId adalah pengidentifikasi unik untuk channel. deliveryTag adalah pengidentifikasi unik pesan dari sisi server. Entri log DeleteMessage menunjukkan bahwa pesan berhasil dikonsumsi oleh client.

    Kueri ini mengembalikan tiga entri log. Nilai Action mencakup DeleteMessage dan BasicAck, dan Code masing-masing adalah 200. Hal ini menunjukkan bahwa pesan berhasil dikonsumsi.

    Catatan

    Jika client menetapkan autoAck=false saat memanggil BasicConsume, client harus memanggil BasicAck untuk mengonfirmasi bahwa pesan telah dikonsumsi. Server kemudian akan menghapus pesan tersebut. Panggilan BasicAck harus dilakukan dalam periode consumption timeout yang dimulai sejak timestamp PushMessage. Jika periode timeout terlampaui, server menganggap konsumsi gagal dan mengirim ulang pesan ke client. Untuk informasi lebih lanjut, lihat Deskripsi parameter kebijakan retry instans.

    • Jika client memanggil BasicAck, tetapi kueri status konsumsi pesan tidak mengembalikan entri log DeleteMessage, konsumsi gagal. Periksa selisih waktu antara entri PushMessage dan BasicAck. Jika selisihnya melebihi consumption timeout, panggilan BasicAck tidak valid.

    • Jika Anda hanya menemukan entri PushMessage dan DeleteMessage tanpa entri BasicAck, kemungkinan client menggunakan BasicAck(deliveryTag, multiple=true) untuk mengonfirmasi semua pesan sebelumnya hingga deliveryTag tertentu dalam satu panggilan.

Analisis laju konsumsi queue

Jalankan kueri berikut untuk memeriksa distribusi aksi SendMessage, PushMessage or BasicGet, BasicAck, dan DeleteMessage. Jika persentase keempat aksi tersebut kurang lebih sama, laju produksi dan konsumsi seimbang, sehingga hampir tidak ada backlog pesan.

InstanceId:amqp-cn-i7m29o3s**** and Vhost:cycle**** and Queue: cycleCheckQueue**** and (SendMessage or PushMessage or BasicAck  or DeleteMessage)

Di panel Quick Analysis di sisi kiri halaman hasil kueri, lihat distribusi bidang Action. Misalnya, distribusinya bisa berupa BasicAck 25%, DeleteMessage 25%, PushMessage 25%, dan SendMessage 24%.

Jika Anda menemukan pola berikut dalam log, analisis penyebab yang mungkin terjadi:

  • Tidak ada entri DeleteMessage dalam hasil log: Hal ini dapat terjadi jika client menetapkan autoAck=true saat memanggil BasicConsume atau BasicGet. Atau, semua permintaan BasicAck dari client mungkin telah melebihi consumption timeout, sehingga panggilan tersebut tidak valid. Untuk informasi lebih lanjut tentang consumption timeout, lihat Deskripsi parameter kebijakan retry instans.

  • Persentase entri PushMessage jauh lebih rendah daripada entri SendMessage: Hal ini mungkin menunjukkan jumlah subscriber tidak mencukupi. Kami merekomendasikan untuk menambahkan lebih banyak koneksi dan membuat konsumen baru.

  • Persentase entri SendMessage dan PushMessage mirip, tetapi persentase entri DeleteMessage jauh lebih rendah: Hal ini mungkin disebabkan banyak permintaan BasicAck yang melebihi consumption timeout dan menjadi tidak valid. Untuk informasi lebih lanjut tentang consumption timeout, lihat Deskripsi parameter kebijakan retry instans.

  • Persentase entri SendMessage, PushMessage, dan DeleteMessage kurang lebih sama, tetapi persentase entri BasicAck jauh lebih rendah: Periksa apakah kode Anda menggunakan BasicAck(multiple=true).

Kueri pesan dead-letter

Masukkan kueri di kotak pencarian log untuk mengambil pesan yang relevan.

  • Pesan diarahkan ke dead-letter queue karena TTL pesan habis

    InstanceId:amqp-cn-i7m29o3s**** and VHost:dlq**** and ResourceName:msgId=02a162ba-f842-440f-bfd4-2595dd19****

    Kueri ini mengembalikan dua entri log. Bidang Code keduanya bernilai 200, yang menunjukkan bahwa operasi pesan berhasil.

    Entri SendMessage berkorespondensi dengan panggilan BasicPublish Anda untuk mengirim pesan. Entri SendDlqMessage menunjukkan bahwa pesan dikirim ke dead-letter queue yang sesuai setelah TTL-nya habis.

    Catatan

    Entri log ini hanya dihasilkan jika Anda telah mengonfigurasi dead-letter queue.

  • Pesan diarahkan ke dead-letter queue karena TTL queue habis

    1. Tetapkan properti dead-letter dan TTL untuk queue.

      Map<String, Object> argument = new HashMap<>();
      argument.put("x-dead-letter-exchange", [exchangeName]);
      argument.put("x-dead-letter-routing-key", [routingKey]);
      argument.put("x-message-ttl", [ttl]);
      channel.queueDeclare([queueName], true, false, false, argument);
    2. Masukkan kueri berikut di kotak pencarian log untuk mengambil entri SendMessage dan SendDlqMessage.

      InstanceId:amqp-cn-i7m29o3s**** and VHost:dlq**** and ResourceName:msgId=034a75c5-d957-422f-822e-72dfad2a****

      Kueri ini mengembalikan dua entri log: satu aksi SendDlqMessage untuk queue a dan satu aksi SendMessage untuk queue b. Keduanya memiliki Code 200. Di panel Quick Analysis di sisi kiri, distribusi bidang Action menunjukkan 50% SendMessage dan 50% SendDlqMessage.

  • Panggil BasicReject atau BasicNack dengan requeue=false

    InstanceId:amqp-cn-i7m29o3s**** and VHost:dlq**** and (ResourceName:msgId=034a75c5-d957-422f-822e-72dfad2a**** or ResourceName:deliveryTag=1)

    Entri log PushMessage menunjukkan bahwa server mendorong pesan ke client. Setelah menerima pesan, client memanggil BasicReject(requeue=false). Entri log SendDlqMessage yang sesuai menunjukkan bahwa pesan diarahkan ke dead-letter queue.

Kueri ini mengembalikan tiga entri log dengan aksi berikut: PushMessage (Code: 200), BasicReject (Code: 200), dan SendDlqMessage (Code: 200).