One identifier generated at the edge and attached to every log line turns an incident into a single query, and the hop most implementations lose is the one into the queue.
// middleware: accept an inbound one, or make one
$id = $request->header('X-Correlation-Id') ?: bin2hex(random_bytes(8));
Log::withContext(['correlation_id' => $id]);
// outbound HTTP
Http::withHeaders(['X-Correlation-Id' => $id])->post($url, $payload);
// and the job, which is where it is always lost
dispatch(new ProcessOrder($orderId, $id));
A request that enqueues work and returns is exactly the request whose failure is hardest to trace, because the interesting part happens on another machine minutes later. Accepting an inbound header means the trail can start at the load balancer or in a mobile client. Returning it in the response and showing it on the error page turns a vague bug report into a lookup, which is worth more than any amount of log volume.