Skip to main content

Signal schema reference

The signal schema is the fixed field set every signal carries, the shape a detection writes when its conditions match.

A deployed detection materializes its signals into a continuous table at signals.<detection>, one row per match, and every row has this shape. The query fills the fields it can from the events it read, and the platform injects event.id. Because the field set is fixed, a signal from Okta and a signal from CloudTrail carry the same field names, and a detection reading another detection's signals correlates on them. The entity families (users, hosts, sources, destinations, and the rest) are arrays, because one signal can involve several of each. extra is the one place a query can add fields the schema does not define.

Notation​

  • [] marks an array of structs. The fields listed under it are the fields of one element.
  • The schema marks only timestamp, message, and labels as required, so every other field is optional.
  • unknown is the type the schema itself reports for sources[].geo.location and threat.enrichments[].indicator.geo.location, so neither field has a concrete type to document.

Top-level fields​

FieldTypeDescription
timestamptimestampTime when the detection fired or the primary event occurred.
messagestringHuman-readable summary of the signal, for display in the app.
labelsmap<string, string>Key-value map carrying the signal's most important context. Shaped for a language model to parse.
tagsarray<string>String tags for categorization and filtering.
eventstructEvent metadata describing the time window and classification of the detected activity.
signalstructSeverity, confidence, risk assessment, and MITRE ATT&CK mapping for the signal.
detectionstructContext about the rule that fired: authorship, references, known false positives, MITRE ATT&CK mapping, and methodology.
hostsarray<struct>Hosts and systems involved.
usersarray<struct>Users and identities involved.
sourcesarray<struct>Source endpoints involved, such as attacking IPs and originating systems.
destinationsarray<struct>Destination endpoints involved, such as target systems and accessed resources.
processesarray<struct>Processes involved.
filesarray<struct>Files involved.
network_flowsarray<struct>Network flow information associated with the detected activity.
registry_entriesarray<struct>Windows registry entries involved.
cloudstructCloud environment context for the detected activity.
urlsarray<struct>URLs involved.
threatstructThreat intelligence context and enrichments.
relatedstructRelated signals and events involved in the detected activity.
extrastructCustom fields container. Fields a query writes under extra do not fail schema validation.

event​

FieldTypeDescription
event.starttimestampStart of the detected activity or observation window.
event.endtimestampEnd of the detected activity or observation window.
event.durationintDuration of the detected activity in nanoseconds, event.end minus event.start.
event.kindstringEvent kind. Always signal for detections.
event.idstringDeterministic identifier for this signal instance. The platform injects it at deploy time.
event.actionstringThe action captured by the event.
event.outcomestringOutcome of the event. Valid values success, failure, unknown.

signal​

The signal's identifier is event.id. The signal struct has no id field.

FieldTypeDescription
signal.severitystringSeverity of the signal. Valid values critical, high, medium, low, informational.
signal.confidencestringDetection confidence level. Valid values high, medium, low.
signal.risk_scoreintBase risk score for the detection, 0 to 100. Bands are 0-30 low, 31-60 medium, 61-85 high, and 86-100 critical.
signal.observed_countintNumber of events that contributed to this detection.
signal.skip_alertbooleanWhen true, Perpetual stores the signal and does not create an alert, even when the detection has alerting enabled. false, null, or an absent field leaves alerting unchanged.
signal.risk_factorsarray<string>Risk factors that contributed to the score.
signal.risk_summarystringHuman-readable risk explanation.
signal.mitre_tacticsarray<string>MITRE ATT&CK tactic names.
signal.mitre_techniquesarray<string>MITRE ATT&CK technique IDs.
signal.mitre_subtechniquesarray<string>MITRE ATT&CK sub-technique IDs.

detection​

FieldTypeDescription
detection.descriptionstringDetailed explanation of what the rule detects.
detection.authorstringAuthor or team that created the rule.
detection.referencesarray<string>URLs to documentation, threat intel, or research.
detection.false_positivesarray<string>Known false positive scenarios.
detection.tagsarray<string>Searchable tags for categorization.
detection.mitre_tacticsarray<string>MITRE ATT&CK tactic names.
detection.mitre_techniquesarray<string>MITRE ATT&CK technique IDs.
detection.mitre_subtechniquesarray<string>MITRE ATT&CK sub-technique IDs.
detection.methodstringDetection methodology. Valid values signature, anomaly, correlation, behavioral, statistical, machine_learning.
TODO ‼️

Could not verify how detection.mitre_tactics, detection.mitre_techniques, and detection.mitre_subtechniques differ from the identically named fields on signal, or how detection.tags differs from the top-level tags. The schema gives each pair the same description and does not say which copy a consumer reads.

