req_8472See the whole execution. Know how it actually ended.
Follow incoming and outbound requests across services, then beyond the API response through queues, workers, retries, and the real business outcome.
Each system recorded a local fact, using its own identifier, clock precision, and idea of success.
92message_idmsg_48212job_idjob_318prv_319declinedEach source recorded a local fact. None provides the complete investigation.
req_847292message_idmsg_48212job_idjob_318prv_319declinedFoveus does not orchestrate your infrastructure. It reveals the execution already moving through it. Queue and worker continuation coverage is expanding during the private beta.
One execution across every API.
One request can cross several services. Foveus keeps it one execution, pairing every outbound call with the downstream incoming request it becomes.
Checkout API outbound POST /payments becomes Payments API incoming POST /payments. The same relationship continues through Risk API to the provider.
An execution can begin anywhere.
Request, message, worker, job, or schedule: the root changes, but the visual language and the final business result stay consistent.
One request can cross several services.
An outbound call from one API becomes the incoming request of the next. Foveus preserves both sides and their parent-child chain.
The response ends. The execution does not.
Carry context beyond ASP.NET Core into a queue, worker, retry, provider request, and the business outcome.
A consumed message can be the beginning.
See consumers, fan-out work, publishes, and the terminal result even when there is no inbound HTTP request.
One job run. Every item it touched.
Understand batches, retries, partial completion, and the final state of the run as one business operation.
Recurring work deserves a real ending.
Follow a schedule from trigger to comparison, mismatch detection, issue creation, and the outcome needing attention.
Logs that already know where they belong.
Foveus attaches every line to the request, service, and execution that produced it, then orders the complete stream chronologically.
Stop grepping the same correlation ID across separate streams. Move from the whole execution to one service without losing its surrounding story.
Infrastructure success is not business success.
Requests can return, messages can acknowledge, and workers can complete while the operation still fails the user.
Investigate the complete execution.
Move from the root request to every child call, related log, payload, issue, and business outcome without reconstructing the chain across separate tools.
The execution is the unit of investigation. Requests and logs are evidence inside it, not disconnected screens you have to stitch together.
Recurring failures become one evolving issue.
Group matching execution failures, preserve their evidence, and see when the same problem recurs or starts behaving differently.
Without grouping
Every failed execution becomes another alert, row, or log search.
38 signals → 1 issuePayments complete technically but resolve to a declined outcome
Affected executions
PAY-8667Payments API → PaymentWorkerPAY-8612Payments API → PaymentWorkerPAY-8588PaymentWorker · message rootPAY-8519Payments API → PaymentWorkerShared evidence
root: payment
provider: card_network
outcome: payment.failed
reason: declined
release: payments-api@1.24.0Built specifically for .NET.
Instrument the frameworks and boundaries already inside your applications, then keep one execution context as work crosses them.
Start with ASP.NET Core and HttpClient. Add Worker Services, Serilog, RabbitMQ, and Hangfire continuations as the workflow grows.
Checkout API
builder.Services.AddFoveus("...");
app.UseFoveus();
POST /checkout
└─ outbound POST /paymentsPayments API
builder.Services.AddFoveus("...");
app.UseFoveus();
POST /payments
└─ parent: POST /checkoutSerilogLogs from both applications attach to the same execution.EXE-8F2A
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoveus("YOUR_API_KEY");
var app = builder.Build();
app.UseFoveus();
app.MapControllers();
app.Run();dotnet add package Foveus.SDK“The hardest production failures rarely lacked evidence. The evidence was scattered across requests, jobs, queues, workers, and provider histories, with no single place showing what the operation was trying to accomplish or how it actually ended.”
Stop debugging fragments.See the execution.
Follow the operation from its first boundary to the business outcome that mattered.