Event Contract (input)
Ghostable sends JSON payloads with signed headers:X-Ghostable-TimestampX-Ghostable-Signature
id(event id)type(event type)occurred_at(timestamp)organization.idactor.id/actor.emailtarget.project_id/target.environment_idmetadata(event-specific context)
Recommended Normalized Fields
Map payloads into a stable schema:| Normalized field | Source |
|---|---|
event.id | id |
event.action | type |
event.created | occurred_at |
organization.id | organization.id |
user.id | actor.id |
user.email | actor.email |
ghostable.project_id | target.project_id |
ghostable.environment_id | target.environment_id |
ghostable.force_overwrite | metadata.force_overwrite |
ghostable.conflicts | metadata.conflicts (if available) |
Datadog Template
- Create an HTTP intake endpoint (or intermediary worker).
- Verify signature before forwarding to Datadog Logs intake.
- Add pipeline remappers:
type->event.actionid->event.idorganization.id->organization.idactor.email->usr.email
- Create monitors:
- high rate of
push_force_overwrite - webhook delivery failures
- repeated version conflicts
- high rate of
event.actionorganization.idghostable.environment_idusr.email
Splunk Template
Usesourcetype=ghostable:audit and JSON extraction.
Suggested field aliases:
event_id=idevent_type=typeorg_id=organization.idactor_email=actor.email
Elastic Template
Map to ECS-compatible fields where possible:id->event.idtype->event.actionoccurred_at->@timestampactor.email->user.emailorganization.id->organization.id
jsonprocessor (if body wrapped as string)dateprocessor foroccurred_atrenameprocessors for ECS fieldssetprocessor forevent.dataset=ghostable.audit
Operational Checks
- Validate signatures and enforce timestamp drift checks before ingest.
- Deduplicate by
idto reduce replay noise. - Keep a dashboard for:
- overwrite activity (
push_force_overwrite) - conflict frequency (
version_conflict) - webhook delivery reliability using Ghostable metrics endpoint.
- overwrite activity (