Sources checked:

  • The get-signal-schema tool.
  • packages/database/src/system-schemas/signal.json, which confirms each pair is two distinct fields (one inside the signal struct, one inside detection) rather than one field documented twice.
  • packages/database/src/drizzle/schema/detection.ts plus packages/contracts/.../z-detection.ts, which carry no mitre_* fields at all, so neither copy is populated from the detection resource and a detection's query must write whichever it uses.
  • Observed data in data-plane/integration-tests/.../perplogs/expected.json, which projects the detection.* copies.

Neither the schema nor the code answers which copy a detection author should populate. That is a product question.

hosts​

FieldTypeDescription
hosts[].namestringHostname or system identifier.
hosts[].idstringUnique host identifier.
hosts[].ipstringHost IP address.
hosts[].macstringHost MAC address.
hosts[].architecturestringSystem architecture.
hosts[].osstructOperating system information.
hosts[].os.familystringOS family, such as windows, linux, or macos.
hosts[].os.namestringOS name.
hosts[].os.versionstringOS version.

users​

FieldTypeDescription
users[].namestringUsername.
users[].idstringUnique user identifier.
users[].emailstringUser email address.
users[].domainstringUser domain.
users[].full_namestringFull user name.
users[].rolesarray<string>User roles or groups.

sources​

FieldTypeDescription
sources[].ipstringSource IP address.
sources[].portintSource port.
sources[].domainstringSource domain name.
sources[].geostructGeographic location information for the source.
sources[].geo.countrystringSource country.
sources[].geo.citystringSource city.
sources[].geo.locationunknownGeographic coordinates.
sources[].userstructUser information associated with the source.
sources[].user.namestringSource username.
sources[].asstructAutonomous System information for the source IP.
sources[].as.numberintAutonomous System Number.
sources[].as.organizationstringAS organization name.

destinations​

FieldTypeDescription
destinations[].ipstringDestination IP address.
destinations[].portintDestination port.
destinations[].domainstringDestination domain name.
destinations[].geostructGeographic location information for the destination.
destinations[].geo.countrystringDestination country.

processes​

FieldTypeDescription
processes[].namestringProcess name.
processes[].pidintProcess ID.
processes[].ppidintParent process ID.
processes[].executablestringFull path to executable.
processes[].command_linestringFull command line.
processes[].working_directorystringWorking directory.
processes[].hashstructFile hashes of the process executable.
processes[].hash.md5stringMD5 hash of executable.
processes[].hash.sha256stringSHA256 hash of executable.

files​

FieldTypeDescription
files[].pathstringFull file path.
files[].namestringFile name.
files[].directorystringDirectory path.
files[].extensionstringFile extension.
files[].sizeintFile size in bytes.
files[].hashstructFile hashes, for integrity verification and threat intelligence lookup.
files[].hash.md5stringMD5 hash of the file.
files[].hash.sha256stringSHA256 hash of the file.
files[].createdtimestampFile creation time.
files[].modifiedtimestampLast modification time.

network_flows​

FieldTypeDescription
network_flows[].protocolstringNetwork protocol.
network_flows[].transportstringTransport protocol.
network_flows[].applicationstringApplication protocol.
network_flows[].directionstringTraffic direction: inbound, outbound, internal, or external.
network_flows[].bytesintTotal bytes transferred.
network_flows[].packetsintTotal packets.
network_flows[].community_idstringCommunity ID flow hash, for correlating network flows.

registry_entries​

FieldTypeDescription
registry_entries[].pathstringFull registry path.
registry_entries[].keystringRegistry key.
registry_entries[].valuestringRegistry value name.
registry_entries[].hivestringRegistry hive.
registry_entries[].datastructRegistry value data.
registry_entries[].data.stringsarray<string>Registry value data as a string array.
registry_entries[].data.typestringRegistry value type.

cloud​

FieldTypeDescription
cloud.providerstringCloud provider: aws, azure, gcp, or digitalocean.
cloud.regionstringCloud region.
cloud.accountstructCloud account information.
cloud.account.idstringCloud account ID.
cloud.account.namestringCloud account name.
cloud.projectstructCloud project information, for GCP and Azure.
cloud.project.idstringProject or subscription ID.
cloud.servicestructCloud service information.
cloud.service.namestringCloud service name, such as ec2, lambda, iam, or s3.

urls​

FieldTypeDescription
urls[].fullstringFull URL.
urls[].domainstringDomain name.
urls[].pathstringURL path.
urls[].querystringQuery string.
urls[].schemestringURL scheme.

threat​

