SIEM & Log Forwarding
Reach this screen by following Administration → System Settings → SIEM & Log Forwarding. Only users with the Administrator (Admin) role can open it. Click Save and Deploy to save; changes are pushed to the running Gateway environments immediately.
Overview
Apinizer's configuration database is the system of record for audit, session, token and application events. Whatever you forward to a SIEM is a copy, produced for correlation, alerting and long-term archiving on your side.
The delivery contract is best effort:
- Events are handed to the connector on the path that produced them; the connector buffers and sends them.
- When a connector's queue is full, events are dropped rather than blocking the request that produced them.
- Over UDP and plain TCP syslog, "delivered" cannot be observed. For that reason the test button reports Queued, not Sent, for syslog destinations.
- Nothing is retried from a durable outbox. If the SIEM was unreachable, the record is still in the Apinizer database — it is not in your SIEM.
Do not design a compliance control that depends on the SIEM copy alone. Query the Apinizer database (Audit Records, Login Records, Token Requests, Application Logs) when you need the authoritative answer, and use the SIEM copy for correlation and alerting.
Concepts
Streams
A stream is one family of events. Each stream has its own producer, its own collection in the Apinizer database, its own event types and its own way of deriving an outcome.
| Stream | What it records | Apinizer database collection | Event types | Outcome |
|---|---|---|---|---|
| Audit | Administrative changes, Management Console requests, rejected requests, sensitive-access events (secret disclosure, package export, API token lifecycle, PII unmask), and operation events (deployments, promotion executions, ACL grants and revokes) | audit_event | ENTITY, MANAGER_REQUEST, ACCESS_DENIED, SECRET_REVEALED, EXPORT, API_TOKEN_CREATED, API_TOKEN_REVOKED, PII_UNMASK, DEPLOY, UNDEPLOY, PROMOTION_REQUESTED, PROMOTION_APPROVED, PROMOTION_REJECTED, PROMOTION_STARTED, PROMOTION_EXECUTED, PROMOTION_CANCELLED, ACL_GRANT, ACL_REVOKE | SUCCESS, FAILURE, DENIED |
| Session | Management Console and API Portal sign-in, sign-out, token refresh, lockout, and the password lifecycle of a locally managed user | persistent_audit_event | LOGIN_SUCCESS, LOGIN_FAILURE, LOGOUT, TOKEN_REFRESH_SUCCESS, TOKEN_REFRESH_FAILURE, ACCOUNT_LOCKED, PASSWORD_CHANGED, PASSWORD_CHANGE_REQUIRED, PASSWORD_POLICY_VIOLATION | derived from the event type; ACCOUNT_LOCKED is DENIED, PASSWORD_POLICY_VIOLATION is FAILURE, the rest are SUCCESS |
| Token | Token issuance, refresh and rejection on the Gateway | log_tokentraffic | TOKEN_ISSUED, TOKEN_REFRESHED, TOKEN_REJECTED | SUCCESS when there is no error, FAILURE when there is; authentication errors are DENIED |
| Application | Component logs from the Management Console, Gateway, Cache and Integration modules | apinizer_log | LOG.TRACE … LOG.ERROR | WARN and ERROR are FAILURE, everything else SUCCESS |
| API Security | Gateway requests blocked by a policy or failed with an error, across HTTP, gRPC and WebSocket traffic | log_apisecurityevent | AUTHENTICATION, AUTHORIZATION, QUOTA, THROTTLING, VALIDATION, IP_SECURITY, THREAT, ROUTING, GATEWAY, OTHER | DENIED when the request was blocked, FAILURE when it errored |
| API Access | Every request that passes through the Gateway — successful ones included — as bodiless metadata, across HTTP, gRPC and WebSocket traffic | log_apiaccess | the same ten categories as API Security | SUCCESS when the request completed, DENIED when it was blocked, FAILURE when it errored |
| Portal | The API Portal's own domain events — an application registered or removed, a subscription requested/approved/rejected/cancelled, an organization membership or join request managed, a support ticket opened, a personal API access token created or revoked | audit_event (the same collection as Audit — see Portal Events) | PORTAL_APP_CREATED, PORTAL_APP_DELETED, PORTAL_SUBSCRIPTION_REQUESTED, PORTAL_SUBSCRIPTION_APPROVED, PORTAL_SUBSCRIPTION_REJECTED, PORTAL_SUBSCRIPTION_CANCELLED, PORTAL_ORG_MEMBER_INVITED, PORTAL_ORG_MEMBER_ADDED, PORTAL_ORG_MEMBER_ROLE_CHANGED, PORTAL_ORG_MEMBER_REMOVED, PORTAL_ORG_JOIN_REQUESTED, PORTAL_ORG_JOIN_APPROVED, PORTAL_ORG_JOIN_REJECTED, PORTAL_TICKET_CREATED, PORTAL_API_TOKEN_CREATED, PORTAL_API_TOKEN_REVOKED | SUCCESS, FAILURE, DENIED |
Portal sign-ins and sign-outs are not part of the Portal stream — they are Session events, physically recorded in a separate collection, portal_login_logs, rather than persistent_audit_event. A PORTAL_LOGIN_SUCCESS, PORTAL_LOGIN_FAILURE, PORTAL_LOGOUT, PORTAL_ACCOUNT_LOCKED, PORTAL_ACCOUNT_UNLOCKED, PORTAL_PASSWORD_CHANGED, PORTAL_PASSWORD_CHANGE_REQUIRED, PORTAL_PASSWORD_RESET_REQUESTED, PORTAL_PASSWORD_POLICY_VIOLATION or PORTAL_ACCOUNT_DISABLED event type on the Session row above carries source.component: PORTAL and data.portalId, so a rule can select or exclude portal sign-ins without touching Management Console ones — see API Portal Login Logs for the full catalog (ten types in all). PORTAL_ACCOUNT_DISABLED is written only by the inactive-account job so far; PORTAL_ACCOUNT_UNLOCKED only by an administrator's explicit Unlock on Accounts/Developers — a lock that simply expires on its own writes no event of its own, the sign-in row that follows says what happened.
API Access produces one event per request, so it grows at the rate of your traffic rather than at the rate of your incidents. Two switches govern it, and both are off by default:
- Local storage — whether the events are written to the
log_apiaccesscollection at all, on the Streams tab. Turning it on asks for confirmation, because from that moment every request costs a database write. - Authority — whether the stream is dispatched from the destinations on this page.
Before you turn either on, set a short retention for the collection — 3 to 7 days is the recommendation — from the API Access Events row on Application Log Cleanup Tasks, and consider sampling the rule that forwards it.
A request that a policy blocks or that ends in an error produces both an API Security event and an API Access event — the two streams overlap on purpose, so that a destination can subscribe to security incidents without the traffic, or to the traffic without duplicating incidents.
If you forward both streams to the same destination, set Outcomes to SUCCESS on the API Access rule. The API Security rule then carries the blocked and failed requests and the API Access rule carries only the successful ones, and nothing is counted twice.
Full traffic logs — the ones with request and response payloads — are still a separate mechanism and are not part of the SIEM streams; they continue to be forwarded by the log connectors of the Gateway environment. An API Access event is metadata only and never carries a body, a header or a query string.
Destinations
A destination is one connector plus everything that is applied before an event reaches it:
| Part | Meaning |
|---|---|
| Connector | The connection configuration that carries the payload — Syslog, Kafka, Webhook, RabbitMQ, ActiveMQ, Logback, Elasticsearch, Graylog or a database connector. |
| Payload profile | The format of the payload. See below. |
| Stream rules | Per stream: whether the stream is sent to this destination at all, and which of its events are selected. |
| Privacy profile | Optional masking, hashing, deletion or encryption applied to the payload before it leaves Apinizer. |
| Size policy | Optional maximum event size and what happens when an event exceeds it. |
A destination that has no rule for a stream never receives that stream. The same connection configuration can be used by several destinations.
Payload profiles
| Profile | What it produces | Available for |
|---|---|---|
| Legacy Raw | Today's output for your connector type, unchanged — a database connector still writes SQL columns, a Graylog connector still writes a GELF message, an Elasticsearch connector still writes its own document, and the string-based connectors still receive the same JSON they receive today. The field list is frozen: fields added to Apinizer in later versions do not appear in this output. | Every connector type |
| Apinizer JSON v2 | The canonical envelope described under Schema v2 — a stable field order, a typed field allowlist, a severity value, and a data object that carries only the fields explicitly permitted for that stream. | Syslog, Kafka, Webhook, RabbitMQ, ActiveMQ, Logback, Elasticsearch, Graylog |
| CEF 0 | A single-line ArcSight Common Event Format record, produced from the v2 envelope after the privacy profile and the size policy have been applied. See CEF and LEEF. | Syslog |
| LEEF 2.0 | A single-line, tab-separated IBM QRadar Log Event Extended Format record, produced the same way. See CEF and LEEF. | Syslog |
Database connectors write into fixed table columns and therefore cannot carry the v2 envelope; they stay on Legacy Raw. Privacy profiles and size policies are applied on every profile except Legacy Raw, so a destination that needs masking must be switched to Apinizer JSON v2, CEF 0 or LEEF 2.0.
Legacy Raw is kept byte-for-byte compatible so an existing SIEM parser keeps working after the upgrade. It also keeps whatever it emits today, including fields such as the token log's clientInfo. The v2 profile is where the field list is curated: token values, passwords, and Authorization, Cookie and API-key headers are never part of it, and any remaining field whose name looks like a credential is dropped a second time before the payload is sent.
Authority
Every stream is served by exactly one of two sources, and you switch between them per stream:
| Authority | Where the destinations come from | Are rules applied? |
|---|---|---|
| Legacy | The recipient lists that were previously configured under General Settings | No — every event goes to every recipient, exactly as before the upgrade |
| Active | The destinations on this page | Yes — rules, payload profile, privacy profile and size policy all apply |
Switching a stream is immediate in both directions, so you can move one stream at a time and roll it back without losing events.
The Portal stream has no legacy recipient list to fall back to — its sixteen domain events simply reach no destination while it is on Legacy (which is also its default after an upgrade). Switch it to Active to start forwarding them at all. Portal sign-ins and sign-outs are unaffected by this switch: they follow the Session stream's authority instead, as explained under Migration and cutover below.
The page
The page has three tabs.