Dead-Letter Queue (DLQ) Log Analyzer
Paste dead-letter queue messages or error logs, one per line (JSON recommended). The analyzer groups similar errors, finds message IDs that appear more than once, and lists messages with many retries — the likely poison messages.
About this tool
A dead-letter queue collects messages that a consumer could not process after several attempts. When it fills up, the first questions are: which errors are most common, are the same messages showing up repeatedly, and which messages keep failing no matter how often they are retried? This tool answers them from a pasted list.
The analysis runs entirely in your browser. Pasted logs are never sent to a server, so logs that contain internal details are safe to analyze.
How it works
- Input: one message per line. A line that is a JSON object is read by field name: the error from
errorMessage,error,exception,reasonormessage(in that order); the ID frommessageId,MessageId,message_idorid; retries fromretryCount,retries,attemptsorreceiveCount; the queue fromqueueorqueueName; and the time fromtimestamp,timeorts. If none of the error fields exist, the whole object is used as the error text. - A line that is not JSON is treated as the error text. The tool looks in it for
retries: 3orretry=3and forid: abcormessageId=abc; if these are absent, the retry count is 0 and the ID is empty. These two fragments are left out when errors are grouped, so the same error with different IDs and retry counts is one pattern. - Error patterns: UUIDs, IP addresses, long hex strings, timestamps and numbers are replaced with placeholders, so “Timeout for order 48213” and “Timeout for order 48299” count as one pattern. The count, the number of distinct message IDs and the queues involved are shown for each pattern (top 10 on screen, all in the copied text).
- Repeated message IDs: an ID that appears on more than one line. It can mean duplicate delivery, redelivery after a visibility timeout, or the same message logged at each retry; check your system to tell which.
- Poison message candidates: lines whose retry count is at or above the threshold (default 5), highest first. Change the threshold above the buttons.
- Blank lines are ignored. Invalid JSON is not an error; the line is read as plain text. Nothing is fetched from a queue; you supply the data.
FAQ
Q. Which services does this work with?
A. Anything that can give you one record per line: SQS or Service Bus messages exported as JSON, RabbitMQ or Kafka dead-letter dumps, or application logs. Rename fields in your export to match the names above if they differ.
Q. What is a poison message?
A. A message that always fails, for example because its payload is malformed. Retrying it never helps and it can block or slow other messages, so it should be isolated and fixed or discarded.
Q. Is a repeated ID always a duplicate delivery?
A. No. Logs often record the same message at every attempt, so one ID can appear several times with increasing retry counts. The list shows the ID, how many lines contain it and the highest retry count.