Learn · Telemetry
One Schema for Every Source
Elastic stores records from very different sources. The Elastic Common Schema gives them shared field names, so one search can span them.
About 10 min
- In this unit
- Why Elastic gives every source shared field names, and where our data follows them and where it doesn't.
- Before you start
- Reading the Telemetry
Why it matters
An investigation rarely stays in one source. The same host can appear in a network record, a Windows event and a Linux audit record. If each source named that host differently, you would need a different search for each one.
The Elastic Common Schema, ECS, is Elastic's answer: a shared set of field names that every source is mapped onto. Knowing it tells you which field to search before you look, and knowing where a source departs from it saves you from empty results that mean nothing.
What analysts see
In Discover, ECS shows up in three ways.
- Field names grouped by what they describe:
host.,user.,process.,source.,destination.andevent.. - The same field name on records from different sources, so one query matches all of them.
- A source's own native field names alongside the ECS ones, where the mapping keeps them.
The field list for your data view tells you which of these you're dealing with. Read it before you search.
Core concept
ECS groups fields by what they describe. host.* fields describe the machine that recorded the event, user.* the account involved, process.* the program, source.* and destination.* the two ends of a connection, and event.* the record itself: what kind it is and how it turned out.
Every source is mapped onto those names when it is collected. A Windows workstation, a domain controller and a Linux server can all fill host.name, so one search on host.name finds a host's records whatever wrote them.
Mapping is not always complete. Some of our sources keep their original field names next to the ECS ones: on Windows, the event number appears both as event.code and as winlog.event_id. Other sources map everything and keep no native names. Neither is wrong; check which you have.
Not every record fills every field. A field can exist in the schema and still be empty on a given kind of record. An account name is missing on many machine-level events, and Linux records carry no event code at all; they use event.action to say what kind of record they are. A field that is often empty is not evidence of anything.
event.action and event.outcome describe the record itself: what happened, and whether it succeeded, failed or neither applies. How often they are filled varies by source, so read them where they exist and don't rely on them where they don't.
Authentication records follow the same pattern. Whatever the source, an authentication record describes an account, what it tried to reach, where the attempt came from, the method and the result. The host that writes the record is not always the host the person was using, so check which host a field describes before you connect two records.
Which hosts write which records matters too. On our ranges, domain controllers keep their own records, separate from every other Windows host's, and Linux hosts record their activity through an audit agent. If a record you expect isn't there, check whether that kind of host writes it at all.
Annotated examples
One event, two sets of names
All values are invented. A Windows host records that a program closed. This source keeps its native names next to the ECS ones.
- @timestamp:
- 2026-04-02T16:20:44.118Z
- host.name:
- ws-120.corp.example (note 1)
- winlog.computer_name:
- ws-120.corp.example (note 2)
- event.code:
- 4689 (note 3)
- winlog.event_id:
- 4689 (note 4)
- process.name:
- notepad.exe (note 5)
- user.name:
- a.halloran (note 6)
- Note 1: The ECS name for the machine that wrote the record.
- Note 2: Windows' own name for the same thing, with the same value.
- Note 3: The ECS event code: 4689 means a program exited.
- Note 4: Windows' own event number, again the same value.
- Note 5: The program, under its ECS name.
- Note 6: The account it ran as. On many machine-level events this field is empty.
Both sets of names hold the same values. Search the ECS name, and you also match sources that never had the native one.
How to investigate
- 1.
Read the field list first.
For each data view, note which ECS groups it fills, and whether native names appear alongside.
- 2.
Search the ECS name.
It spans every source that maps onto it.
host.name: "ws-120.corp.example" - 3.
If an ECS field returns nothing, check the source.
The field may be empty for that kind of record, or the value may sit only under a native name.
winlog.computer_name: "ws-120.corp.example" - 4.
On records without an event code, read
event.action.It names the kind of record, as on Linux.
- 5.
Check which host wrote the record.
Compare
host.namewith the host the activity is about before you connect two records. - 6.
Treat a sparse field as missing information.
An empty field is not a finding.
Common mistakes
Mistake: Searching one source's native name and missing the others.
InsteadSearch the ECS name, which every mapped source shares.
Mistake: Reading an empty field as "nothing happened".
InsteadMany fields are often empty for a kind of record. Check how often the field is filled before you read meaning into it.
Mistake: Looking for an event code on Linux records.
InsteadUse
event.action, which names the kind of record.Mistake: Assuming the host in
host.nameis where the person was.InsteadIt is the host that wrote the record. Check which host each field describes.
Mistake: Assuming every case maps its data the same way.
InsteadRead the field list for each case's data views.
Field references
| Field | What it tells you | Seen in |
|---|---|---|
| host.name | The machine that wrote the record | Nearly every source; some cases fill it on only part of their records |
| user.name | The account involved, where the record has one | Host and application sources; network sources usually don't have it |
| event.code | The source's own number for the kind of record | Windows sources |
| event.action | What the record says happened | Most sources; Linux uses it instead of a code |
| event.outcome | Whether it succeeded, failed or neither applies | Most sources, filled unevenly |
| process.name | The program involved | Windows and Linux sources |
| winlog.event_id | Windows' native event number, next to event.code | Windows sources that keep native names |
| winlog.computer_name | Windows' native host name, next to host.name | Windows sources that keep native names |
Check yourself
- 1.
- 2.
- 3.
Apply it in a Case
On your next case, open the field list for each data view. Note which ECS groups it fills and whether native names appear. Then run one search on host.name and see which sources it reaches.
- CuckooSkills: Log analysisTelemetry: Windows
- SignetSkills: Log analysisTelemetry: Linux · Network
- TrailheadSkills: Log analysisTelemetry: Linux · Network
References
- Elastic Common Schema reference · Elastic
- ECS field reference · Elastic
- ECS host fields · Elastic
Related in Learn
- Reading the TelemetryHow to read the logs and events a range actually produces: what normal looks like, what an attack does to it, and the fields worth learning to trust.
- Searching with KQLSearch the SIEM every range runs on the way an investigation does: set the time range, ask one precise question in KQL, pin what matters and pivot on what you find.
- Networking for InvestigatorsJust enough networking to read network evidence: addresses, ports, TCP and UDP, DNS, and web requests.
Which events to collect
The Telemetry reference lists, for each log source in this unit, the events worth collecting and why: the techniques each one helps detect, the rules that depend on it, and the standards that name it.