apirelio/symfony
Apirelio Symfony SDK links API errors, latency, and releases to affected customers without capturing request or response payloads. It records normalized endpoint metrics and customer context with fail-safe delivery, excluding credentials, cookies, query strings, IPs, and personal data. Supports PHP...
CustomerResolver attaches account id/name/plan, release and environment tags attach the deploy, ApplicationResolver attaches the specific integration/API client. That's the difference between a 40-minute triage and a 4-minute one, and it changes what you can promise in an SLA.metadata_keys (e.g. integration_type, region) plus plan on the customer object give you sliced views — enterprise vs. self-serve, region, integration type. That's a legitimate input to backlog ordering and to post-incident review, and it lets you justify not dropping a bug because it "only" affects three accounts./api/invoices/{invoice}); header capture must be opt-in and allow-listed. That materially shrinks the DPIA / DPA / security-review surface compared to a full APM agent, and it's a decision a PM can defend to legal without a new data-processing negotiation.apirelio/php-core, so a Laravel path likely exists but is not what's described here. If the product is Laravel, treat this as evidence the vendor covers PHP, not as the artifact you'd install.Adopt (pilot) when:
api_client attribute, an auth token → tenant, a subdomain).^0.2 pin, one non-critical service, messenger transport with an async worker, APIRELIO_ENABLED=false as the kill switch.Look elsewhere when:
tracium to apirelio, which is a config/namespace breaking change for any early adopter), while separate release notes claim v1.0.0. Before anything else, confirm which artifact you'd actually install and what the upgrade path from 0.1.x was.file_buffer gives you a local queue, not a local product.Non-negotiable validation before commitment (PM asks engineering to confirm):
fail-safe guarantee hold under load — resolver, transport, and logger failures are caught at the request boundary per the README, but verify no added p99 latency at timeout_seconds: 2 / connect_timeout_seconds: 0.5.messenger and file_buffer? Data loss windows matter if you'll cite this in an SLA.To executives: We have a recurring, unbudgeted cost: when the API degrades, we cannot immediately say which customers are affected, on what plan, or whether a recent release caused it. That's engineering hours in triage and, worse, it's our largest accounts finding out before we do. This package closes that specific gap — it attaches the customer account, plan, environment and release to every API error and latency signal, without recording any request or response content, credentials, or personal data. The privacy posture is the selling point internally: it keeps the legal review small. The strategic call it supports is buy the attribution layer rather than build it — equivalent in-house work is instrumentation plus a delivery pipeline plus a UI, which we would own forever and which is not a differentiator. Risk is elevated and I want to be direct about it: this is a young, pre-traction package with no visible adopters and no commercial support commitment. So the proposal is a scoped, reversible pilot on one non-critical service behind a feature flag, with a defined success metric (time-to-customer-impact during an incident) and an explicit exit if the maintainer or maturity picture doesn't improve. We are not putting this on the critical path of a platform upgrade.
To engineering: Minimal integration surface and deliberately low blast radius. Composer install, register ApirelioBundle, set five env vars, add apirelio: config with paths: [/api/*], and it works — the subscriber is auto-registered and records main requests using route templates, not concrete URLs. Two optional contracts (CustomerResolver, ApplicationResolver) are where you map your existing request attributes to ApirelioCustomer / ApirelioApplication; wire them as service aliases in services.yaml. For error codes, setErrorCode()/addMetadata() on ApirelioManager overrides JSON error.code and adds allow-listed scalars — anything unlisted is discarded, so there's no accidental PII leak by default. Default transport is messenger: route BufferApirelioEvents to an async transport so network delivery is off the request path; note that ingestion failures throw inside the worker so Messenger's retry and failure-transport policies apply — that's the correct place for them to fail. sync is for local diagnostics only; file_buffer needs apirelio:flush scheduled or low-traffic apps will strand a partial batch. Resolver, transport, and logger failures are caught at the request boundary, so analytics can lose an event but cannot alter a customer response or mask an exception — that's the property that makes this safe to pilot.
What I need from you before we commit: reconcile the version line (CHANGELOG stops at 0.2.1 and includes a tracium → apirelio rename that breaks early configs, while release notes claim v1.0.0); confirm PHP 8.5 and Symfony 8 are genuinely in the CI matrix rather than just declared; measure added p99 latency under realistic load with the given timeouts; and document the event-loss window on deploy for both messenger and file_buffer. Pin ^0.2, run it through the existing CI rather than a new one, ship behind APIRELIO_ENABLED, and treat the success criterion as reduced time-to-identify-affected-customers in your next real incident — not dashboard adoption.
How can I help you explore Laravel packages today?