FieldTypeDescription
threat.enrichmentsarray<struct>Threat intelligence enrichments from indicator matching.
threat.enrichments[].indicatorstructThreat indicator details from threat intelligence enrichment.
threat.enrichments[].matchedstructDetails about how the indicator matched the event.

threat.enrichments[].indicator​

FieldTypeDescription
threat.enrichments[].indicator.typestringIndicator type, such as ipv4-addr, domain-name, file-hash, url, or email-addr.
threat.enrichments[].indicator.confidencestringVendor-neutral confidence rating.
threat.enrichments[].indicator.namestringDisplay name for the indicator.
threat.enrichments[].indicator.descriptionstringDescription of threat activity associated with this indicator.
threat.enrichments[].indicator.email_addressstringEmail address indicator value.
threat.enrichments[].indicator.ipstringIP address indicator value.
threat.enrichments[].indicator.portintPort number indicator value.
threat.enrichments[].indicator.first_seentimestampWhen the intelligence source first reported this indicator.
threat.enrichments[].indicator.last_seentimestampWhen the intelligence source last reported this indicator.
threat.enrichments[].indicator.modified_attimestampLast modification timestamp for the indicator.
threat.enrichments[].indicator.marking_tlpstringTraffic Light Protocol (TLP) sharing designation.
threat.enrichments[].indicator.marking_tlp_versionstringTLP version of the marking.
threat.enrichments[].indicator.providerstringThreat intelligence provider name.
threat.enrichments[].indicator.referencestringURL with additional information about the indicator.
threat.enrichments[].indicator.scanner_statsintCount of AV and EDR vendors detecting malicious content.
threat.enrichments[].indicator.sightingsintNumber of observations of this indicator.
threat.enrichments[].indicator.asstructAutonomous System information for IP indicators.
threat.enrichments[].indicator.as.numberintAutonomous System Number.
threat.enrichments[].indicator.as.organizationstringAS organization name.
threat.enrichments[].indicator.filestructFile information for file-based indicators.
threat.enrichments[].indicator.file.hash_md5stringMD5 hash of the file.
threat.enrichments[].indicator.file.hash_sha256stringSHA256 hash of the file.
threat.enrichments[].indicator.file.namestringFile name.
threat.enrichments[].indicator.file.pathstringFile path.
threat.enrichments[].indicator.file.sizeintFile size in bytes.
threat.enrichments[].indicator.geostructGeographic information for the indicator.
threat.enrichments[].indicator.geo.countrystringCountry code.
threat.enrichments[].indicator.geo.citystringCity name.
threat.enrichments[].indicator.geo.locationunknownGeographic coordinates.
threat.enrichments[].indicator.registrystructRegistry information for registry-based indicators.
threat.enrichments[].indicator.registry.pathstringFull registry path.
threat.enrichments[].indicator.registry.keystringRegistry key.
threat.enrichments[].indicator.registry.valuestringRegistry value name.
threat.enrichments[].indicator.urlstructURL information for URL-based indicators.
threat.enrichments[].indicator.url.fullstringFull URL.
threat.enrichments[].indicator.url.domainstringDomain name.
threat.enrichments[].indicator.url.pathstringURL path.
threat.enrichments[].indicator.url.schemestringURL scheme.

threat.enrichments[].matched​

FieldTypeDescription
threat.enrichments[].matched.atomicstringThe atomic indicator value that matched.
threat.enrichments[].matched.fieldstringThe field in the event that matched the indicator.
threat.enrichments[].matched.idstringIndicator document ID.
threat.enrichments[].matched.indexstringIndicator document index.
threat.enrichments[].matched.occurredtimestampMatch generation time.
threat.enrichments[].matched.typestringMatch type identifier.
FieldTypeDescription
related.eventsarray<struct>Related events involved in the detected activity.
related.events[].timestamptimestampTime when the related event occurred.
related.events[].messagestringHuman-readable description of the related event.
related.events[].labelsmap<string, string>Key-value context map for the related event.
related.events[].tagsarray<string>Tags categorizing the related event.
related.events[].eventstructEvent metadata for the related event.
related.events[].event.idstringUnique identifier for the related event.
related.signalsarray<struct>Related signals involved in the detected activity.
related.signals[].timestamptimestampTime when the related signal fired.
related.signals[].messagestringHuman-readable description of the related signal.
related.signals[].labelsmap<string, string>Key-value context map for the related signal.
related.signals[].tagsarray<string>Tags categorizing the related signal.
related.signals[].signalstructSignal metadata for the related signal.
related.signals[].signal.idstringUnique identifier for the related signal.
related.signals[].signal.severitystringSeverity of the related signal. Valid values critical, high, medium, low, informational.
related.signals[].signal.risk_scoreintRisk score of the related signal, 0 to 100.