From de278434504b75916a586790d6f4f2e0e3622520 Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Tue, 25 Feb 2025 16:59:57 -0600 Subject: [PATCH 1/6] delete asciidoc files --- docs/additional-info/artifacts.asciidoc | 6 - docs/additional-info/contributing.asciidoc | 7 - docs/additional-info/faq.asciidoc | 115 - docs/additional-info/glossary.asciidoc | 10 - docs/additional-info/index.asciidoc | 13 - docs/fields/field-details.asciidoc | 14392 ---------------- docs/fields/field-values-usage.asciidoc | 175 - docs/fields/field-values.asciidoc | 630 - docs/fields/fields.asciidoc | 129 - docs/fields/usage/cloud.asciidoc | 78 - docs/fields/usage/service.asciidoc | 92 - docs/fields/usage/threat.asciidoc | 188 - docs/fields/usage/user.asciidoc | 420 - docs/index.asciidoc | 74 - docs/migrating/converting.asciidoc | 205 - .../kib-create-pipeline-from-csv-preview.png | Bin 339125 -> 0 bytes .../images/kib-create-pipeline-from-csv.png | Bin 91345 -> 0 bytes docs/migrating/index.asciidoc | 11 - docs/migrating/products-solutions.asciidoc | 18 - docs/opentelemetry/index.asciidoc | 69 - .../otel-fields-mapping.asciidoc | 2568 --- .../otel-mapping-summary.asciidoc | 1164 -- docs/release-notes/8.0.1.asciidoc | 12 - docs/release-notes/8.0.asciidoc | 61 - docs/release-notes/8.1.asciidoc | 39 - docs/release-notes/8.10.asciidoc | 31 - docs/release-notes/8.11.asciidoc | 28 - docs/release-notes/8.16.asciidoc | 38 - docs/release-notes/8.2.1.asciidoc | 23 - docs/release-notes/8.2.asciidoc | 41 - docs/release-notes/8.3.1.asciidoc | 12 - docs/release-notes/8.3.asciidoc | 25 - docs/release-notes/8.4.asciidoc | 29 - docs/release-notes/8.5.1.asciidoc | 12 - docs/release-notes/8.5.2.asciidoc | 12 - docs/release-notes/8.5.asciidoc | 36 - docs/release-notes/8.6.1.asciidoc | 12 - docs/release-notes/8.6.asciidoc | 21 - docs/release-notes/8.7.asciidoc | 37 - docs/release-notes/8.8.asciidoc | 25 - docs/release-notes/8.9.asciidoc | 18 - docs/release-notes/index.asciidoc | 49 - docs/using-ecs/custom-fields.asciidoc | 123 - docs/using-ecs/design.asciidoc | 59 - docs/using-ecs/getting-started.asciidoc | 290 - docs/using-ecs/guidelines.asciidoc | 82 - .../using-ecs/guidelines/conventions.asciidoc | 84 - .../guidelines/implementation.asciidoc | 230 - .../mapping-network-events.asciidoc | 269 - .../images/ecs-getting-started-dashboard.png | Bin 297021 -> 0 bytes docs/using-ecs/index.asciidoc | 22 - 51 files changed, 22084 deletions(-) delete mode 100644 docs/additional-info/artifacts.asciidoc delete mode 100644 docs/additional-info/contributing.asciidoc delete mode 100644 docs/additional-info/faq.asciidoc delete mode 100644 docs/additional-info/glossary.asciidoc delete mode 100644 docs/additional-info/index.asciidoc delete mode 100644 docs/fields/field-details.asciidoc delete mode 100644 docs/fields/field-values-usage.asciidoc delete mode 100644 docs/fields/field-values.asciidoc delete mode 100644 docs/fields/fields.asciidoc delete mode 100644 docs/fields/usage/cloud.asciidoc delete mode 100644 docs/fields/usage/service.asciidoc delete mode 100644 docs/fields/usage/threat.asciidoc delete mode 100644 docs/fields/usage/user.asciidoc delete mode 100644 docs/index.asciidoc delete mode 100644 docs/migrating/converting.asciidoc delete mode 100644 docs/migrating/images/kib-create-pipeline-from-csv-preview.png delete mode 100644 docs/migrating/images/kib-create-pipeline-from-csv.png delete mode 100644 docs/migrating/index.asciidoc delete mode 100644 docs/migrating/products-solutions.asciidoc delete mode 100644 docs/opentelemetry/index.asciidoc delete mode 100644 docs/opentelemetry/otel-fields-mapping.asciidoc delete mode 100644 docs/opentelemetry/otel-mapping-summary.asciidoc delete mode 100644 docs/release-notes/8.0.1.asciidoc delete mode 100644 docs/release-notes/8.0.asciidoc delete mode 100644 docs/release-notes/8.1.asciidoc delete mode 100644 docs/release-notes/8.10.asciidoc delete mode 100644 docs/release-notes/8.11.asciidoc delete mode 100644 docs/release-notes/8.16.asciidoc delete mode 100644 docs/release-notes/8.2.1.asciidoc delete mode 100644 docs/release-notes/8.2.asciidoc delete mode 100644 docs/release-notes/8.3.1.asciidoc delete mode 100644 docs/release-notes/8.3.asciidoc delete mode 100644 docs/release-notes/8.4.asciidoc delete mode 100644 docs/release-notes/8.5.1.asciidoc delete mode 100644 docs/release-notes/8.5.2.asciidoc delete mode 100644 docs/release-notes/8.5.asciidoc delete mode 100644 docs/release-notes/8.6.1.asciidoc delete mode 100644 docs/release-notes/8.6.asciidoc delete mode 100644 docs/release-notes/8.7.asciidoc delete mode 100644 docs/release-notes/8.8.asciidoc delete mode 100644 docs/release-notes/8.9.asciidoc delete mode 100644 docs/release-notes/index.asciidoc delete mode 100644 docs/using-ecs/custom-fields.asciidoc delete mode 100644 docs/using-ecs/design.asciidoc delete mode 100644 docs/using-ecs/getting-started.asciidoc delete mode 100644 docs/using-ecs/guidelines.asciidoc delete mode 100644 docs/using-ecs/guidelines/conventions.asciidoc delete mode 100644 docs/using-ecs/guidelines/implementation.asciidoc delete mode 100644 docs/using-ecs/guidelines/mapping-network-events.asciidoc delete mode 100644 docs/using-ecs/images/ecs-getting-started-dashboard.png delete mode 100644 docs/using-ecs/index.asciidoc diff --git a/docs/additional-info/artifacts.asciidoc b/docs/additional-info/artifacts.asciidoc deleted file mode 100644 index 77df53de17..0000000000 --- a/docs/additional-info/artifacts.asciidoc +++ /dev/null @@ -1,6 +0,0 @@ -[[ecs-artifacts]] -=== Generated Artifacts - -ECS maintains a collection of artifacts which are generated based on the schema. Examples include Elasticsearch index templates, CSV, and Beats field mappings. The maintained artifacts can be found in the {ecs_github_repo_link}/generated#artifacts-generated-from-ecs[ECS Github repo]. - -Users can generate custom versions of these artifacts using the ECS project's tooling. See the tooling {ecs_github_repo_link}/USAGE.md[usage documentation] for more detail. diff --git a/docs/additional-info/contributing.asciidoc b/docs/additional-info/contributing.asciidoc deleted file mode 100644 index 998c8d4c4d..0000000000 --- a/docs/additional-info/contributing.asciidoc +++ /dev/null @@ -1,7 +0,0 @@ -[[ecs-contributing]] -=== Contributing to {ecs} - -All information related to ECS is versioned in the https://github.com/elastic/ecs[elastic/ecs] repository. All -changes to ECS happen through Pull Requests submitted through Git. - -See the https://github.com/elastic/ecs/blob/master/CONTRIBUTING.md[Contribution Guidelines]. diff --git a/docs/additional-info/faq.asciidoc b/docs/additional-info/faq.asciidoc deleted file mode 100644 index 5b66a40942..0000000000 --- a/docs/additional-info/faq.asciidoc +++ /dev/null @@ -1,115 +0,0 @@ -[[ecs-faq]] -=== Questions and Answers - -[float] -[[ecs-benefits]] -==== What are the benefits of using ECS? - -The benefits to a user adopting these fields and names in their clusters are: - -* **Data correlation.** Ability to easily correlate data from the same or different sources, including: -** data from metrics, logs, and application performance management (apm) tools -** data from the same machines/hosts -** data from the same service -* **Ease of recall.** Improved ability to remember commonly used field names (because there is a single set, not a set per data source) -* **Ease of deduction.** Improved ability to deduce field names (because the field naming follows a small number of rules with few exceptions) -* **Reuse.** Ability to re-use analysis content (searches, visualizations, dashboards, alerts, reports, and machine learning jobs) across multiple data sources -* **Future proofing.** Ability to use any future Elastic-provided analysis content in your environment without modifications - -[float] -[[conflict]] -==== What if I have fields that conflict with ECS? - -The -{ref}/rename-processor.html[rename -processor] can help you resolve field conflicts. For example, imagine that you -already have a field called "user," but ECS employs `user` as an object. You can -use the rename processor on ingest time to rename your field to the matching ECS -field. If your field does not match ECS, you can rename your field to -`user.value` instead. - -[float] -[[addl-fields]] -==== What if my events have additional fields? - -Events may contain fields in addition to ECS fields. These fields can follow the -ECS naming and writing rules, but this is not a requirement. - -[float] -[[dot-notation]] -==== Why does ECS use a dot notation instead of an underline notation? - -There are two common key formats for ingesting data into Elasticsearch: - -* Dot notation: `user.firstname: Nicolas`, `user.lastname: Ruflin` -* Underline notation: `user_firstname: Nicolas`, `user_lastname: Ruflin` - -ECS uses the dot notation to represent nested objects. - -[float] -[[notation-diff]] -===== What is the difference between the two notations? - -Ingesting `user.firstname: Nicolas` and `user.lastname: Ruflin` is identical to ingesting the following JSON: - -[source,json] - "user": { - "firstname": "Nicolas", - "lastname": "Ruflin" - } - -In Elasticsearch, `user` is represented as an {ref}/object.html[object -datatype]. In the case of the underline notation, both are just -{ref}/mapping-types.html[string datatypes]. - -[float] -[[dot-adv]] -===== Advantages of dot notation - -With dot notation, each prefix in Elasticsearch is an object. Each object can have -{ref}/object.html#object-params[parameters] -that control how fields inside the object are treated. In the context of ECS, -for example, these parameters would allow you to disable dynamic property -creation for certain prefixes. - -Individual objects give you more flexibility on both the ingest and the event -sides. In Elasticsearch, for example, you can use the remove processor to drop -complete objects instead of selecting each key inside. You don't have to know -ahead of time which keys will be in an object. - -In Beats, you can simplify the creation of events. For example, you can treat -each object as an object (or struct in Golang), which makes constructing and -modifying each part of the final event easier. - -[float] -[[dot-disadv]] -===== Disadvantage of dot notation - -In Elasticsearch, each key can have only one type. For example, if `user` is an -`object`, you can't use it as a `keyword` type in the same index, like `{"user": -"nicolas ruflin"}`. This restriction can be an issue in certain datasets. For -the ECS data itself, this is not an issue because all fields are predefined. - -[float] -[[underline]] -===== What if I already use the underline notation? - -As long as there are no conflicts, underline notation and ECS dot notation can -coexist in the same document. - -[float] -[[type-interop]] -==== What if I want to use a different data type from the same field type family? - -In Elasticsearch, field types are grouped by family. Types in the same family support -the same search functionality but may have different space usage or performance -characteristics. For example, both `keyword` and `wildcard` types are members of the -`keyword` family, and `text` and `match_only_text` are members of the `text` family. - -The field types defined in ECS provide the best default experience for most users. -However, a different type from the same family can replace the default defined in ECS -if required for a specific use cases. Users should understand any potential performance -or storage differences before changing from a default field type. - -The Elasticsearch {ref}/mapping-types.html[mapping types] section has more information about type -families. diff --git a/docs/additional-info/glossary.asciidoc b/docs/additional-info/glossary.asciidoc deleted file mode 100644 index a1e143f981..0000000000 --- a/docs/additional-info/glossary.asciidoc +++ /dev/null @@ -1,10 +0,0 @@ -[[ecs-glossary]] -=== Glossary of {ecs} Terms - -[[ecs-glossary-ecs]] -ECS:: -*Elastic Common Schema*. The Elastic Common Schema (ECS) is a document schema -for Elasticsearch, for use cases such as logging and metrics. -ECS defines a common set of fields, their datatype, -and gives guidance on their correct usage. -ECS is used to improve uniformity of event data coming from different sources. diff --git a/docs/additional-info/index.asciidoc b/docs/additional-info/index.asciidoc deleted file mode 100644 index f6796174d8..0000000000 --- a/docs/additional-info/index.asciidoc +++ /dev/null @@ -1,13 +0,0 @@ -[[ecs-additional-information]] -== Additional Information - -* <> -* <> -* <> -* <> - -// include::use-cases.asciidoc[] -include::faq.asciidoc[] -include::glossary.asciidoc[] -include::contributing.asciidoc[] -include::artifacts.asciidoc[] diff --git a/docs/fields/field-details.asciidoc b/docs/fields/field-details.asciidoc deleted file mode 100644 index 1066096481..0000000000 --- a/docs/fields/field-details.asciidoc +++ /dev/null @@ -1,14392 +0,0 @@ -[[ecs-base]] -=== Base Fields - -The `base` field set contains all fields which are at the root of the events. These fields are common across all types of events. - -[discrete] -==== Base Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-timestamp]] -<> - -a| Date/time when the event originated. - -This is the date/time extracted from the event, typically representing when the event was generated by the source. - -If the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline. - -Required field for all events. - -type: date - - - -example: `2016-05-23T08:05:34.853Z` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+time_unix_nano+%22&type=code[time_unix_nano] - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+observed_time_unix_nano+%22&type=code[observed_time_unix_nano] - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+start_time_unix_nano+%22&type=code[start_time_unix_nano] - -Note: On logs, events and metrics, `time_unix_nano` defines the time of the event. For logs, `observed_time_unix_nano` defines the time when the event was observed by the collection system. On spans, `start_time_unix_nano` represents the start time of the span. - - -| core - -// =============================================================== - -| -[[field-labels]] -<> - -a| Custom key/value pairs. - -Can be used to add meta information to events. Should not contain nested objects. All values are stored as keyword. - -Example: `docker` and `k8s` labels. - -type: object - - - -example: `{"application": "foo-bar", "env": "production"}` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/k8s/#k8s-pod-label[k8s.pod.label] - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-label[container.label] - -| core - -// =============================================================== - -| -[[field-message]] -<> - -a| For log events the message field contains the log message, optimized for viewing in a log viewer. - -For structured logs without an original message field, other fields can be concatenated to form a human-readable summary of the event. - -If multiple messages exist, they can be combined into one message. - -type: match_only_text - - - -example: `Hello World` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+body+%22&type=code[body] - -Note: The `body` in OTLP is of type `Any` and can be either an unstructured log message or a structured event. - -| core - -// =============================================================== - -| -[[field-tags]] -<> - -a| List of keywords used to tag each event. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["production", "env2"]` - -| core - -// =============================================================== - -|===== - - -[[ecs-agent]] -=== Agent Fields - -The agent fields contain the data about the software entity, if any, that collects, detects, or observes events on a host, or takes measurements on a host. - -Examples include Beats. Agents may also run on observers. ECS agent.* fields shall be populated with details of the agent running on the host or observer where the event happened or the measurement was taken. - -[discrete] -==== Agent Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-agent-build-original]] -<> - -a| Extended build information for the agent. - -This field is intended to contain any build information that a data source may provide, no specific formatting is required. - -type: keyword - - - -example: `metricbeat version 7.6.0 (amd64), libbeat 7.6.0 [6a23e8f8f30f5001ba344e4e54d8d9cb82cb107c built 2020-02-05 23:10:10 +0000 UTC]` - -| core - -// =============================================================== - -| -[[field-agent-ephemeral-id]] -<> - -a| Ephemeral identifier of this agent (if one exists). - -This id normally changes across restarts, but `agent.id` does not. - -type: keyword - - - -example: `8a4f500f` - -| extended - -// =============================================================== - -| -[[field-agent-id]] -<> - -a| Unique identifier of this agent (if one exists). - -Example: For Beats this would be beat.id. - -type: keyword - - - -example: `8a4f500d` - -| core - -// =============================================================== - -| -[[field-agent-name]] -<> - -a| Custom name of the agent. - -This is a name that can be given to an agent. This can be helpful if for example two Filebeat instances are running on the same host but a human readable separation is needed on which Filebeat instance data is coming from. - -type: keyword - - - -example: `foo` - -| core - -// =============================================================== - -| -[[field-agent-type]] -<> - -a| Type of the agent. - -The agent type always stays the same and should be given by the agent used. In case of Filebeat the agent would always be Filebeat also if two Filebeat instances are run on the same machine. - -type: keyword - - - -example: `filebeat` - -| core - -// =============================================================== - -| -[[field-agent-version]] -<> - -a| Version of the agent. - -type: keyword - - - -example: `6.0.0-rc2` - -| core - -// =============================================================== - -|===== - - -[[ecs-as]] -=== Autonomous System Fields - -An autonomous system (AS) is a collection of connected Internet Protocol (IP) routing prefixes under the control of one or more network operators on behalf of a single administrative entity or domain that presents a common, clearly defined routing policy to the internet. - -[discrete] -==== Autonomous System Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-as-number]] -<> - -a| Unique number allocated to the autonomous system. The autonomous system number (ASN) uniquely identifies each network on the Internet. - -type: long - - - -example: `15169` - -| extended - -// =============================================================== - -| -[[field-as-organization-name]] -<> - -a| Organization name. - -type: keyword - -Multi-fields: - -* as.organization.name.text (type: match_only_text) - - - - - -example: `Google LLC` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `as` fields are expected to be nested at: - - -* `client.as` - -* `destination.as` - -* `server.as` - -* `source.as` - -* `threat.enrichments.indicator.as` - -* `threat.indicator.as` - - -Note also that the `as` fields are not expected to be used directly at the root of the events. -[[ecs-client]] -=== Client Fields - -A client is defined as the initiator of a network connection for events regarding sessions, connections, or bidirectional flow records. - -For TCP events, the client is the initiator of the TCP connection that sends the SYN packet(s). For other protocols, the client is generally the initiator or requestor in the network transaction. Some systems use the term "originator" to refer the client in TCP connections. The client fields describe details about the system acting as the client in the network event. Client fields are usually populated in conjunction with server fields. Client fields are generally not populated for packet-level events. - -Client / server representations can add semantic context to an exchange, which is helpful to visualize the data in certain situations. If your context falls in that category, you should still ensure that source and destination are filled appropriately. - -[discrete] -==== Client Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-client-address]] -<> - -a| Some event client addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. - -Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/client/#client-address[client.address] - -| extended - -// =============================================================== - -| -[[field-client-bytes]] -<> - -a| Bytes sent from the client to the server. - -type: long - - - -example: `184` - -| core - -// =============================================================== - -| -[[field-client-domain]] -<> - -a| The domain name of the client system. - -This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. - -type: keyword - - - -example: `foo.example.com` - -| core - -// =============================================================== - -| -[[field-client-ip]] -<> - -a| IP address of the client (IPv4 or IPv6). - -type: ip - - - - - -| core - -// =============================================================== - -| -[[field-client-mac]] -<> - -a| MAC address of the client. - -The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. - -type: keyword - - - -example: `00-00-5E-00-53-23` - -| core - -// =============================================================== - -| -[[field-client-nat-ip]] -<> - -a| Translated IP of source based NAT sessions (e.g. internal client to internet). - -Typically connections traversing load balancers, firewalls, or routers. - -type: ip - - - - - -| extended - -// =============================================================== - -| -[[field-client-nat-port]] -<> - -a| Translated port of source based NAT sessions (e.g. internal client to internet). - -Typically connections traversing load balancers, firewalls, or routers. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-client-packets]] -<> - -a| Packets sent from the client to the server. - -type: long - - - -example: `12` - -| core - -// =============================================================== - -| -[[field-client-port]] -<> - -a| Port of the client. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/client/#client-port[client.port] - -| core - -// =============================================================== - -| -[[field-client-registered-domain]] -<> - -a| The highest registered client domain, stripped of the subdomain. - -For example, the registered domain for "foo.example.com" is "example.com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". - -type: keyword - - - -example: `example.com` - -| extended - -// =============================================================== - -| -[[field-client-subdomain]] -<> - -a| The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. - -For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. - -type: keyword - - - -example: `east` - -| extended - -// =============================================================== - -| -[[field-client-top-level-domain]] -<> - -a| The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". - -type: keyword - - - -example: `co.uk` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-client-nestings]] -[discrete] -===== Field sets that can be nested under Client - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `client.as.*` -| <> -| Fields describing an Autonomous System (Internet routing prefix). - -// =============================================================== - - -| `client.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `client.user.*` -| <> -| Fields to describe the user relevant to the event. - -// =============================================================== - - -|===== - - -[[ecs-cloud]] -=== Cloud Fields - -Fields related to the cloud or infrastructure the events are coming from. - -[discrete] -==== Cloud Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-cloud-account-id]] -<> - -a| The cloud account or organization id used to identify different entities in a multi-tenant environment. - -Examples: AWS account id, Google Cloud ORG Id, or other unique identifier. - -type: keyword - - - -example: `666777888999` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-account-id[cloud.account.id] - -| extended - -// =============================================================== - -| -[[field-cloud-account-name]] -<> - -a| The cloud account name or alias used to identify different entities in a multi-tenant environment. - -Examples: AWS account name, Google Cloud ORG display name. - -type: keyword - - - -example: `elastic-dev` - -| extended - -// =============================================================== - -| -[[field-cloud-availability-zone]] -<> - -a| Availability zone in which this host, resource, or service is located. - -type: keyword - - - -example: `us-east-1c` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-availability-zone[cloud.availability_zone] - -| extended - -// =============================================================== - -| -[[field-cloud-instance-id]] -<> - -a| Instance ID of the host machine. - -type: keyword - - - -example: `i-1234567890abcdef0` - -| extended - -// =============================================================== - -| -[[field-cloud-instance-name]] -<> - -a| Instance name of the host machine. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-cloud-machine-type]] -<> - -a| Machine type of the host machine. - -type: keyword - - - -example: `t2.medium` - -| extended - -// =============================================================== - -| -[[field-cloud-project-id]] -<> - -a| The cloud project identifier. - -Examples: Google Cloud Project id, Azure Project id. - -type: keyword - - - -example: `my-project` - -| extended - -// =============================================================== - -| -[[field-cloud-project-name]] -<> - -a| The cloud project name. - -Examples: Google Cloud Project name, Azure Project name. - -type: keyword - - - -example: `my project` - -| extended - -// =============================================================== - -| -[[field-cloud-provider]] -<> - -a| Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean. - -type: keyword - - - -example: `aws` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-provider[cloud.provider] - -| extended - -// =============================================================== - -| -[[field-cloud-region]] -<> - -a| Region in which this host, resource, or service is located. - -type: keyword - - - -example: `us-east-1` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-region[cloud.region] - -| extended - -// =============================================================== - -| -[[field-cloud-service-name]] -<> - -a| The cloud service name is intended to distinguish services running on different platforms within a provider, eg AWS EC2 vs Lambda, GCP GCE vs App Engine, Azure VM vs App Server. - -Examples: app engine, app service, cloud run, fargate, lambda. - -type: keyword - - - -example: `lambda` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-platform[cloud.platform] - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `cloud` fields are expected to be nested at: - - -* `cloud.origin` - -* `cloud.target` - - -Note also that the `cloud` fields may be used directly at the root of the events. - -[[ecs-cloud-nestings]] -[discrete] -===== Field sets that can be nested under Cloud - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `cloud.origin.*` -| <> -| Provides the cloud information of the origin entity in case of an incoming request or event. - -// =============================================================== - - -| `cloud.target.*` -| <> -| Provides the cloud information of the target entity in case of an outgoing request or event. - -// =============================================================== - - -|===== - - - -[discrete] -==== Cloud Field Usage - -For usage and examples of the cloud fields, please see the <> section. - -include::usage/cloud.asciidoc[] - - -[[ecs-code_signature]] -=== Code Signature Fields - -These fields contain information about binary code signatures. - -[discrete] -==== Code Signature Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-code-signature-digest-algorithm]] -<> - -a| The hashing algorithm used to sign the process. - -This value can distinguish signatures when a file is signed multiple times by the same signer but with a different digest algorithm. - -type: keyword - - - -example: `sha256` - -| extended - -// =============================================================== - -| -[[field-code-signature-exists]] -<> - -a| Boolean to capture if a signature is present. - -type: boolean - - - -example: `true` - -| core - -// =============================================================== - -| -[[field-code-signature-flags]] -<> - -a| beta:[ This field is beta and subject to change. ] - -The flags used to sign the process. - -type: keyword - - - -example: `570522385` - -| extended - -// =============================================================== - -| -[[field-code-signature-signing-id]] -<> - -a| The identifier used to sign the process. - -This is used to identify the application manufactured by a software vendor. The field is relevant to Apple *OS only. - -type: keyword - - - -example: `com.apple.xpc.proxy` - -| extended - -// =============================================================== - -| -[[field-code-signature-status]] -<> - -a| Additional information about the certificate status. - -This is useful for logging cryptographic errors with the certificate validity or trust status. Leave unpopulated if the validity or trust of the certificate was unchecked. - -type: keyword - - - -example: `ERROR_UNTRUSTED_ROOT` - -| extended - -// =============================================================== - -| -[[field-code-signature-subject-name]] -<> - -a| Subject name of the code signer - -type: keyword - - - -example: `Microsoft Corporation` - -| core - -// =============================================================== - -| -[[field-code-signature-team-id]] -<> - -a| The team identifier used to sign the process. - -This is used to identify the team or vendor of a software product. The field is relevant to Apple *OS only. - -type: keyword - - - -example: `EQHXZ8M8AV` - -| extended - -// =============================================================== - -| -[[field-code-signature-timestamp]] -<> - -a| Date and time when the code signature was generated and signed. - -type: date - - - -example: `2021-01-01T12:10:30Z` - -| extended - -// =============================================================== - -| -[[field-code-signature-trusted]] -<> - -a| Stores the trust status of the certificate chain. - -Validating the trust of the certificate chain may be complicated, and this field should only be populated by tools that actively check the status. - -type: boolean - - - -example: `true` - -| extended - -// =============================================================== - -| -[[field-code-signature-valid]] -<> - -a| Boolean to capture if the digital signature is verified against the binary content. - -Leave unpopulated if a certificate was unchecked. - -type: boolean - - - -example: `true` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `code_signature` fields are expected to be nested at: - - -* `dll.code_signature` - -* `file.code_signature` - -* `process.code_signature` - - -Note also that the `code_signature` fields are not expected to be used directly at the root of the events. -[[ecs-container]] -=== Container Fields - -Container fields are used for meta information about the specific container that is the source of information. - -These fields help correlate data based containers from any runtime. - -[discrete] -==== Container Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-container-cpu-usage]] -<> - -a| Percent CPU used which is normalized by the number of CPU cores and it ranges from 0 to 1. Scaling factor: 1000. - -type: scaled_float - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.container.cpu.usage+--%3E%22&type=code[container.cpu.usage] - -| extended - -// =============================================================== - -| -[[field-container-disk-read-bytes]] -<> - -a| The total number of bytes (gauge) read successfully (aggregated from all disks) since the last metric collection. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-container-disk-write-bytes]] -<> - -a| The total number of bytes (gauge) written successfully (aggregated from all disks) since the last metric collection. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-container-id]] -<> - -a| Unique container id. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-id[container.id] - -| core - -// =============================================================== - -| -[[field-container-image-hash-all]] -<> - -a| An array of digests of the image the container was built on. Each digest consists of the hash algorithm and value in this format: `algorithm:value`. Algorithm names should align with the field names in the ECS hash field set. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `[sha256:f8fefc80e3273dc756f288a63945820d6476ad64883892c771b5e2ece6bf1b26]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-image-repo-digests[container.image.repo_digests] - -| extended - -// =============================================================== - -| -[[field-container-image-name]] -<> - -a| Name of the image the container was built on. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-image-name[container.image.name] - -| extended - -// =============================================================== - -| -[[field-container-image-tag]] -<> - -a| Container image tags. - -type: keyword - - -Note: this field should contain an array of values. - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-image-tags[container.image.tags] - -| extended - -// =============================================================== - -| -[[field-container-labels]] -<> - -a| Image labels. - -type: object - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-label[container.label] - -| extended - -// =============================================================== - -| -[[field-container-memory-usage]] -<> - -a| Memory usage percentage and it ranges from 0 to 1. Scaling factor: 1000. - -type: scaled_float - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.container.memory.usage+--%3E%22&type=code[container.memory.usage] - -| extended - -// =============================================================== - -| -[[field-container-name]] -<> - -a| Container name. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-name[container.name] - -| extended - -// =============================================================== - -| -[[field-container-network-egress-bytes]] -<> - -a| The number of bytes (gauge) sent out on all network interfaces by the container since the last metric collection. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-container-network-ingress-bytes]] -<> - -a| The number of bytes received (gauge) on all network interfaces by the container since the last metric collection. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-container-runtime]] -<> - -a| Runtime managing this container. - -type: keyword - - - -example: `docker` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-runtime[container.runtime] - -| extended - -// =============================================================== - -| -[[field-container-security-context-privileged]] -<> - -a| Indicates whether the container is running in privileged mode. - -type: boolean - - - - - -| extended - -// =============================================================== - -|===== - - -[[ecs-data_stream]] -=== Data Stream Fields - -The data_stream fields take part in defining the new data stream naming scheme. - -In the new data stream naming scheme the value of the data stream fields combine to the name of the actual data stream in the following manner: `{data_stream.type}-{data_stream.dataset}-{data_stream.namespace}`. This means the fields can only contain characters that are valid as part of names of data streams. More details about this can be found in this https://www.elastic.co/blog/an-introduction-to-the-elastic-data-stream-naming-scheme[blog post]. - -An Elasticsearch data stream consists of one or more backing indices, and a data stream name forms part of the backing indices names. Due to this convention, data streams must also follow index naming restrictions. For example, data stream names cannot include `\`, `/`, `*`, `?`, `"`, `<`, `>`, `|`, ` ` (space character), `,`, or `#`. Please see the Elasticsearch reference for additional https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html#indices-create-api-path-params[restrictions]. - -beta::[ These fields are in beta and are subject to change.] - -[discrete] -==== Data Stream Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-data-stream-dataset]] -<> - -a| The field can contain anything that makes sense to signify the source of the data. - -Examples include `nginx.access`, `prometheus`, `endpoint` etc. For data streams that otherwise fit, but that do not have dataset set we use the value "generic" for the dataset value. `event.dataset` should have the same value as `data_stream.dataset`. - -Beyond the Elasticsearch data stream naming criteria noted above, the `dataset` value has additional restrictions: - - * Must not contain `-` - - * No longer than 100 characters - -type: constant_keyword - - - -example: `nginx.access` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -| -[[field-data-stream-namespace]] -<> - -a| A user defined namespace. Namespaces are useful to allow grouping of data. - -Many users already organize their indices this way, and the data stream naming scheme now provides this best practice as a default. Many users will populate this field with `default`. If no value is used, it falls back to `default`. - -Beyond the Elasticsearch index naming criteria noted above, `namespace` value has the additional restrictions: - - * Must not contain `-` - - * No longer than 100 characters - -type: constant_keyword - - - -example: `production` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -| -[[field-data-stream-type]] -<> - -a| An overarching type for the data stream. - -Currently allowed values are "logs" and "metrics". We expect to also add "traces" and "synthetics" in the near future. - -type: constant_keyword - - - -example: `logs` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -|===== - - -[[ecs-destination]] -=== Destination Fields - -Destination fields capture details about the receiver of a network exchange/packet. These fields are populated from a network event, packet, or other event containing details of a network transaction. - -Destination fields are usually populated in conjunction with source fields. The source and destination fields are considered the baseline and should always be filled if an event contains source and destination details from a network transaction. If the event also contains identification of the client and server roles, then the client and server fields should also be populated. - -[discrete] -==== Destination Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-destination-address]] -<> - -a| Some event destination addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. - -Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/destination/#destination-address[destination.address] - -| extended - -// =============================================================== - -| -[[field-destination-bytes]] -<> - -a| Bytes sent from the destination to the source. - -type: long - - - -example: `184` - -| core - -// =============================================================== - -| -[[field-destination-domain]] -<> - -a| The domain name of the destination system. - -This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. - -type: keyword - - - -example: `foo.example.com` - -| core - -// =============================================================== - -| -[[field-destination-ip]] -<> - -a| IP address of the destination (IPv4 or IPv6). - -type: ip - - - - - -| core - -// =============================================================== - -| -[[field-destination-mac]] -<> - -a| MAC address of the destination. - -The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. - -type: keyword - - - -example: `00-00-5E-00-53-23` - -| core - -// =============================================================== - -| -[[field-destination-nat-ip]] -<> - -a| Translated ip of destination based NAT sessions (e.g. internet to private DMZ) - -Typically used with load balancers, firewalls, or routers. - -type: ip - - - - - -| extended - -// =============================================================== - -| -[[field-destination-nat-port]] -<> - -a| Port the source session is translated to by NAT Device. - -Typically used with load balancers, firewalls, or routers. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-destination-packets]] -<> - -a| Packets sent from the destination to the source. - -type: long - - - -example: `12` - -| core - -// =============================================================== - -| -[[field-destination-port]] -<> - -a| Port of the destination. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/destination/#destination-port[destination.port] - -| core - -// =============================================================== - -| -[[field-destination-registered-domain]] -<> - -a| The highest registered destination domain, stripped of the subdomain. - -For example, the registered domain for "foo.example.com" is "example.com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". - -type: keyword - - - -example: `example.com` - -| extended - -// =============================================================== - -| -[[field-destination-subdomain]] -<> - -a| The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. - -For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. - -type: keyword - - - -example: `east` - -| extended - -// =============================================================== - -| -[[field-destination-top-level-domain]] -<> - -a| The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". - -type: keyword - - - -example: `co.uk` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-destination-nestings]] -[discrete] -===== Field sets that can be nested under Destination - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `destination.as.*` -| <> -| Fields describing an Autonomous System (Internet routing prefix). - -// =============================================================== - - -| `destination.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `destination.user.*` -| <> -| Fields to describe the user relevant to the event. - -// =============================================================== - - -|===== - - -[[ecs-device]] -=== Device Fields - -Fields that describe a device instance and its characteristics. Data collected for applications and processes running on a (mobile) device can be enriched with these fields to describe the identity, type and other characteristics of the device. - -This field group definition is based on the Device namespace of the OpenTelemetry Semantic Conventions (https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/device/). - -beta::[ These fields are in beta and are subject to change.] - -[discrete] -==== Device Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-device-id]] -<> - -a| The unique identifier of a device. The identifier must not change across application sessions but stay fixed for an instance of a (mobile) device. - -On iOS, this value must be equal to the vendor identifier (https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). On Android, this value must be equal to the Firebase Installation ID or a globally unique UUID which is persisted across sessions in your application. - -For GDPR and data protection law reasons this identifier should not carry information that would allow to identify a user. - -type: keyword - - - -example: `00000000-54b3-e7c7-0000-000046bffd97` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-id[device.id] - -| extended - -// =============================================================== - -| -[[field-device-manufacturer]] -<> - -a| The vendor name of the device manufacturer. - -type: keyword - - - -example: `Samsung` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-manufacturer[device.manufacturer] - -| extended - -// =============================================================== - -| -[[field-device-model-identifier]] -<> - -a| The machine readable identifier of the device model. - -type: keyword - - - -example: `SM-G920F` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-model-identifier[device.model.identifier] - -| extended - -// =============================================================== - -| -[[field-device-model-name]] -<> - -a| The human readable marketing name of the device model. - -type: keyword - - - -example: `Samsung Galaxy S6` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-model-name[device.model.name] - -| extended - -// =============================================================== - -| -[[field-device-serial-number]] -<> - -a| beta:[ This field is beta and subject to change. ] - -The unique serial number serves as a distinct identifier for each device, aiding in inventory management and device authentication. - -type: keyword - - - -example: `DJGAQS4CW5` - -| core - -// =============================================================== - -|===== - - -[[ecs-dll]] -=== DLL Fields - -These fields contain information about code libraries dynamically loaded into processes. - - - -Many operating systems refer to "shared code libraries" with different names, but this field set refers to all of the following: - -* Dynamic-link library (`.dll`) commonly used on Windows - -* Shared Object (`.so`) commonly used on Unix-like operating systems - -* Dynamic library (`.dylib`) commonly used on macOS - -[discrete] -==== DLL Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-dll-name]] -<> - -a| Name of the library. - -This generally maps to the name of the file on disk. - -type: keyword - - - -example: `kernel32.dll` - -| core - -// =============================================================== - -| -[[field-dll-origin-referrer-url]] -<> - -a| beta:[ This field is beta and subject to change. ] - -The URL of the webpage that linked to the dll file. - -type: keyword - - - -example: `http://example.com/article1.html` - -| extended - -// =============================================================== - -| -[[field-dll-origin-url]] -<> - -a| beta:[ This field is beta and subject to change. ] - -The URL where the dll file is hosted. - -type: keyword - - - -example: `http://example.com/files/example.dll` - -| extended - -// =============================================================== - -| -[[field-dll-path]] -<> - -a| Full file path of the library. - -type: keyword - - - -example: `C:\Windows\System32\kernel32.dll` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-dll-nestings]] -[discrete] -===== Field sets that can be nested under DLL - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `dll.code_signature.*` -| <> -| These fields contain information about binary code signatures. - -// =============================================================== - - -| `dll.hash.*` -| <> -| Hashes, usually file hashes. - -// =============================================================== - - -| `dll.pe.*` -| <> -| These fields contain Windows Portable Executable (PE) metadata. - -// =============================================================== - - -|===== - - -[[ecs-dns]] -=== DNS Fields - -Fields describing DNS queries and answers. - -DNS events should either represent a single DNS query prior to getting answers (`dns.type:query`) or they should represent a full exchange and contain the query details as well as all of the answers that were provided for this query (`dns.type:answer`). - -[discrete] -==== DNS Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-dns-answers]] -<> - -a| An array containing an object for each answer section returned by the server. - -The main keys that should be present in these objects are defined by ECS. Records that have more information may contain more keys than what ECS defines. - -Not all DNS data sources give all details about DNS answers. At minimum, answer objects must contain the `data` key. If more information is available, map as much of it to ECS as possible, and add any additional fields to the answer objects as custom fields. - -type: object - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-dns-answers-class]] -<> - -a| The class of DNS data contained in this resource record. - -type: keyword - - - -example: `IN` - -| extended - -// =============================================================== - -| -[[field-dns-answers-data]] -<> - -a| The data describing the resource. - -The meaning of this data depends on the type and class of the resource record. - -type: keyword - - - -example: `10.10.10.10` - -| extended - -// =============================================================== - -| -[[field-dns-answers-name]] -<> - -a| The domain name to which this resource record pertains. - -If a chain of CNAME is being resolved, each answer's `name` should be the one that corresponds with the answer's `data`. It should not simply be the original `question.name` repeated. - -type: keyword - - - -example: `www.example.com` - -| extended - -// =============================================================== - -| -[[field-dns-answers-ttl]] -<> - -a| The time interval in seconds that this resource record may be cached before it should be discarded. Zero values mean that the data should not be cached. - -type: long - - - -example: `180` - -| extended - -// =============================================================== - -| -[[field-dns-answers-type]] -<> - -a| The type of data contained in this resource record. - -type: keyword - - - -example: `CNAME` - -| extended - -// =============================================================== - -| -[[field-dns-header-flags]] -<> - -a| Array of 2 letter DNS header flags. - -Expected values for this field: - -* `AA` -* `TC` -* `RD` -* `RA` -* `AD` -* `CD` -* `DO` - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["RD", "RA"]` - -| extended - -// =============================================================== - -| -[[field-dns-id]] -<> - -a| The DNS packet identifier assigned by the program that generated the query. The identifier is copied to the response. - -type: keyword - - - -example: `62111` - -| extended - -// =============================================================== - -| -[[field-dns-op-code]] -<> - -a| The DNS operation code that specifies the kind of query in the message. This value is set by the originator of a query and copied into the response. - -type: keyword - - - -example: `QUERY` - -| extended - -// =============================================================== - -| -[[field-dns-question-class]] -<> - -a| The class of records being queried. - -type: keyword - - - -example: `IN` - -| extended - -// =============================================================== - -| -[[field-dns-question-name]] -<> - -a| The name being queried. - -If the name field contains non-printable characters (below 32 or above 126), those characters should be represented as escaped base 10 integers (\DDD). Back slashes and quotes should be escaped. Tabs, carriage returns, and line feeds should be converted to \t, \r, and \n respectively. - -type: keyword - - - -example: `www.example.com` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/dns/#dns-question-name[dns.question.name] - -| extended - -// =============================================================== - -| -[[field-dns-question-registered-domain]] -<> - -a| The highest registered domain, stripped of the subdomain. - -For example, the registered domain for "foo.example.com" is "example.com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". - -type: keyword - - - -example: `example.com` - -| extended - -// =============================================================== - -| -[[field-dns-question-subdomain]] -<> - -a| The subdomain is all of the labels under the registered_domain. - -If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. - -type: keyword - - - -example: `www` - -| extended - -// =============================================================== - -| -[[field-dns-question-top-level-domain]] -<> - -a| The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". - -type: keyword - - - -example: `co.uk` - -| extended - -// =============================================================== - -| -[[field-dns-question-type]] -<> - -a| The type of record being queried. - -type: keyword - - - -example: `AAAA` - -| extended - -// =============================================================== - -| -[[field-dns-resolved-ip]] -<> - -a| Array containing all IPs seen in `answers.data`. - -The `answers` array can be difficult to use, because of the variety of data formats it can contain. Extracting all IP addresses seen in there to `dns.resolved_ip` makes it possible to index them as IP addresses, and makes them easier to visualize and query for. - -type: ip - - -Note: this field should contain an array of values. - - - -example: `["10.10.10.10", "10.10.10.11"]` - -| extended - -// =============================================================== - -| -[[field-dns-response-code]] -<> - -a| The DNS response code. - -type: keyword - - - -example: `NOERROR` - -| extended - -// =============================================================== - -| -[[field-dns-type]] -<> - -a| The type of DNS event captured, query or answer. - -If your source of DNS events only gives you DNS queries, you should only create dns events of type `dns.type:query`. - -If your source of DNS events gives you answers as well, you should create one event per query (optionally as soon as the query is seen). And a second event containing all query details as well as an array of answers. - -type: keyword - - - -example: `answer` - -| extended - -// =============================================================== - -|===== - - -[[ecs-ecs]] -=== ECS Fields - -Meta-information specific to ECS. - -[discrete] -==== ECS Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-ecs-version]] -<> - -a| ECS version this event conforms to. `ecs.version` is a required field and must exist in all events. - -When querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events. - -type: keyword - - - -example: `1.0.0` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| core - -// =============================================================== - -|===== - - -[[ecs-elf]] -=== ELF Header Fields - -These fields contain Linux Executable Linkable Format (ELF) metadata. - -[discrete] -==== ELF Header Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-elf-architecture]] -<> - -a| Machine architecture of the ELF file. - -type: keyword - - - -example: `x86-64` - -| extended - -// =============================================================== - -| -[[field-elf-byte-order]] -<> - -a| Byte sequence of ELF file. - -type: keyword - - - -example: `Little Endian` - -| extended - -// =============================================================== - -| -[[field-elf-cpu-type]] -<> - -a| CPU type of the ELF file. - -type: keyword - - - -example: `Intel` - -| extended - -// =============================================================== - -| -[[field-elf-creation-date]] -<> - -a| Extracted when possible from the file's metadata. Indicates when it was built or compiled. It can also be faked by malware creators. - -type: date - - - - - -| extended - -// =============================================================== - -| -[[field-elf-exports]] -<> - -a| List of exported element names and types. - -type: flattened - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-elf-go-import-hash]] -<> - -a| A hash of the Go language imports in an ELF file excluding standard library imports. An import hash can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -The algorithm used to calculate the Go symbol hash and a reference implementation are available here: https://github.com/elastic/toutoumomoma - -type: keyword - - - -example: `10bddcb4cee42080f76c88d9ff964491` - -| extended - -// =============================================================== - -| -[[field-elf-go-imports]] -<> - -a| List of imported Go language element names and types. - -type: flattened - - - - - -| extended - -// =============================================================== - -| -[[field-elf-go-imports-names-entropy]] -<> - -a| Shannon entropy calculation from the list of Go imports. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-go-imports-names-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the list of Go imports. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-go-stripped]] -<> - -a| Set to true if the file is a Go executable that has had its symbols stripped or obfuscated and false if an unobfuscated Go executable. - -type: boolean - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-abi-version]] -<> - -a| Version of the ELF Application Binary Interface (ABI). - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-class]] -<> - -a| Header class of the ELF file. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-data]] -<> - -a| Data table of the ELF header. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-entrypoint]] -<> - -a| Header entrypoint of the ELF file. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-object-version]] -<> - -a| "0x1" for original ELF files. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-os-abi]] -<> - -a| Application Binary Interface (ABI) of the Linux OS. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-type]] -<> - -a| Header type of the ELF file. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-header-version]] -<> - -a| Version of the ELF header. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-import-hash]] -<> - -a| A hash of the imports in an ELF file. An import hash can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -This is an ELF implementation of the Windows PE imphash. - -type: keyword - - - -example: `d41d8cd98f00b204e9800998ecf8427e` - -| extended - -// =============================================================== - -| -[[field-elf-imports]] -<> - -a| List of imported element names and types. - -type: flattened - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-elf-imports-names-entropy]] -<> - -a| Shannon entropy calculation from the list of imported element names and types. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-imports-names-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the list of imported element names and types. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections]] -<> - -a| An array containing an object for each section of the ELF file. - -The keys that should be present in these objects are defined by sub-fields underneath `elf.sections.*`. - -type: nested - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-chi2]] -<> - -a| Chi-square probability distribution of the section. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-entropy]] -<> - -a| Shannon entropy calculation from the section. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-flags]] -<> - -a| ELF Section List flags. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-name]] -<> - -a| ELF Section List name. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-physical-offset]] -<> - -a| ELF Section List offset. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-physical-size]] -<> - -a| ELF Section List physical size. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-type]] -<> - -a| ELF Section List type. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the section. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-virtual-address]] -<> - -a| ELF Section List virtual address. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-sections-virtual-size]] -<> - -a| ELF Section List virtual size. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-elf-segments]] -<> - -a| An array containing an object for each segment of the ELF file. - -The keys that should be present in these objects are defined by sub-fields underneath `elf.segments.*`. - -type: nested - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-elf-segments-sections]] -<> - -a| ELF object segment sections. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-segments-type]] -<> - -a| ELF object segment type. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-elf-shared-libraries]] -<> - -a| List of shared libraries used by this ELF object. - -type: keyword - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-elf-telfhash]] -<> - -a| telfhash symbol hash for ELF file. - -type: keyword - - - - - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `elf` fields are expected to be nested at: - - -* `file.elf` - -* `process.elf` - - -Note also that the `elf` fields are not expected to be used directly at the root of the events. -[[ecs-email]] -=== Email Fields - -Event details relating to an email transaction. - -This field set focuses on the email message header, body, and attachments. Network protocols that send and receive email messages such as SMTP are outside the scope of the `email.*` fields. - -[discrete] -==== Email Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-email-attachments]] -<> - -a| A list of objects describing the attachment files sent along with an email message. - -type: nested - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-email-attachments-file-extension]] -<> - -a| Attachment file extension, excluding the leading dot. - -type: keyword - - - -example: `txt` - -| extended - -// =============================================================== - -| -[[field-email-attachments-file-mime-type]] -<> - -a| The MIME media type of the attachment. - -This value will typically be extracted from the `Content-Type` MIME header field. - -type: keyword - - - -example: `text/plain` - -| extended - -// =============================================================== - -| -[[field-email-attachments-file-name]] -<> - -a| Name of the attachment file including the file extension. - -type: keyword - - - -example: `attachment.txt` - -| extended - -// =============================================================== - -| -[[field-email-attachments-file-size]] -<> - -a| Attachment file size in bytes. - -type: long - - - -example: `64329` - -| extended - -// =============================================================== - -| -[[field-email-bcc-address]] -<> - -a| The email address of BCC recipient - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `bcc.user1@example.com` - -| extended - -// =============================================================== - -| -[[field-email-cc-address]] -<> - -a| The email address of CC recipient - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `cc.user1@example.com` - -| extended - -// =============================================================== - -| -[[field-email-content-type]] -<> - -a| Information about how the message is to be displayed. - -Typically a MIME type. - -type: keyword - - - -example: `text/plain` - -| extended - -// =============================================================== - -| -[[field-email-delivery-timestamp]] -<> - -a| The date and time when the email message was received by the service or client. - -type: date - - - -example: `2020-11-10T22:12:34.8196921Z` - -| extended - -// =============================================================== - -| -[[field-email-direction]] -<> - -a| The direction of the message based on the sending and receiving domains. - -type: keyword - - - -example: `inbound` - -| extended - -// =============================================================== - -| -[[field-email-from-address]] -<> - -a| The email address of the sender, typically from the RFC 5322 `From:` header field. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `sender@example.com` - -| extended - -// =============================================================== - -| -[[field-email-local-id]] -<> - -a| Unique identifier given to the email by the source that created the event. - -Identifier is not persistent across hops. - -type: keyword - - - -example: `c26dbea0-80d5-463b-b93c-4e8b708219ce` - -| extended - -// =============================================================== - -| -[[field-email-message-id]] -<> - -a| Identifier from the RFC 5322 `Message-ID:` email header that refers to a particular email message. - -type: wildcard - - - -example: `81ce15$8r2j59@mail01.example.com` - -| extended - -// =============================================================== - -| -[[field-email-origination-timestamp]] -<> - -a| The date and time the email message was composed. Many email clients will fill in this value automatically when the message is sent by a user. - -type: date - - - -example: `2020-11-10T22:12:34.8196921Z` - -| extended - -// =============================================================== - -| -[[field-email-reply-to-address]] -<> - -a| The address that replies should be delivered to based on the value in the RFC 5322 `Reply-To:` header. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `reply.here@example.com` - -| extended - -// =============================================================== - -| -[[field-email-sender-address]] -<> - -a| Per RFC 5322, specifies the address responsible for the actual transmission of the message. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-email-subject]] -<> - -a| A brief summary of the topic of the message. - -type: keyword - -Multi-fields: - -* email.subject.text (type: match_only_text) - - - - - -example: `Please see this important message.` - -| extended - -// =============================================================== - -| -[[field-email-to-address]] -<> - -a| The email address of recipient - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `user1@example.com` - -| extended - -// =============================================================== - -| -[[field-email-x-mailer]] -<> - -a| The name of the application that was used to draft and send the original email message. - -type: keyword - - - -example: `Spambot v2.5` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-email-nestings]] -[discrete] -===== Field sets that can be nested under Email - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `email.attachments.file.hash.*` -| <> -| Hashes, usually file hashes. - -// =============================================================== - - -|===== - - -[[ecs-error]] -=== Error Fields - -These fields can represent errors of any kind. - -Use them for errors that happen while fetching events or in cases where the event itself contains an error. - -[discrete] -==== Error Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-error-code]] -<> - -a| Error code describing the error. - -type: keyword - - - - - -| core - -// =============================================================== - -| -[[field-error-id]] -<> - -a| Unique identifier for the error. - -type: keyword - - - - - -| core - -// =============================================================== - -| -[[field-error-message]] -<> - -a| Error message. - -type: match_only_text - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/exception/#exception-message[exception.message] - -| core - -// =============================================================== - -| -[[field-error-stack-trace]] -<> - -a| The stack trace of this error in plain text. - -type: wildcard - -Multi-fields: - -* error.stack_trace.text (type: match_only_text) - - - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/exception/#exception-stacktrace[exception.stacktrace] - -| extended - -// =============================================================== - -| -[[field-error-type]] -<> - -a| The type of the error, for example the class name of the exception. - -type: keyword - - - -example: `java.lang.NullPointerException` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/error/#error-type[error.type] - -| extended - -// =============================================================== - -|===== - - -[[ecs-event]] -=== Event Fields - -The event fields are used for context information about the log or metric event itself. - -A log is defined as an event containing details of something that happened. Log events must include the time at which the thing happened. Examples of log events include a process starting on a host, a network packet being sent from a source to a destination, or a network connection between a client and a server being initiated or closed. A metric is defined as an event containing one or more numerical measurements and the time at which the measurement was taken. Examples of metric events include memory pressure measured on a host and device temperature. See the `event.kind` definition in this section for additional details about metric and state events. - -[discrete] -==== Event Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-event-action]] -<> - -a| The action captured by the event. - -This describes the information in the event. It is more specific than `event.category`. Examples are `group-add`, `process-started`, `file-created`. The value is normally defined by the implementer. - -type: keyword - - - -example: `user-password-change` - -| core - -// =============================================================== - -| -[[field-event-agent-id-status]] -<> - -a| Agents are normally responsible for populating the `agent.id` field value. If the system receiving events is capable of validating the value based on authentication information for the client then this field can be used to reflect the outcome of that validation. - -For example if the agent's connection is authenticated with mTLS and the client cert contains the ID of the agent to which the cert was issued then the `agent.id` value in events can be checked against the certificate. If the values match then `event.agent_id_status: verified` is added to the event, otherwise one of the other allowed values should be used. - -If no validation is performed then the field should be omitted. - -The allowed values are: - -`verified` - The `agent.id` field value matches expected value obtained from auth metadata. - -`mismatch` - The `agent.id` field value does not match the expected value obtained from auth metadata. - -`missing` - There was no `agent.id` field in the event to validate. - -`auth_metadata_missing` - There was no auth metadata or it was missing information about the agent ID. - -type: keyword - - - -example: `verified` - -| extended - -// =============================================================== - -| -[[field-event-category]] -<> - -a| This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. - -`event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. - -This field is an array. This will allow proper categorization of some events that fall in multiple categories. - -type: keyword - - -Note: this field should contain an array of values. - - - - -*Important*: The field value must be one of the following: - -api, authentication, configuration, database, driver, email, file, host, iam, intrusion_detection, library, malware, network, package, process, registry, session, threat, vulnerability, web - -To learn more about when to use which value, visit the page -<> - - -| core - -// =============================================================== - -| -[[field-event-code]] -<> - -a| Identification code for this event, if one exists. - -Some event sources use event codes to identify messages unambiguously, regardless of message language or wording adjustments over time. An example of this is the Windows Event ID. - -type: keyword - - - -example: `4648` - -| extended - -// =============================================================== - -| -[[field-event-created]] -<> - -a| `event.created` contains the date/time when the event was first read by an agent, or by your pipeline. - -This field is distinct from `@timestamp` in that `@timestamp` typically contain the time extracted from the original event. - -In most situations, these two timestamps will be slightly different. The difference can be used to calculate the delay between your source generating an event, and the time when your agent first processed it. This can be used to monitor your agent's or pipeline's ability to keep up with your event source. - -In case the two timestamps are identical, `@timestamp` should be used. - -type: date - - - -example: `2016-05-23T08:05:34.857Z` - -| core - -// =============================================================== - -| -[[field-event-dataset]] -<> - -a| Name of the dataset. - -If an event source publishes more than one type of log or events (e.g. access log, error log), the dataset is used to specify which one the event comes from. - -It's recommended but not required to start the dataset name with the module name, followed by a dot, then the dataset name. - -type: keyword - - - -example: `apache.access` - -| core - -// =============================================================== - -| -[[field-event-duration]] -<> - -a| Duration of the event in nanoseconds. - -If `event.start` and `event.end` are known this value should be the difference between the end and start time. - -type: long - - - - - -| core - -// =============================================================== - -| -[[field-event-end]] -<> - -a| `event.end` contains the date when the event ended or when the activity was last observed. - -type: date - - - - - -| extended - -// =============================================================== - -| -[[field-event-hash]] -<> - -a| Hash (perhaps logstash fingerprint) of raw field to be able to demonstrate log integrity. - -type: keyword - - - -example: `123456789012345678901234567890ABCD` - -| extended - -// =============================================================== - -| -[[field-event-id]] -<> - -a| Unique ID to describe the event. - -type: keyword - - - -example: `8a4f500d` - -| core - -// =============================================================== - -| -[[field-event-ingested]] -<> - -a| Timestamp when an event arrived in the central data store. - -This is different from `@timestamp`, which is when the event originally occurred. It's also different from `event.created`, which is meant to capture the first time an agent saw the event. - -In normal conditions, assuming no tampering, the timestamps should chronologically look like this: `@timestamp` < `event.created` < `event.ingested`. - -type: date - - - -example: `2016-05-23T08:05:35.101Z` - -| core - -// =============================================================== - -| -[[field-event-kind]] -<> - -a| This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. - -`event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. - -The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data is coming in at a regular interval or not. - -type: keyword - - - - -*Important*: The field value must be one of the following: - -alert, asset, enrichment, event, metric, state, pipeline_error, signal - -To learn more about when to use which value, visit the page -<> - - -| core - -// =============================================================== - -| -[[field-event-module]] -<> - -a| Name of the module this data is coming from. - -If your monitoring agent supports the concept of modules or plugins to process events of a given source (e.g. Apache logs), `event.module` should contain the name of this module. - -type: keyword - - - -example: `apache` - -| core - -// =============================================================== - -| -[[field-event-original]] -<> - -a| Raw text message of entire event. Used to demonstrate log integrity or where the full log message (before splitting it up in multiple parts) may be required, e.g. for reindex. - -This field is not indexed and doc_values are disabled. It cannot be searched, but it can be retrieved from `_source`. If users wish to override this and index this field, please see `Field data types` in the `Elasticsearch Reference`. - -type: keyword - - - -example: `Sep 19 08:26:10 host CEF:0|Security| threatmanager|1.0|100| worm successfully stopped|10|src=10.0.0.1 dst=2.1.2.2spt=1232` - -| core - -// =============================================================== - -| -[[field-event-outcome]] -<> - -a| This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. - -`event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. - -Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. - -Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. - -Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. - -type: keyword - - - - -*Important*: The field value must be one of the following: - -failure, success, unknown - -To learn more about when to use which value, visit the page -<> - - -| core - -// =============================================================== - -| -[[field-event-provider]] -<> - -a| Source of the event. - -Event transports such as Syslog or the Windows Event Log typically mention the source of an event. It can be the name of the software that generated the event (e.g. Sysmon, httpd), or of a subsystem of the operating system (kernel, Microsoft-Windows-Security-Auditing). - -type: keyword - - - -example: `kernel` - -| extended - -// =============================================================== - -| -[[field-event-reason]] -<> - -a| Reason why this event happened, according to the source. - -This describes the why of a particular action or outcome captured in the event. Where `event.action` captures the action from the event, `event.reason` describes why that action was taken. For example, a web proxy with an `event.action` which denied the request may also populate `event.reason` with the reason why (e.g. `blocked site`). - -type: keyword - - - -example: `Terminated an unexpected process` - -| extended - -// =============================================================== - -| -[[field-event-reference]] -<> - -a| Reference URL linking to additional information about this event. - -This URL links to a static definition of this event. Alert events, indicated by `event.kind:alert`, are a common use case for this field. - -type: keyword - - - -example: `https://system.example.com/event/#0001234` - -| extended - -// =============================================================== - -| -[[field-event-risk-score]] -<> - -a| Risk score or priority of the event (e.g. security solutions). Use your system's original value here. - -type: float - - - - - -| core - -// =============================================================== - -| -[[field-event-risk-score-norm]] -<> - -a| Normalized risk score or priority of the event, on a scale of 0 to 100. - -This is mainly useful if you use more than one system that assigns risk scores, and you want to see a normalized value across all systems. - -type: float - - - - - -| extended - -// =============================================================== - -| -[[field-event-sequence]] -<> - -a| Sequence number of the event. - -The sequence number is a value published by some event sources, to make the exact ordering of events unambiguous, regardless of the timestamp precision. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-event-severity]] -<> - -a| The numeric severity of the event according to your event source. - -What the different severity values mean can be different between sources and use cases. It's up to the implementer to make sure severities are consistent across events from the same source. - -The Syslog severity belongs in `log.syslog.severity.code`. `event.severity` is meant to represent the severity according to the event source (e.g. firewall, IDS). If the event source does not publish its own severity, you may optionally copy the `log.syslog.severity.code` to `event.severity`. - -type: long - - - -example: `7` - -| core - -// =============================================================== - -| -[[field-event-start]] -<> - -a| `event.start` contains the date when the event started or when the activity was first observed. - -type: date - - - - - -| extended - -// =============================================================== - -| -[[field-event-timezone]] -<> - -a| This field should be populated when the event's timestamp does not include timezone information already (e.g. default Syslog timestamps). It's optional otherwise. - -Acceptable timezone formats are: a canonical ID (e.g. "Europe/Amsterdam"), abbreviated (e.g. "EST") or an HH:mm differential (e.g. "-05:00"). - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-event-type]] -<> - -a| This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. - -`event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. - -This field is an array. This will allow proper categorization of some events that fall in multiple event types. - -type: keyword - - -Note: this field should contain an array of values. - - - - -*Important*: The field value must be one of the following: - -access, admin, allowed, change, connection, creation, deletion, denied, end, error, group, indicator, info, installation, protocol, start, user - -To learn more about when to use which value, visit the page -<> - - -| core - -// =============================================================== - -| -[[field-event-url]] -<> - -a| URL linking to an external system to continue investigation of this event. - -This URL links to another system where in-depth investigation of the specific occurrence of this event can take place. Alert events, indicated by `event.kind:alert`, are a common use case for this field. - -type: keyword - - - -example: `https://mysystem.example.com/alert/5271dedb-f5b0-4218-87f0-4ac4870a38fe` - -| extended - -// =============================================================== - -|===== - - -[[ecs-faas]] -=== FaaS Fields - -The user fields describe information about the function as a service (FaaS) that is relevant to the event. - -[discrete] -==== FaaS Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-faas-coldstart]] -<> - -a| Boolean value indicating a cold start of a function. - -type: boolean - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-coldstart[faas.coldstart] - -| extended - -// =============================================================== - -| -[[field-faas-execution]] -<> - -a| The execution ID of the current function execution. - -type: keyword - - - -example: `af9d5aa4-a685-4c5f-a22b-444f80b3cc28` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-invocation-id[faas.invocation_id] - -| extended - -// =============================================================== - -| -[[field-faas-id]] -<> - -a| The unique identifier of a serverless function. - -For AWS Lambda it's the function ARN (Amazon Resource Name) without a version or alias suffix. - -type: keyword - - - -example: `arn:aws:lambda:us-west-2:123456789012:function:my-function` - -| extended - -// =============================================================== - -| -[[field-faas-name]] -<> - -a| The name of a serverless function. - -type: keyword - - - -example: `my-function` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-name[faas.name] - -| extended - -// =============================================================== - -| -[[field-faas-trigger-request-id]] -<> - -a| The ID of the trigger request , message, event, etc. - -type: keyword - - - -example: `123456789` - -| extended - -// =============================================================== - -| -[[field-faas-trigger-type]] -<> - -a| The trigger for the function execution. - -Expected values for this field: - -* `http` -* `pubsub` -* `datasource` -* `timer` -* `other` - -type: keyword - - - -example: `http` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-trigger[faas.trigger] - -| extended - -// =============================================================== - -| -[[field-faas-version]] -<> - -a| The version of a serverless function. - -type: keyword - - - -example: `123` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-version[faas.version] - -| extended - -// =============================================================== - -|===== - - -[[ecs-file]] -=== File Fields - -A file is defined as a set of information that has been created on, or has existed on a filesystem. - -File objects can be associated with host events, network events, and/or file events (e.g., those produced by File Integrity Monitoring [FIM] products or services). File fields provide details about the affected file associated with the event or metric. - -[discrete] -==== File Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-file-accessed]] -<> - -a| Last time the file was accessed. - -Note that not all filesystems keep track of access time. - -type: date - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-accessed[file.accessed] - -| extended - -// =============================================================== - -| -[[field-file-attributes]] -<> - -a| Array of file attributes. - -Attributes names will vary by platform. Here's a non-exhaustive list of values that are expected in this field: archive, compressed, directory, encrypted, execute, hidden, read, readonly, system, write. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["readonly", "system"]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-attributes[file.attributes] - -| extended - -// =============================================================== - -| -[[field-file-created]] -<> - -a| File creation time. - -Note that not all filesystems store the creation time. - -type: date - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-created[file.created] - -| extended - -// =============================================================== - -| -[[field-file-ctime]] -<> - -a| Last time the file attributes or metadata changed. - -Note that changes to the file content will update `mtime`. This implies `ctime` will be adjusted at the same time, since `mtime` is an attribute of the file. - -type: date - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-changed[file.changed] - -| extended - -// =============================================================== - -| -[[field-file-device]] -<> - -a| Device that is the source of the file. - -type: keyword - - - -example: `sda` - -| extended - -// =============================================================== - -| -[[field-file-directory]] -<> - -a| Directory where the file is located. It should include the drive letter, when appropriate. - -type: keyword - - - -example: `/home/alice` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-directory[file.directory] - -| extended - -// =============================================================== - -| -[[field-file-drive-letter]] -<> - -a| Drive letter where the file is located. This field is only relevant on Windows. - -The value should be uppercase, and not include the colon. - -type: keyword - - - -example: `C` - -| extended - -// =============================================================== - -| -[[field-file-extension]] -<> - -a| File extension, excluding the leading dot. - -Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). - -type: keyword - - - -example: `png` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-extension[file.extension] - -| extended - -// =============================================================== - -| -[[field-file-fork-name]] -<> - -a| A fork is additional data associated with a filesystem object. - -On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist. - -On NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: `C:\path\to\filename.extension:some_fork_name`, and `some_fork_name` is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name. - -type: keyword - - - -example: `Zone.Identifer` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-fork-name[file.fork_name] - -| extended - -// =============================================================== - -| -[[field-file-gid]] -<> - -a| Primary group ID (GID) of the file. - -type: keyword - - - -example: `1001` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-group-id[file.group.id] - -| extended - -// =============================================================== - -| -[[field-file-group]] -<> - -a| Primary group name of the file. - -type: keyword - - - -example: `alice` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-group-name[file.group.name] - -| extended - -// =============================================================== - -| -[[field-file-inode]] -<> - -a| Inode representing the file in the filesystem. - -type: keyword - - - -example: `256383` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-inode[file.inode] - -| extended - -// =============================================================== - -| -[[field-file-mime-type]] -<> - -a| MIME type should identify the format of the file or stream of bytes using https://www.iana.org/assignments/media-types/media-types.xhtml[IANA official types], where possible. When more than one type is applicable, the most specific type should be used. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-file-mode]] -<> - -a| Mode of the file in octal representation. - -type: keyword - - - -example: `0640` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-mode[file.mode] - -| extended - -// =============================================================== - -| -[[field-file-mtime]] -<> - -a| Last time the file content was modified. - -type: date - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-modified[file.modified] - -| extended - -// =============================================================== - -| -[[field-file-name]] -<> - -a| Name of the file including the extension, without the directory. - -type: keyword - - - -example: `example.png` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-name[file.name] - -| extended - -// =============================================================== - -| -[[field-file-origin-referrer-url]] -<> - -a| beta:[ This field is beta and subject to change. ] - -The URL of the webpage that linked to the file. - -type: keyword - - - -example: `http://example.com/article1.html` - -| extended - -// =============================================================== - -| -[[field-file-origin-url]] -<> - -a| beta:[ This field is beta and subject to change. ] - -The URL where the file is hosted. - -type: keyword - - - -example: `http://example.com/imgs/article1_img1.jpg` - -| extended - -// =============================================================== - -| -[[field-file-owner]] -<> - -a| File owner's username. - -type: keyword - - - -example: `alice` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-owner-name[file.owner.name] - -| extended - -// =============================================================== - -| -[[field-file-path]] -<> - -a| Full path to the file, including the file name. It should include the drive letter, when appropriate. - -type: keyword - -Multi-fields: - -* file.path.text (type: match_only_text) - - - - - -example: `/home/alice/example.png` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-path[file.path] - -| extended - -// =============================================================== - -| -[[field-file-size]] -<> - -a| File size in bytes. - -Only relevant when `file.type` is "file". - -type: long - - - -example: `16384` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-size[file.size] - -| extended - -// =============================================================== - -| -[[field-file-target-path]] -<> - -a| Target path for symlinks. - -type: keyword - -Multi-fields: - -* file.target_path.text (type: match_only_text) - - - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-symbolic-link-target-path[file.symbolic_link.target_path] - -| extended - -// =============================================================== - -| -[[field-file-type]] -<> - -a| File type (file, dir, or symlink). - -type: keyword - - - -example: `file` - -| extended - -// =============================================================== - -| -[[field-file-uid]] -<> - -a| The user ID (UID) or security identifier (SID) of the file owner. - -type: keyword - - - -example: `1001` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-owner-id[file.owner.id] - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `file` fields are expected to be nested at: - - -* `threat.enrichments.indicator.file` - -* `threat.indicator.file` - - -Note also that the `file` fields may be used directly at the root of the events. - -[[ecs-file-nestings]] -[discrete] -===== Field sets that can be nested under File - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `file.code_signature.*` -| <> -| These fields contain information about binary code signatures. - -// =============================================================== - - -| `file.elf.*` -| <> -| These fields contain Linux Executable Linkable Format (ELF) metadata. - -// =============================================================== - - -| `file.hash.*` -| <> -| Hashes, usually file hashes. - -// =============================================================== - - -| `file.macho.*` -| <>| beta:[ This field reuse is beta and subject to change.] - -These fields contain Mac OS Mach Object file format (Mach-O) metadata. - -// =============================================================== - - -| `file.pe.*` -| <> -| These fields contain Windows Portable Executable (PE) metadata. - -// =============================================================== - - -| `file.x509.*` -| <> -| These fields contain x509 certificate metadata. - -// =============================================================== - - -|===== - - -[[ecs-geo]] -=== Geo Fields - -Geo fields can carry data about a specific location related to an event. - -This geolocation information can be derived from techniques such as Geo IP, or be user-supplied. - -[discrete] -==== Geo Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-geo-city-name]] -<> - -a| City name. - -type: keyword - - - -example: `Montreal` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-locality-name[geo.locality.name] - -| core - -// =============================================================== - -| -[[field-geo-continent-code]] -<> - -a| Two-letter code representing continent's name. - -type: keyword - - - -example: `NA` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-continent-code[geo.continent.code] - -| core - -// =============================================================== - -| -[[field-geo-continent-name]] -<> - -a| Name of the continent. - -type: keyword - - - -example: `North America` - -| core - -// =============================================================== - -| -[[field-geo-country-iso-code]] -<> - -a| Country ISO code. - -type: keyword - - - -example: `CA` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-country-iso-code[geo.country.iso_code] - -| core - -// =============================================================== - -| -[[field-geo-country-name]] -<> - -a| Country name. - -type: keyword - - - -example: `Canada` - -| core - -// =============================================================== - -| -[[field-geo-location]] -<> - -a| Longitude and latitude. - -type: geo_point - - - -example: `{ "lon": -73.614830, "lat": 45.505918 }` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-location-lat[geo.location.lat] - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-location-lon[geo.location.lon] - -| core - -// =============================================================== - -| -[[field-geo-name]] -<> - -a| User-defined description of a location, at the level of granularity they care about. - -Could be the name of their data centers, the floor number, if this describes a local physical entity, city names. - -Not typically used in automated geolocation. - -type: keyword - - - -example: `boston-dc` - -| extended - -// =============================================================== - -| -[[field-geo-postal-code]] -<> - -a| Postal code associated with the location. - -Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country. - -type: keyword - - - -example: `94040` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-postal-code[geo.postal_code] - -| core - -// =============================================================== - -| -[[field-geo-region-iso-code]] -<> - -a| Region ISO code. - -type: keyword - - - -example: `CA-QC` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-region-iso-code[geo.region.iso_code] - -| core - -// =============================================================== - -| -[[field-geo-region-name]] -<> - -a| Region name. - -type: keyword - - - -example: `Quebec` - -| core - -// =============================================================== - -| -[[field-geo-timezone]] -<> - -a| The time zone of the location, such as IANA time zone name. - -type: keyword - - - -example: `America/Argentina/Buenos_Aires` - -| core - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `geo` fields are expected to be nested at: - - -* `client.geo` - -* `destination.geo` - -* `host.geo` - -* `observer.geo` - -* `server.geo` - -* `source.geo` - -* `threat.enrichments.indicator.geo` - -* `threat.indicator.geo` - - -Note also that the `geo` fields are not expected to be used directly at the root of the events. -[[ecs-group]] -=== Group Fields - -The group fields are meant to represent groups that are relevant to the event. - -[discrete] -==== Group Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-group-domain]] -<> - -a| Name of the directory the group is a member of. - -For example, an LDAP or Active Directory domain name. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-group-id]] -<> - -a| Unique identifier for the group on the system/platform. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-group-name]] -<> - -a| Name of the group. - -type: keyword - - - - - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `group` fields are expected to be nested at: - - -* `process.attested_groups` - -* `process.group` - -* `process.real_group` - -* `process.saved_group` - -* `process.supplemental_groups` - -* `user.group` - - -Note also that the `group` fields may be used directly at the root of the events. - - -[[ecs-hash]] -=== Hash Fields - -The hash fields represent different bitwise hash algorithms and their values. - -Field names for common hashes (e.g. MD5, SHA1) are predefined. Add fields for other hashes by lowercasing the hash algorithm name and using underscore separators as appropriate (snake case, e.g. sha3_512). - -Note that this fieldset is used for common hashes that may be computed over a range of generic bytes. Entity-specific hashes such as ja3 or imphash are placed in the fieldsets to which they relate (tls and pe, respectively). - -[discrete] -==== Hash Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-hash-cdhash]] -<> - -a| beta:[ This field is beta and subject to change. ] - -Code directory hash, utilized to uniquely identify and authenticate the integrity of the executable code. - -type: keyword - - - -example: `3783b4052fd474dbe30676b45c329e7a6d44acd9` - -| extended - -// =============================================================== - -| -[[field-hash-md5]] -<> - -a| MD5 hash. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-hash-sha1]] -<> - -a| SHA1 hash. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-hash-sha256]] -<> - -a| SHA256 hash. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-hash-sha384]] -<> - -a| SHA384 hash. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-hash-sha512]] -<> - -a| SHA512 hash. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-hash-ssdeep]] -<> - -a| SSDEEP hash. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-hash-tlsh]] -<> - -a| TLSH hash. - -type: keyword - - - - - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `hash` fields are expected to be nested at: - - -* `dll.hash` - -* `email.attachments.file.hash` - -* `file.hash` - -* `process.hash` - - -Note also that the `hash` fields are not expected to be used directly at the root of the events. -[[ecs-host]] -=== Host Fields - -A host is defined as a general computing instance. - -ECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes. - -[discrete] -==== Host Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-host-architecture]] -<> - -a| Operating system architecture. - -type: keyword - - - -example: `x86_64` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-arch[host.arch] - -| core - -// =============================================================== - -| -[[field-host-boot-id]] -<> - -a| Linux boot uuid taken from /proc/sys/kernel/random/boot_id. Note the boot_id value from /proc may or may not be the same in containers as on the host. Some container runtimes will bind mount a new boot_id value onto the proc file in each container. - -type: keyword - - - -example: `88a1f0ed-5ae5-41ee-af6b-41921c311872` - -| extended - -// =============================================================== - -| -[[field-host-cpu-usage]] -<> - -a| Percent CPU used which is normalized by the number of CPU cores and it ranges from 0 to 1. - -Scaling factor: 1000. - -For example: For a two core host, this value should be the average of the two cores, between 0 and 1. - -type: scaled_float - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.cpu.utilization+--%3E%22&type=code[system.cpu.utilization] - -| extended - -// =============================================================== - -| -[[field-host-disk-read-bytes]] -<> - -a| The total number of bytes (gauge) read successfully (aggregated from all disks) since the last metric collection. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.disk.io+--%3E%22&type=code[system.disk.io] - -| extended - -// =============================================================== - -| -[[field-host-disk-write-bytes]] -<> - -a| The total number of bytes (gauge) written successfully (aggregated from all disks) since the last metric collection. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.disk.io+--%3E%22&type=code[system.disk.io] - -| extended - -// =============================================================== - -| -[[field-host-domain]] -<> - -a| Name of the domain of which the host is a member. - -For example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider. - -type: keyword - - - -example: `CONTOSO` - -| extended - -// =============================================================== - -| -[[field-host-hostname]] -<> - -a| Hostname of the host. - -It normally contains what the `hostname` command returns on the host machine. - -type: keyword - - - - - -| core - -// =============================================================== - -| -[[field-host-id]] -<> - -a| Unique host id. - -As hostname is not always unique, use values that are meaningful in your environment. - -Example: The current usage of `beat.name`. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-id[host.id] - -| core - -// =============================================================== - -| -[[field-host-ip]] -<> - -a| Host ip addresses. - -type: ip - - -Note: this field should contain an array of values. - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-ip[host.ip] - -| core - -// =============================================================== - -| -[[field-host-mac]] -<> - -a| Host MAC addresses. - -The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["00-00-5E-00-53-23", "00-00-5E-00-53-24"]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-mac[host.mac] - -| core - -// =============================================================== - -| -[[field-host-name]] -<> - -a| Name of the host. - -It can contain what hostname returns on Unix systems, the fully qualified domain name (FQDN), or a name specified by the user. The recommended value is the lowercase FQDN of the host. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-name[host.name] - -| core - -// =============================================================== - -| -[[field-host-network-egress-bytes]] -<> - -a| The number of bytes (gauge) sent out on all network interfaces by the host since the last metric collection. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.io+--%3E%22&type=code[system.network.io] - -| extended - -// =============================================================== - -| -[[field-host-network-egress-packets]] -<> - -a| The number of packets (gauge) sent out on all network interfaces by the host since the last metric collection. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.packets+--%3E%22&type=code[system.network.packets] - -| extended - -// =============================================================== - -| -[[field-host-network-ingress-bytes]] -<> - -a| The number of bytes received (gauge) on all network interfaces by the host since the last metric collection. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.io+--%3E%22&type=code[system.network.io] - -| extended - -// =============================================================== - -| -[[field-host-network-ingress-packets]] -<> - -a| The number of packets (gauge) received on all network interfaces by the host since the last metric collection. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.packets+--%3E%22&type=code[system.network.packets] - -| extended - -// =============================================================== - -| -[[field-host-pid-ns-ino]] -<> - -a| This is the inode number of the namespace in the namespace file system (nsfs). Unsigned int inum in include/linux/ns_common.h. - -type: keyword - - - -example: `256383` - -| extended - -// =============================================================== - -| -[[field-host-type]] -<> - -a| Type of host. - -For Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-type[host.type] - -| core - -// =============================================================== - -| -[[field-host-uptime]] -<> - -a| Seconds the host has been up. - -type: long - - - -example: `1325` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.uptime+--%3E%22&type=code[system.uptime] - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-host-nestings]] -[discrete] -===== Field sets that can be nested under Host - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `host.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `host.os.*` -| <> -| OS fields contain information about the operating system. - -// =============================================================== - - -| `host.risk.*` -| <> -| Fields for describing risk score and level. - -// =============================================================== - - -|===== - - -[[ecs-http]] -=== HTTP Fields - -Fields related to HTTP activity. Use the `url` field set to store the url of the request. - -[discrete] -==== HTTP Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-http-request-body-bytes]] -<> - -a| Size in bytes of the request body. - -type: long - - - -example: `887` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-body-size[http.request.body.size] - -| extended - -// =============================================================== - -| -[[field-http-request-body-content]] -<> - -a| The full HTTP request body. - -type: wildcard - -Multi-fields: - -* http.request.body.content.text (type: match_only_text) - - - - - -example: `Hello world` - -| extended - -// =============================================================== - -| -[[field-http-request-bytes]] -<> - -a| Total size in bytes of the request (body and headers). - -type: long - - - -example: `1437` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-size[http.request.size] - -| extended - -// =============================================================== - -| -[[field-http-request-id]] -<> - -a| A unique identifier for each HTTP request to correlate logs between clients and servers in transactions. - -The id may be contained in a non-standard HTTP header, such as `X-Request-ID` or `X-Correlation-ID`. - -type: keyword - - - -example: `123e4567-e89b-12d3-a456-426614174000` - -| extended - -// =============================================================== - -| -[[field-http-request-method]] -<> - -a| HTTP request method. - -The value should retain its casing from the original event. For example, `GET`, `get`, and `GeT` are all considered valid values for this field. - -type: keyword - - - -example: `POST` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-method-original[http.request.method_original] - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/conflict-910000?style=flat[relation,title=conflict,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-method[http.request.method] - -Note: `http.request.method` in SemConv is the known, normalized, upper case value of the request method, other than the ECS' `http.request.method` that retains casing from the original event. - - -| extended - -// =============================================================== - -| -[[field-http-request-mime-type]] -<> - -a| Mime type of the body of the request. - -This value must only be populated based on the content of the request body, not on the `Content-Type` header. Comparing the mime type of a request with the request's Content-Type header can be helpful in detecting threats or misconfigured clients. - -type: keyword - - - -example: `image/gif` - -| extended - -// =============================================================== - -| -[[field-http-request-referrer]] -<> - -a| Referrer for this HTTP request. - -type: keyword - - - -example: `https://blog.example.com/` - -| extended - -// =============================================================== - -| -[[field-http-response-body-bytes]] -<> - -a| Size in bytes of the response body. - -type: long - - - -example: `887` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-response-body-size[http.response.body.size] - -| extended - -// =============================================================== - -| -[[field-http-response-body-content]] -<> - -a| The full HTTP response body. - -type: wildcard - -Multi-fields: - -* http.response.body.content.text (type: match_only_text) - - - - - -example: `Hello world` - -| extended - -// =============================================================== - -| -[[field-http-response-bytes]] -<> - -a| Total size in bytes of the response (body and headers). - -type: long - - - -example: `1437` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-response-size[http.response.size] - -| extended - -// =============================================================== - -| -[[field-http-response-mime-type]] -<> - -a| Mime type of the body of the response. - -This value must only be populated based on the content of the response body, not on the `Content-Type` header. Comparing the mime type of a response with the response's Content-Type header can be helpful in detecting misconfigured servers. - -type: keyword - - - -example: `image/gif` - -| extended - -// =============================================================== - -| -[[field-http-response-status-code]] -<> - -a| HTTP response status code. - -type: long - - - -example: `404` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-response-status-code[http.response.status_code] - -| extended - -// =============================================================== - -| -[[field-http-version]] -<> - -a| HTTP version. - -type: keyword - - - -example: `1.1` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-protocol-name[network.protocol.name] - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-protocol-version[network.protocol.version] - -Note: In OTel SemConv, `network.protocol.version` specifies the HTTP version if the value of `network.protocol.name` is `http`. - - -| extended - -// =============================================================== - -|===== - - -[[ecs-interface]] -=== Interface Fields - -The interface fields are used to record ingress and egress interface information when reported by an observer (e.g. firewall, router, load balancer) in the context of the observer handling a network connection. In the case of a single observer interface (e.g. network sensor on a span port) only the observer.ingress information should be populated. - -[discrete] -==== Interface Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-interface-alias]] -<> - -a| Interface alias as reported by the system, typically used in firewall implementations for e.g. inside, outside, or dmz logical interface naming. - -type: keyword - - - -example: `outside` - -| extended - -// =============================================================== - -| -[[field-interface-id]] -<> - -a| Interface ID as reported by an observer (typically SNMP interface ID). - -type: keyword - - - -example: `10` - -| extended - -// =============================================================== - -| -[[field-interface-name]] -<> - -a| Interface name as reported by the system. - -type: keyword - - - -example: `eth0` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `interface` fields are expected to be nested at: - - -* `observer.egress.interface` - -* `observer.ingress.interface` - - -Note also that the `interface` fields are not expected to be used directly at the root of the events. -[[ecs-log]] -=== Log Fields - -Details about the event's logging mechanism or logging transport. - -The log.* fields are typically populated with details about the logging mechanism used to create and/or transport the event. For example, syslog details belong under `log.syslog.*`. - -The details specific to your event source are typically not logged under `log.*`, but rather in `event.*` or in other ECS fields. - -[discrete] -==== Log Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-log-file-path]] -<> - -a| Full path to the log file this event came from, including the file name. It should include the drive letter, when appropriate. - -If the event wasn't read from a log file, do not populate this field. - -type: keyword - - - -example: `/var/log/fun-times.log` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/log/#log-file-path[log.file.path] - -| extended - -// =============================================================== - -| -[[field-log-level]] -<> - -a| Original log level of the log event. - -If the source of the event provides a log level or textual severity, this is the one that goes in `log.level`. If your source doesn't specify one, you may put your event transport's severity here (e.g. Syslog severity). - -Some examples are `warn`, `err`, `i`, `informational`. - -type: keyword - - - -example: `error` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+severity_text+%22&type=code[severity_text] - -| core - -// =============================================================== - -| -[[field-log-logger]] -<> - -a| The name of the logger inside an application. This is usually the name of the class which initialized the logger, or can be a custom name. - -type: keyword - - - -example: `org.elasticsearch.bootstrap.Bootstrap` - -| core - -// =============================================================== - -| -[[field-log-origin-file-line]] -<> - -a| The line number of the file containing the source code which originated the log event. - -type: long - - - -example: `42` - -| extended - -// =============================================================== - -| -[[field-log-origin-file-name]] -<> - -a| The name of the file containing the source code which originated the log event. - -Note that this field is not meant to capture the log file. The correct field to capture the log file is `log.file.path`. - -type: keyword - - - -example: `Bootstrap.java` - -| extended - -// =============================================================== - -| -[[field-log-origin-function]] -<> - -a| The name of the function or method which originated the log event. - -type: keyword - - - -example: `init` - -| extended - -// =============================================================== - -| -[[field-log-syslog]] -<> - -a| The Syslog metadata of the event, if the event was transmitted via Syslog. Please see RFCs 5424 or 3164. - -type: object - - - - - -| extended - -// =============================================================== - -| -[[field-log-syslog-appname]] -<> - -a| The device or application that originated the Syslog message, if available. - -type: keyword - - - -example: `sshd` - -| extended - -// =============================================================== - -| -[[field-log-syslog-facility-code]] -<> - -a| The Syslog numeric facility of the log event, if available. - -According to RFCs 5424 and 3164, this value should be an integer between 0 and 23. - -type: long - - - -example: `23` - -| extended - -// =============================================================== - -| -[[field-log-syslog-facility-name]] -<> - -a| The Syslog text-based facility of the log event, if available. - -type: keyword - - - -example: `local7` - -| extended - -// =============================================================== - -| -[[field-log-syslog-hostname]] -<> - -a| The hostname, FQDN, or IP of the machine that originally sent the Syslog message. This is sourced from the hostname field of the syslog header. Depending on the environment, this value may be different from the host that handled the event, especially if the host handling the events is acting as a collector. - -type: keyword - - - -example: `example-host` - -| extended - -// =============================================================== - -| -[[field-log-syslog-msgid]] -<> - -a| An identifier for the type of Syslog message, if available. Only applicable for RFC 5424 messages. - -type: keyword - - - -example: `ID47` - -| extended - -// =============================================================== - -| -[[field-log-syslog-priority]] -<> - -a| Syslog numeric priority of the event, if available. - -According to RFCs 5424 and 3164, the priority is 8 * facility + severity. This number is therefore expected to contain a value between 0 and 191. - -type: long - - - -example: `135` - -| extended - -// =============================================================== - -| -[[field-log-syslog-procid]] -<> - -a| The process name or ID that originated the Syslog message, if available. - -type: keyword - - - -example: `12345` - -| extended - -// =============================================================== - -| -[[field-log-syslog-severity-code]] -<> - -a| The Syslog numeric severity of the log event, if available. - -If the event source publishing via Syslog provides a different numeric severity value (e.g. firewall, IDS), your source's numeric severity should go to `event.severity`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `event.severity`. - -type: long - - - -example: `3` - -| extended - -// =============================================================== - -| -[[field-log-syslog-severity-name]] -<> - -a| The Syslog numeric severity of the log event, if available. - -If the event source publishing via Syslog provides a different severity value (e.g. firewall, IDS), your source's text severity should go to `log.level`. If the event source does not specify a distinct severity, you can optionally copy the Syslog severity to `log.level`. - -type: keyword - - - -example: `Error` - -| extended - -// =============================================================== - -| -[[field-log-syslog-structured-data]] -<> - -a| Structured data expressed in RFC 5424 messages, if available. These are key-value pairs formed from the structured data portion of the syslog message, as defined in RFC 5424 Section 6.3. - -type: flattened - - - - - -| extended - -// =============================================================== - -| -[[field-log-syslog-version]] -<> - -a| The version of the Syslog protocol specification. Only applicable for RFC 5424 messages. - -type: keyword - - - -example: `1` - -| extended - -// =============================================================== - -|===== - - -[[ecs-macho]] -=== Mach-O Header Fields - -These fields contain Mac OS Mach Object file format (Mach-O) metadata. - -beta::[ These fields are in beta and are subject to change.] - -[discrete] -==== Mach-O Header Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-macho-go-import-hash]] -<> - -a| A hash of the Go language imports in a Mach-O file excluding standard library imports. An import hash can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -The algorithm used to calculate the Go symbol hash and a reference implementation are available here: https://github.com/elastic/toutoumomoma - -type: keyword - - - -example: `10bddcb4cee42080f76c88d9ff964491` - -| extended - -// =============================================================== - -| -[[field-macho-go-imports]] -<> - -a| List of imported Go language element names and types. - -type: flattened - - - - - -| extended - -// =============================================================== - -| -[[field-macho-go-imports-names-entropy]] -<> - -a| Shannon entropy calculation from the list of Go imports. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-go-imports-names-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the list of Go imports. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-go-stripped]] -<> - -a| Set to true if the file is a Go executable that has had its symbols stripped or obfuscated and false if an unobfuscated Go executable. - -type: boolean - - - - - -| extended - -// =============================================================== - -| -[[field-macho-import-hash]] -<> - -a| A hash of the imports in a Mach-O file. An import hash can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -This is a synonym for symhash. - -type: keyword - - - -example: `d41d8cd98f00b204e9800998ecf8427e` - -| extended - -// =============================================================== - -| -[[field-macho-imports]] -<> - -a| List of imported element names and types. - -type: flattened - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-macho-imports-names-entropy]] -<> - -a| Shannon entropy calculation from the list of imported element names and types. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-imports-names-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the list of imported element names and types. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-sections]] -<> - -a| An array containing an object for each section of the Mach-O file. - -The keys that should be present in these objects are defined by sub-fields underneath `macho.sections.*`. - -type: nested - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-macho-sections-entropy]] -<> - -a| Shannon entropy calculation from the section. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-sections-name]] -<> - -a| Mach-O Section List name. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-macho-sections-physical-size]] -<> - -a| Mach-O Section List physical size. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-sections-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the section. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-sections-virtual-size]] -<> - -a| Mach-O Section List virtual size. This is always the same as `physical_size`. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-macho-symhash]] -<> - -a| A hash of the imports in a Mach-O file. An import hash can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -This is a Mach-O implementation of the Windows PE imphash - -type: keyword - - - -example: `d3ccf195b62a9279c3c19af1080497ec` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `macho` fields are expected to be nested at: - - -* `file.macho` - -* `process.macho` - - -Note also that the `macho` fields are not expected to be used directly at the root of the events. -[[ecs-network]] -=== Network Fields - -The network is defined as the communication path over which a host or network event happens. - -The network.* fields should be populated with details about the network activity associated with an event. - -[discrete] -==== Network Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-network-application]] -<> - -a| When a specific application or service is identified from network connection details (source/dest IPs, ports, certificates, or wire format), this field captures the application's or service's name. - -For example, the original event identifies the network connection being from a specific web service in a `https` network connection, like `facebook` or `twitter`. - -The field value must be normalized to lowercase for querying. - -type: keyword - - - -example: `aim` - -| extended - -// =============================================================== - -| -[[field-network-bytes]] -<> - -a| Total bytes transferred in both directions. - -If `source.bytes` and `destination.bytes` are known, `network.bytes` is their sum. - -type: long - - - -example: `368` - -| core - -// =============================================================== - -| -[[field-network-community-id]] -<> - -a| A hash of source and destination IPs and ports, as well as the protocol used in a communication. This is a tool-agnostic standard to identify flows. - -Learn more at https://github.com/corelight/community-id-spec. - -type: keyword - - - -example: `1:hO+sN4H+MG5MY/8hIrXPqc4ZQz0=` - -| extended - -// =============================================================== - -| -[[field-network-direction]] -<> - -a| Direction of the network traffic. - -When mapping events from a host-based monitoring context, populate this field from the host's point of view, using the values "ingress" or "egress". - -When mapping events from a network or perimeter-based monitoring context, populate this field from the point of view of the network perimeter, using the values "inbound", "outbound", "internal" or "external". - -Note that "internal" is not crossing perimeter boundaries, and is meant to describe communication between two hosts within the perimeter. Note also that "external" is meant to describe traffic between two hosts that are external to the perimeter. This could for example be useful for ISPs or VPN service providers. - -Expected values for this field: - -* `ingress` -* `egress` -* `inbound` -* `outbound` -* `internal` -* `external` -* `unknown` - -type: keyword - - - -example: `inbound` - -| core - -// =============================================================== - -| -[[field-network-forwarded-ip]] -<> - -a| Host IP address when the source IP address is the proxy. - -type: ip - - - -example: `192.1.1.2` - -| core - -// =============================================================== - -| -[[field-network-iana-number]] -<> - -a| IANA Protocol Number (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Standardized list of protocols. This aligns well with NetFlow and sFlow related logs which use the IANA Protocol Number. - -type: keyword - - - -example: `6` - -| extended - -// =============================================================== - -| -[[field-network-inner]] -<> - -a| Network.inner fields are added in addition to network.vlan fields to describe the innermost VLAN when q-in-q VLAN tagging is present. Allowed fields include vlan.id and vlan.name. Inner vlan fields are typically used when sending traffic with multiple 802.1q encapsulations to a network sensor (e.g. Zeek, Wireshark.) - -type: object - - - - - -| extended - -// =============================================================== - -| -[[field-network-name]] -<> - -a| Name given by operators to sections of their network. - -type: keyword - - - -example: `Guest Wifi` - -| extended - -// =============================================================== - -| -[[field-network-packets]] -<> - -a| Total packets transferred in both directions. - -If `source.packets` and `destination.packets` are known, `network.packets` is their sum. - -type: long - - - -example: `24` - -| core - -// =============================================================== - -| -[[field-network-protocol]] -<> - -a| In the OSI Model this would be the Application Layer protocol. For example, `http`, `dns`, or `ssh`. - -The field value must be normalized to lowercase for querying. - -type: keyword - - - -example: `http` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-protocol-name[network.protocol.name] - -| core - -// =============================================================== - -| -[[field-network-transport]] -<> - -a| Same as network.iana_number, but instead using the Keyword name of the transport layer (udp, tcp, ipv6-icmp, etc.) - -The field value must be normalized to lowercase for querying. - -type: keyword - - - -example: `tcp` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-transport[network.transport] - -| core - -// =============================================================== - -| -[[field-network-type]] -<> - -a| In the OSI Model this would be the Network Layer. ipv4, ipv6, ipsec, pim, etc - -The field value must be normalized to lowercase for querying. - -type: keyword - - - -example: `ipv4` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-type[network.type] - -| core - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-network-nestings]] -[discrete] -===== Field sets that can be nested under Network - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `network.inner.vlan.*` -| <> -| Fields to describe observed VLAN information. - -// =============================================================== - - -| `network.vlan.*` -| <> -| Fields to describe observed VLAN information. - -// =============================================================== - - -|===== - - -[[ecs-observer]] -=== Observer Fields - -An observer is defined as a special network, security, or application device used to detect, observe, or create network, security, or application-related events and metrics. - -This could be a custom hardware appliance or a server that has been configured to run special network, security, or application software. Examples include firewalls, web proxies, intrusion detection/prevention systems, network monitoring sensors, web application firewalls, data loss prevention systems, and APM servers. The observer.* fields shall be populated with details of the system, if any, that detects, observes and/or creates a network, security, or application event or metric. Message queues and ETL components used in processing events or metrics are not considered observers in ECS. - -[discrete] -==== Observer Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-observer-egress]] -<> - -a| Observer.egress holds information like interface number and name, vlan, and zone information to classify egress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic. - -type: object - - - - - -| extended - -// =============================================================== - -| -[[field-observer-egress-zone]] -<> - -a| Network zone of outbound traffic as reported by the observer to categorize the destination area of egress traffic, e.g. Internal, External, DMZ, HR, Legal, etc. - -type: keyword - - - -example: `Public_Internet` - -| extended - -// =============================================================== - -| -[[field-observer-hostname]] -<> - -a| Hostname of the observer. - -type: keyword - - - - - -| core - -// =============================================================== - -| -[[field-observer-ingress]] -<> - -a| Observer.ingress holds information like interface number and name, vlan, and zone information to classify ingress traffic. Single armed monitoring such as a network sensor on a span port should only use observer.ingress to categorize traffic. - -type: object - - - - - -| extended - -// =============================================================== - -| -[[field-observer-ingress-zone]] -<> - -a| Network zone of incoming traffic as reported by the observer to categorize the source area of ingress traffic. e.g. internal, External, DMZ, HR, Legal, etc. - -type: keyword - - - -example: `DMZ` - -| extended - -// =============================================================== - -| -[[field-observer-ip]] -<> - -a| IP addresses of the observer. - -type: ip - - -Note: this field should contain an array of values. - - - - - -| core - -// =============================================================== - -| -[[field-observer-mac]] -<> - -a| MAC addresses of the observer. - -The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["00-00-5E-00-53-23", "00-00-5E-00-53-24"]` - -| core - -// =============================================================== - -| -[[field-observer-name]] -<> - -a| Custom name of the observer. - -This is a name that can be given to an observer. This can be helpful for example if multiple firewalls of the same model are used in an organization. - -If no custom name is needed, the field can be left empty. - -type: keyword - - - -example: `1_proxySG` - -| extended - -// =============================================================== - -| -[[field-observer-product]] -<> - -a| The product name of the observer. - -type: keyword - - - -example: `s200` - -| extended - -// =============================================================== - -| -[[field-observer-serial-number]] -<> - -a| Observer serial number. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-observer-type]] -<> - -a| The type of the observer the data is coming from. - -There is no predefined list of observer types. Some examples are `forwarder`, `firewall`, `ids`, `ips`, `proxy`, `poller`, `sensor`, `APM server`. - -type: keyword - - - -example: `firewall` - -| core - -// =============================================================== - -| -[[field-observer-vendor]] -<> - -a| Vendor name of the observer. - -type: keyword - - - -example: `Symantec` - -| core - -// =============================================================== - -| -[[field-observer-version]] -<> - -a| Observer version. - -type: keyword - - - - - -| core - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-observer-nestings]] -[discrete] -===== Field sets that can be nested under Observer - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `observer.egress.interface.*` -| <> -| Fields to describe observer interface information. - -// =============================================================== - - -| `observer.egress.vlan.*` -| <> -| Fields to describe observed VLAN information. - -// =============================================================== - - -| `observer.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `observer.ingress.interface.*` -| <> -| Fields to describe observer interface information. - -// =============================================================== - - -| `observer.ingress.vlan.*` -| <> -| Fields to describe observed VLAN information. - -// =============================================================== - - -| `observer.os.*` -| <> -| OS fields contain information about the operating system. - -// =============================================================== - - -|===== - - -[[ecs-orchestrator]] -=== Orchestrator Fields - -Fields that describe the resources which container orchestrators manage or act upon. - -[discrete] -==== Orchestrator Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-orchestrator-api-version]] -<> - -a| API version being used to carry out the action - -type: keyword - - - -example: `v1beta1` - -| extended - -// =============================================================== - -| -[[field-orchestrator-cluster-id]] -<> - -a| Unique ID of the cluster. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-orchestrator-cluster-name]] -<> - -a| Name of the cluster. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-orchestrator-cluster-url]] -<> - -a| URL of the API used to manage the cluster. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-orchestrator-cluster-version]] -<> - -a| The version of the cluster. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-orchestrator-namespace]] -<> - -a| Namespace in which the action is taking place. - -type: keyword - - - -example: `kube-system` - -| extended - -// =============================================================== - -| -[[field-orchestrator-organization]] -<> - -a| Organization affected by the event (for multi-tenant orchestrator setups). - -type: keyword - - - -example: `elastic` - -| extended - -// =============================================================== - -| -[[field-orchestrator-resource-annotation]] -<> - -a| The list of annotations added to the resource. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `['key1:value1', 'key2:value2', 'key3:value3']` - -| extended - -// =============================================================== - -| -[[field-orchestrator-resource-id]] -<> - -a| Unique ID of the resource being acted upon. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-orchestrator-resource-ip]] -<> - -a| IP address assigned to the resource associated with the event being observed. In the case of a Kubernetes Pod, this array would contain only one element: the IP of the Pod (as opposed to the Node on which the Pod is running). - -type: ip - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-orchestrator-resource-label]] -<> - -a| The list of labels added to the resource. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `['key1:value1', 'key2:value2', 'key3:value3']` - -| extended - -// =============================================================== - -| -[[field-orchestrator-resource-name]] -<> - -a| Name of the resource being acted upon. - -type: keyword - - - -example: `test-pod-cdcws` - -| extended - -// =============================================================== - -| -[[field-orchestrator-resource-parent-type]] -<> - -a| Type or kind of the parent resource associated with the event being observed. In Kubernetes, this will be the name of a built-in workload resource (e.g., Deployment, StatefulSet, DaemonSet). - -type: keyword - - - -example: `DaemonSet` - -| extended - -// =============================================================== - -| -[[field-orchestrator-resource-type]] -<> - -a| Type of resource being acted upon. - -type: keyword - - - -example: `service` - -| extended - -// =============================================================== - -| -[[field-orchestrator-type]] -<> - -a| Orchestrator cluster type (e.g. kubernetes, nomad or cloudfoundry). - -type: keyword - - - -example: `kubernetes` - -| extended - -// =============================================================== - -|===== - - -[[ecs-organization]] -=== Organization Fields - -The organization fields enrich data with information about the company or entity the data is associated with. - -These fields help you arrange or filter data stored in an index by one or multiple organizations. - -[discrete] -==== Organization Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-organization-id]] -<> - -a| Unique identifier for the organization. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-organization-name]] -<> - -a| Organization name. - -type: keyword - -Multi-fields: - -* organization.name.text (type: match_only_text) - - - - - - - -| extended - -// =============================================================== - -|===== - - -[[ecs-os]] -=== Operating System Fields - -The OS fields contain information about the operating system. - -[discrete] -==== Operating System Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-os-family]] -<> - -a| OS family (such as redhat, debian, freebsd, windows). - -type: keyword - - - -example: `debian` - -| extended - -// =============================================================== - -| -[[field-os-full]] -<> - -a| Operating system name, including the version or code name. - -type: keyword - -Multi-fields: - -* os.full.text (type: match_only_text) - - - - - -example: `Mac OS Mojave` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-description[os.description] - -| extended - -// =============================================================== - -| -[[field-os-kernel]] -<> - -a| Operating system kernel version as a raw string. - -type: keyword - - - -example: `4.4.0-112-generic` - -| extended - -// =============================================================== - -| -[[field-os-name]] -<> - -a| Operating system name, without the version. - -type: keyword - -Multi-fields: - -* os.name.text (type: match_only_text) - - - - - -example: `Mac OS X` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-name[os.name] - -| extended - -// =============================================================== - -| -[[field-os-platform]] -<> - -a| Operating system platform (such centos, ubuntu, windows). - -type: keyword - - - -example: `darwin` - -| extended - -// =============================================================== - -| -[[field-os-type]] -<> - -a| Use the `os.type` field to categorize the operating system into one of the broad commercial families. - -If the OS you're dealing with is not listed as an expected value, the field should not be populated. Please let us know by opening an issue with ECS, to propose its addition. - -Expected values for this field: - -* `linux` -* `macos` -* `unix` -* `windows` -* `ios` -* `android` - -type: keyword - - - -example: `macos` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/conflict-910000?style=flat[relation,title=conflict,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-type[os.type] - -Note: The expected values in ECS for `os.type` do not correspond with the values defined in semantic conventions! - -| extended - -// =============================================================== - -| -[[field-os-version]] -<> - -a| Operating system version as a raw string. - -type: keyword - - - -example: `10.14.1` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-version[os.version] - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `os` fields are expected to be nested at: - - -* `host.os` - -* `observer.os` - -* `user_agent.os` - - -Note also that the `os` fields are not expected to be used directly at the root of the events. -[[ecs-package]] -=== Package Fields - -These fields contain information about an installed software package. It contains general information about a package, such as name, version or size. It also contains installation details, such as time or location. - -[discrete] -==== Package Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-package-architecture]] -<> - -a| Package architecture. - -type: keyword - - - -example: `x86_64` - -| extended - -// =============================================================== - -| -[[field-package-build-version]] -<> - -a| Additional information about the build version of the installed package. - -For example use the commit SHA of a non-released package. - -type: keyword - - - -example: `36f4f7e89dd61b0988b12ee000b98966867710cd` - -| extended - -// =============================================================== - -| -[[field-package-checksum]] -<> - -a| Checksum of the installed package for verification. - -type: keyword - - - -example: `68b329da9893e34099c7d8ad5cb9c940` - -| extended - -// =============================================================== - -| -[[field-package-description]] -<> - -a| Description of the package. - -type: keyword - - - -example: `Open source programming language to build simple/reliable/efficient software.` - -| extended - -// =============================================================== - -| -[[field-package-install-scope]] -<> - -a| Indicating how the package was installed, e.g. user-local, global. - -type: keyword - - - -example: `global` - -| extended - -// =============================================================== - -| -[[field-package-installed]] -<> - -a| Time when package was installed. - -type: date - - - - - -| extended - -// =============================================================== - -| -[[field-package-license]] -<> - -a| License under which the package was released. - -Use a short name, e.g. the license identifier from SPDX License List where possible (https://spdx.org/licenses/). - -type: keyword - - - -example: `Apache License 2.0` - -| extended - -// =============================================================== - -| -[[field-package-name]] -<> - -a| Package name - -type: keyword - - - -example: `go` - -| extended - -// =============================================================== - -| -[[field-package-path]] -<> - -a| Path where the package is installed. - -type: keyword - - - -example: `/usr/local/Cellar/go/1.12.9/` - -| extended - -// =============================================================== - -| -[[field-package-reference]] -<> - -a| Home page or reference URL of the software in this package, if available. - -type: keyword - - - -example: `https://golang.org` - -| extended - -// =============================================================== - -| -[[field-package-size]] -<> - -a| Package size in bytes. - -type: long - - - -example: `62231` - -| extended - -// =============================================================== - -| -[[field-package-type]] -<> - -a| Type of package. - -This should contain the package file type, rather than the package manager name. Examples: rpm, dpkg, brew, npm, gem, nupkg, jar. - -type: keyword - - - -example: `rpm` - -| extended - -// =============================================================== - -| -[[field-package-version]] -<> - -a| Package version - -type: keyword - - - -example: `1.12.9` - -| extended - -// =============================================================== - -|===== - - -[[ecs-pe]] -=== PE Header Fields - -These fields contain Windows Portable Executable (PE) metadata. - -[discrete] -==== PE Header Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-pe-architecture]] -<> - -a| CPU architecture target for the file. - -type: keyword - - - -example: `x64` - -| extended - -// =============================================================== - -| -[[field-pe-company]] -<> - -a| Internal company name of the file, provided at compile-time. - -type: keyword - - - -example: `Microsoft Corporation` - -| extended - -// =============================================================== - -| -[[field-pe-description]] -<> - -a| Internal description of the file, provided at compile-time. - -type: keyword - - - -example: `Paint` - -| extended - -// =============================================================== - -| -[[field-pe-file-version]] -<> - -a| Internal version of the file, provided at compile-time. - -type: keyword - - - -example: `6.3.9600.17415` - -| extended - -// =============================================================== - -| -[[field-pe-go-import-hash]] -<> - -a| A hash of the Go language imports in a PE file excluding standard library imports. An import hash can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -The algorithm used to calculate the Go symbol hash and a reference implementation are available here: https://github.com/elastic/toutoumomoma - -type: keyword - - - -example: `10bddcb4cee42080f76c88d9ff964491` - -| extended - -// =============================================================== - -| -[[field-pe-go-imports]] -<> - -a| List of imported Go language element names and types. - -type: flattened - - - - - -| extended - -// =============================================================== - -| -[[field-pe-go-imports-names-entropy]] -<> - -a| Shannon entropy calculation from the list of Go imports. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-pe-go-imports-names-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the list of Go imports. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-pe-go-stripped]] -<> - -a| Set to true if the file is a Go executable that has had its symbols stripped or obfuscated and false if an unobfuscated Go executable. - -type: boolean - - - - - -| extended - -// =============================================================== - -| -[[field-pe-imphash]] -<> - -a| A hash of the imports in a PE file. An imphash -- or import hash -- can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -Learn more at https://www.fireeye.com/blog/threat-research/2014/01/tracking-malware-import-hashing.html. - -type: keyword - - - -example: `0c6803c4e922103c4dca5963aad36ddf` - -| extended - -// =============================================================== - -| -[[field-pe-import-hash]] -<> - -a| A hash of the imports in a PE file. An import hash can be used to fingerprint binaries even after recompilation or other code-level transformations have occurred, which would change more traditional hash values. - -This is a synonym for imphash. - -type: keyword - - - -example: `d41d8cd98f00b204e9800998ecf8427e` - -| extended - -// =============================================================== - -| -[[field-pe-imports]] -<> - -a| List of imported element names and types. - -type: flattened - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-pe-imports-names-entropy]] -<> - -a| Shannon entropy calculation from the list of imported element names and types. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-pe-imports-names-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the list of imported element names and types. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-pe-original-file-name]] -<> - -a| Internal name of the file, provided at compile-time. - -type: keyword - - - -example: `MSPAINT.EXE` - -| extended - -// =============================================================== - -| -[[field-pe-pehash]] -<> - -a| A hash of the PE header and data from one or more PE sections. An pehash can be used to cluster files by transforming structural information about a file into a hash value. - -Learn more at https://www.usenix.org/legacy/events/leet09/tech/full_papers/wicherski/wicherski_html/index.html. - -type: keyword - - - -example: `73ff189b63cd6be375a7ff25179a38d347651975` - -| extended - -// =============================================================== - -| -[[field-pe-product]] -<> - -a| Internal product name of the file, provided at compile-time. - -type: keyword - - - -example: `Microsoft® Windows® Operating System` - -| extended - -// =============================================================== - -| -[[field-pe-sections]] -<> - -a| An array containing an object for each section of the PE file. - -The keys that should be present in these objects are defined by sub-fields underneath `pe.sections.*`. - -type: nested - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-pe-sections-entropy]] -<> - -a| Shannon entropy calculation from the section. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-pe-sections-name]] -<> - -a| PE Section List name. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-pe-sections-physical-size]] -<> - -a| PE Section List physical size. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-pe-sections-var-entropy]] -<> - -a| Variance for Shannon entropy calculation from the section. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-pe-sections-virtual-size]] -<> - -a| PE Section List virtual size. This is always the same as `physical_size`. - -type: long - - - - - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `pe` fields are expected to be nested at: - - -* `dll.pe` - -* `file.pe` - -* `process.pe` - - -Note also that the `pe` fields are not expected to be used directly at the root of the events. -[[ecs-process]] -=== Process Fields - -These fields contain information about a process. - -These fields can help you correlate metrics information with a process id/name from a log message. The `process.pid` often stays in the metric itself and is copied to the global field for correlation. - -[discrete] -==== Process Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-process-args]] -<> - -a| Array of process arguments, starting with the absolute path to the executable. - -May be filtered to protect sensitive information. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["/usr/bin/ssh", "-l", "user", "10.0.0.16"]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-command-args[process.command_args] - -| extended - -// =============================================================== - -| -[[field-process-args-count]] -<> - -a| Length of the process.args array. - -This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity. - -type: long - - - -example: `4` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-args-count[process.args_count] - -| extended - -// =============================================================== - -| -[[field-process-command-line]] -<> - -a| Full command line that started the process, including the absolute path to the executable, and all arguments. - -Some arguments may be filtered to protect sensitive information. - -type: wildcard - -Multi-fields: - -* process.command_line.text (type: match_only_text) - - - - - -example: `/usr/bin/ssh -l user 10.0.0.16` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-command-line[process.command_line] - -| extended - -// =============================================================== - -| -[[field-process-end]] -<> - -a| The time the process ended. - -type: date - - - -example: `2016-05-23T08:05:34.853Z` - -| extended - -// =============================================================== - -| -[[field-process-entity-id]] -<> - -a| Unique identifier for the process. - -The implementation of this is specified by the data source, but some examples of what could be used here are a process-generated UUID, Sysmon Process GUIDs, or a hash of some uniquely identifying components of a process. - -Constructing a globally unique identifier is a common practice to mitigate PID reuse as well as to identify a specific process over time, across multiple monitored hosts. - -type: keyword - - - -example: `c2c455d9f99375d` - -| extended - -// =============================================================== - -| -[[field-process-entry-meta-type]] -<> - -a| The entry type for the entry session leader. Values include: init(e.g systemd), sshd, ssm, kubelet, teleport, terminal, console - -Note: This field is only set on process.session_leader. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-process-env-vars]] -<> - -a| Array of environment variable bindings. Captured from a snapshot of the environment at the time of execution. - -May be filtered to protect sensitive information. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["PATH=/usr/local/bin:/usr/bin", "USER=ubuntu"]` - -| extended - -// =============================================================== - -| -[[field-process-executable]] -<> - -a| Absolute path to the process executable. - -type: keyword - -Multi-fields: - -* process.executable.text (type: match_only_text) - - - - - -example: `/usr/bin/ssh` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-executable-path[process.executable.path] - -| extended - -// =============================================================== - -| -[[field-process-exit-code]] -<> - -a| The exit code of the process, if this is a termination event. - -The field should be absent if there is no exit code for the event (e.g. process start). - -type: long - - - -example: `137` - -| extended - -// =============================================================== - -| -[[field-process-interactive]] -<> - -a| Whether the process is connected to an interactive shell. - -Process interactivity is inferred from the processes file descriptors. If the character device for the controlling tty is the same as stdin and stderr for the process, the process is considered interactive. - -Note: A non-interactive process can belong to an interactive session and is simply one that does not have open file descriptors reading the controlling TTY on FD 0 (stdin) or writing to the controlling TTY on FD 2 (stderr). A backgrounded process is still considered interactive if stdin and stderr are connected to the controlling TTY. - -type: boolean - - - -example: `True` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-interactive[process.interactive] - -| extended - -// =============================================================== - -| -[[field-process-io]] -<> - -a| A chunk of input or output (IO) from a single process. - -This field only appears on the top level process object, which is the process that wrote the output or read the input. - -type: object - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-bytes-skipped]] -<> - -a| An array of byte offsets and lengths denoting where IO data has been skipped. - -type: object - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-bytes-skipped-length]] -<> - -a| The length of bytes skipped. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-bytes-skipped-offset]] -<> - -a| The byte offset into this event's io.text (or io.bytes in the future) where length bytes were skipped. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-max-bytes-per-process-exceeded]] -<> - -a| If true, the process producing the output has exceeded the max_kilobytes_per_process configuration setting. - -type: boolean - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-text]] -<> - -a| A chunk of output or input sanitized to UTF-8. - -Best efforts are made to ensure complete lines are captured in these events. Assumptions should NOT be made that multiple lines will appear in the same event. TTY output may contain terminal control codes such as for cursor movement, so some string queries may not match due to terminal codes inserted between characters of a word. - -type: wildcard - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-total-bytes-captured]] -<> - -a| The total number of bytes captured in this event. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-total-bytes-skipped]] -<> - -a| The total number of bytes that were not captured due to implementation restrictions such as buffer size limits. Implementors should strive to ensure this value is always zero - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-process-io-type]] -<> - -a| The type of object on which the IO action (read or write) was taken. - -Currently only 'tty' is supported. Other types may be added in the future for 'file' and 'socket' support. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-process-name]] -<> - -a| Process name. - -Sometimes called program name or similar. - -type: keyword - -Multi-fields: - -* process.name.text (type: match_only_text) - - - - - -example: `ssh` - -| extended - -// =============================================================== - -| -[[field-process-pid]] -<> - -a| Process id. - -type: long - - - -example: `4242` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-pid[process.pid] - -| core - -// =============================================================== - -| -[[field-process-same-as-process]] -<> - -a| This boolean is used to identify if a leader process is the same as the top level process. - -For example, if `process.group_leader.same_as_process = true`, it means the process event in question is the leader of its process group. Details under `process.*` like `pid` would be the same under `process.group_leader.*` The same applies for both `process.session_leader` and `process.entry_leader`. - -This field exists to the benefit of EQL and other rule engines since it's not possible to compare equality between two fields in a single document. e.g `process.entity_id` = `process.group_leader.entity_id` (top level process is the process group leader) OR `process.entity_id` = `process.entry_leader.entity_id` (top level process is the entry session leader) - -Instead these rules could be written like: `process.group_leader.same_as_process: true` OR `process.entry_leader.same_as_process: true` - -Note: This field is only set on `process.entry_leader`, `process.session_leader` and `process.group_leader`. - -type: boolean - - - -example: `True` - -| extended - -// =============================================================== - -| -[[field-process-start]] -<> - -a| The time the process started. - -type: date - - - -example: `2016-05-23T08:05:34.853Z` - -| extended - -// =============================================================== - -| -[[field-process-thread-capabilities-effective]] -<> - -a| This is the set of capabilities used by the kernel to perform permission checks for the thread. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["CAP_BPF", "CAP_SYS_ADMIN"]` - -| extended - -// =============================================================== - -| -[[field-process-thread-capabilities-permitted]] -<> - -a| This is a limiting superset for the effective capabilities that the thread may assume. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["CAP_BPF", "CAP_SYS_ADMIN"]` - -| extended - -// =============================================================== - -| -[[field-process-thread-id]] -<> - -a| Thread ID. - -type: long - - - -example: `4242` - -| extended - -// =============================================================== - -| -[[field-process-thread-name]] -<> - -a| Thread name. - -type: keyword - - - -example: `thread-0` - -| extended - -// =============================================================== - -| -[[field-process-title]] -<> - -a| Process title. - -The proctitle, some times the same as process name. Can also be different: for example a browser setting its title to the web page currently opened. - -type: keyword - -Multi-fields: - -* process.title.text (type: match_only_text) - - - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-title[process.title] - -| extended - -// =============================================================== - -| -[[field-process-tty]] -<> - -a| Information about the controlling TTY device. If set, the process belongs to an interactive session. - -type: object - - - - - -| extended - -// =============================================================== - -| -[[field-process-tty-char-device-major]] -<> - -a| The major number identifies the driver associated with the device. The character device's major and minor numbers can be algorithmically combined to produce the more familiar terminal identifiers such as "ttyS0" and "pts/0". For more details, please refer to the Linux kernel documentation. - -type: long - - - -example: `4` - -| extended - -// =============================================================== - -| -[[field-process-tty-char-device-minor]] -<> - -a| The minor number is used only by the driver specified by the major number; other parts of the kernel don’t use it, and merely pass it along to the driver. It is common for a driver to control several devices; the minor number provides a way for the driver to differentiate among them. - -type: long - - - -example: `1` - -| extended - -// =============================================================== - -| -[[field-process-tty-columns]] -<> - -a| The number of character columns per line. e.g terminal width - -Terminal sizes can change, so this value reflects the maximum value for a given IO event. i.e. where event.action = 'text_output' - -type: long - - - -example: `80` - -| extended - -// =============================================================== - -| -[[field-process-tty-rows]] -<> - -a| The number of character rows in the terminal. e.g terminal height - -Terminal sizes can change, so this value reflects the maximum value for a given IO event. i.e. where event.action = 'text_output' - -type: long - - - -example: `24` - -| extended - -// =============================================================== - -| -[[field-process-uptime]] -<> - -a| Seconds the process has been up. - -type: long - - - -example: `1325` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.process.uptime+--%3E%22&type=code[process.uptime] - -| extended - -// =============================================================== - -| -[[field-process-vpid]] -<> - -a| Virtual process id. - -The process id within a pid namespace. This is not necessarily unique across all processes on the host but it is unique within the process namespace that the process exists within. - -type: long - - - -example: `4242` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-vpid[process.vpid] - -| core - -// =============================================================== - -| -[[field-process-working-directory]] -<> - -a| The working directory of the process. - -type: keyword - -Multi-fields: - -* process.working_directory.text (type: match_only_text) - - - - - -example: `/home/alice` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-working-directory[process.working_directory] - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `process` fields are expected to be nested at: - - -* `process.entry_leader` - -* `process.entry_leader.parent` - -* `process.entry_leader.parent.session_leader` - -* `process.group_leader` - -* `process.parent` - -* `process.parent.group_leader` - -* `process.previous` - -* `process.responsible` - -* `process.session_leader` - -* `process.session_leader.parent` - -* `process.session_leader.parent.session_leader` - - -Note also that the `process` fields may be used directly at the root of the events. - -[[ecs-process-nestings]] -[discrete] -===== Field sets that can be nested under Process - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `process.attested_groups.*` -| <>| beta:[ Reusing the `group` fields in this location is currently considered beta.] - -The externally attested groups based on an external source such as the Kube API. - -Note: this reuse should contain an array of group field set objects. - -// =============================================================== - - -| `process.attested_user.*` -| <>| beta:[ Reusing the `user` fields in this location is currently considered beta.] - -The externally attested user based on an external source such as the Kube API. - -// =============================================================== - - -| `process.code_signature.*` -| <> -| These fields contain information about binary code signatures. - -// =============================================================== - - -| `process.elf.*` -| <> -| These fields contain Linux Executable Linkable Format (ELF) metadata. - -// =============================================================== - - -| `process.entry_leader.*` -| <> -| First process from terminal or remote access via SSH, SSM, etc OR a service directly started by the init process. - -// =============================================================== - - -| `process.entry_leader.parent.*` -| <> -| Information about the entry leader's parent process. Only pid, start and entity_id fields are set. - -// =============================================================== - - -| `process.entry_leader.parent.session_leader.*` -| <> -| Information about the parent session of the entry leader. Only pid, start and entity_id fields are set. - -// =============================================================== - - -| `process.entry_meta.source.*` -| <> -| Remote client information such as ip, port and geo location. - -// =============================================================== - - -| `process.group.*` -| <> -| The effective group (egid). - -// =============================================================== - - -| `process.group_leader.*` -| <> -| Information about the process group leader. In some cases this may be the same as the top level process. - -// =============================================================== - - -| `process.hash.*` -| <> -| Hashes, usually file hashes. - -// =============================================================== - - -| `process.macho.*` -| <>| beta:[ This field reuse is beta and subject to change.] - -These fields contain Mac OS Mach Object file format (Mach-O) metadata. - -// =============================================================== - - -| `process.parent.*` -| <> -| Information about the parent process. - -// =============================================================== - - -| `process.parent.group_leader.*` -| <> -| Information about the parent's process group leader. Only pid, start and entity_id fields are set. - -// =============================================================== - - -| `process.pe.*` -| <> -| These fields contain Windows Portable Executable (PE) metadata. - -// =============================================================== - - -| `process.previous.*` -| <> -| An array of previous executions for the process, including the initial fork. Only executable and args are set. - -Note: this reuse should contain an array of process field set objects. - -// =============================================================== - - -| `process.real_group.*` -| <> -| The real group (rgid). - -// =============================================================== - - -| `process.real_user.*` -| <> -| The real user (ruid). Identifies the real owner of the process. - -// =============================================================== - - -| `process.responsible.*` -| <>| beta:[ This field is beta and subject to change.] - -Responsible process in macOS tracks the originating process of an app, key for understanding permissions and hierarchy. - -// =============================================================== - - -| `process.saved_group.*` -| <> -| The saved group (sgid). - -// =============================================================== - - -| `process.saved_user.*` -| <> -| The saved user (suid). - -// =============================================================== - - -| `process.session_leader.*` -| <> -| Often the same as entry_leader. When it differs, it represents a session started within another session. e.g. using tmux - -// =============================================================== - - -| `process.session_leader.parent.*` -| <> -| Information about the session leader's parent process. Only pid, start and entity_id fields are set. - -// =============================================================== - - -| `process.session_leader.parent.session_leader.*` -| <> -| Information about the parent session of the session leader. Only pid, start and entity_id fields are set. - -// =============================================================== - - -| `process.supplemental_groups.*` -| <> -| An array of supplemental groups. - -Note: this reuse should contain an array of group field set objects. - -// =============================================================== - - -| `process.user.*` -| <> -| The effective user (euid). - -// =============================================================== - - -|===== - - -[[ecs-registry]] -=== Registry Fields - -Fields related to Windows Registry operations. - -[discrete] -==== Registry Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-registry-data-bytes]] -<> - -a| Original bytes written with base64 encoding. - -For Windows registry operations, such as SetValueEx and RegQueryValueEx, this corresponds to the data pointed by `lp_data`. This is optional but provides better recoverability and should be populated for REG_BINARY encoded values. - -type: keyword - - - -example: `ZQBuAC0AVQBTAAAAZQBuAAAAAAA=` - -| extended - -// =============================================================== - -| -[[field-registry-data-strings]] -<> - -a| Content when writing string types. - -Populated as an array when writing string data to the registry. For single string registry types (REG_SZ, REG_EXPAND_SZ), this should be an array with one string. For sequences of string with REG_MULTI_SZ, this array will be variable length. For numeric data, such as REG_DWORD and REG_QWORD, this should be populated with the decimal representation (e.g `"1"`). - -type: wildcard - - -Note: this field should contain an array of values. - - - -example: `["C:\rta\red_ttp\bin\myapp.exe"]` - -| core - -// =============================================================== - -| -[[field-registry-data-type]] -<> - -a| Standard registry type for encoding contents - -type: keyword - - - -example: `REG_SZ` - -| core - -// =============================================================== - -| -[[field-registry-hive]] -<> - -a| Abbreviated name for the hive. - -type: keyword - - - -example: `HKLM` - -| core - -// =============================================================== - -| -[[field-registry-key]] -<> - -a| Hive-relative path of keys. - -type: keyword - - - -example: `SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\winword.exe` - -| core - -// =============================================================== - -| -[[field-registry-path]] -<> - -a| Full path, including hive, key and value - -type: keyword - - - -example: `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\winword.exe\Debugger` - -| core - -// =============================================================== - -| -[[field-registry-value]] -<> - -a| Name of the value written. - -type: keyword - - - -example: `Debugger` - -| core - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `registry` fields are expected to be nested at: - - -* `threat.enrichments.indicator.registry` - -* `threat.indicator.registry` - - -Note also that the `registry` fields may be used directly at the root of the events. - - -[[ecs-related]] -=== Related Fields - -This field set is meant to facilitate pivoting around a piece of data. - -Some pieces of information can be seen in many places in an ECS event. To facilitate searching for them, store an array of all seen values to their corresponding field in `related.`. - -A concrete example is IP addresses, which can be under host, observer, source, destination, client, server, and network.forwarded_ip. If you append all IPs to `related.ip`, you can then search for a given IP trivially, no matter where it appeared, by querying `related.ip:192.0.2.15`. - -[discrete] -==== Related Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-related-hash]] -<> - -a| All the hashes seen on your event. Populating this field, then using it to search for hashes can help in situations where you're unsure what the hash algorithm is (and therefore which key name to search). - -type: keyword - - -Note: this field should contain an array of values. - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -| -[[field-related-hosts]] -<> - -a| All hostnames or other host identifiers seen on your event. Example identifiers include FQDNs, domain names, workstation names, or aliases. - -type: keyword - - -Note: this field should contain an array of values. - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -| -[[field-related-ip]] -<> - -a| All of the IPs seen on your event. - -type: ip - - -Note: this field should contain an array of values. - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -| -[[field-related-user]] -<> - -a| All the user names or other user identifiers seen on the event. - -type: keyword - - -Note: this field should contain an array of values. - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -|===== - - -[[ecs-risk]] -=== Risk information Fields - -Fields for describing risk score and risk level of entities such as hosts and users. These fields are not allowed to be nested under `event.*`. Please continue to use `event.risk_score` and `event.risk_score_norm` for event risk. - -beta::[ These fields are in beta and are subject to change.] - -[discrete] -==== Risk information Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-risk-calculated-level]] -<> - -a| A risk classification level calculated by an internal system as part of entity analytics and entity risk scoring. - -type: keyword - - - -example: `High` - -| extended - -// =============================================================== - -| -[[field-risk-calculated-score]] -<> - -a| A risk classification score calculated by an internal system as part of entity analytics and entity risk scoring. - -type: float - - - -example: `880.73` - -| extended - -// =============================================================== - -| -[[field-risk-calculated-score-norm]] -<> - -a| A risk classification score calculated by an internal system as part of entity analytics and entity risk scoring, and normalized to a range of 0 to 100. - -type: float - - - -example: `88.73` - -| extended - -// =============================================================== - -| -[[field-risk-static-level]] -<> - -a| A risk classification level obtained from outside the system, such as from some external Threat Intelligence Platform. - -type: keyword - - - -example: `High` - -| extended - -// =============================================================== - -| -[[field-risk-static-score]] -<> - -a| A risk classification score obtained from outside the system, such as from some external Threat Intelligence Platform. - -type: float - - - -example: `830.0` - -| extended - -// =============================================================== - -| -[[field-risk-static-score-norm]] -<> - -a| A risk classification score obtained from outside the system, such as from some external Threat Intelligence Platform, and normalized to a range of 0 to 100. - -type: float - - - -example: `83.0` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `risk` fields are expected to be nested at: - - -* `host.risk` - -* `user.risk` - - -Note also that the `risk` fields are not expected to be used directly at the root of the events. -[[ecs-rule]] -=== Rule Fields - -Rule fields are used to capture the specifics of any observer or agent rules that generate alerts or other notable events. - -Examples of data sources that would populate the rule fields include: network admission control platforms, network or host IDS/IPS, network firewalls, web application firewalls, url filters, endpoint detection and response (EDR) systems, etc. - -[discrete] -==== Rule Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-rule-author]] -<> - -a| Name, organization, or pseudonym of the author or authors who created the rule used to generate this event. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["Star-Lord"]` - -| extended - -// =============================================================== - -| -[[field-rule-category]] -<> - -a| A categorization value keyword used by the entity using the rule for detection of this event. - -type: keyword - - - -example: `Attempted Information Leak` - -| extended - -// =============================================================== - -| -[[field-rule-description]] -<> - -a| The description of the rule generating the event. - -type: keyword - - - -example: `Block requests to public DNS over HTTPS / TLS protocols` - -| extended - -// =============================================================== - -| -[[field-rule-id]] -<> - -a| A rule ID that is unique within the scope of an agent, observer, or other entity using the rule for detection of this event. - -type: keyword - - - -example: `101` - -| extended - -// =============================================================== - -| -[[field-rule-license]] -<> - -a| Name of the license under which the rule used to generate this event is made available. - -type: keyword - - - -example: `Apache 2.0` - -| extended - -// =============================================================== - -| -[[field-rule-name]] -<> - -a| The name of the rule or signature generating the event. - -type: keyword - - - -example: `BLOCK_DNS_over_TLS` - -| extended - -// =============================================================== - -| -[[field-rule-reference]] -<> - -a| Reference URL to additional information about the rule used to generate this event. - -The URL can point to the vendor's documentation about the rule. If that's not available, it can also be a link to a more general page describing this type of alert. - -type: keyword - - - -example: `https://en.wikipedia.org/wiki/DNS_over_TLS` - -| extended - -// =============================================================== - -| -[[field-rule-ruleset]] -<> - -a| Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member. - -type: keyword - - - -example: `Standard_Protocol_Filters` - -| extended - -// =============================================================== - -| -[[field-rule-uuid]] -<> - -a| A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event. - -type: keyword - - - -example: `1100110011` - -| extended - -// =============================================================== - -| -[[field-rule-version]] -<> - -a| The version / revision of the rule being used for analysis. - -type: keyword - - - -example: `1.1` - -| extended - -// =============================================================== - -|===== - - -[[ecs-server]] -=== Server Fields - -A Server is defined as the responder in a network connection for events regarding sessions, connections, or bidirectional flow records. - -For TCP events, the server is the receiver of the initial SYN packet(s) of the TCP connection. For other protocols, the server is generally the responder in the network transaction. Some systems actually use the term "responder" to refer the server in TCP connections. The server fields describe details about the system acting as the server in the network event. Server fields are usually populated in conjunction with client fields. Server fields are generally not populated for packet-level events. - -Client / server representations can add semantic context to an exchange, which is helpful to visualize the data in certain situations. If your context falls in that category, you should still ensure that source and destination are filled appropriately. - -[discrete] -==== Server Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-server-address]] -<> - -a| Some event server addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. - -Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/server/#server-address[server.address] - -| extended - -// =============================================================== - -| -[[field-server-bytes]] -<> - -a| Bytes sent from the server to the client. - -type: long - - - -example: `184` - -| core - -// =============================================================== - -| -[[field-server-domain]] -<> - -a| The domain name of the server system. - -This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. - -type: keyword - - - -example: `foo.example.com` - -| core - -// =============================================================== - -| -[[field-server-ip]] -<> - -a| IP address of the server (IPv4 or IPv6). - -type: ip - - - - - -| core - -// =============================================================== - -| -[[field-server-mac]] -<> - -a| MAC address of the server. - -The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. - -type: keyword - - - -example: `00-00-5E-00-53-23` - -| core - -// =============================================================== - -| -[[field-server-nat-ip]] -<> - -a| Translated ip of destination based NAT sessions (e.g. internet to private DMZ) - -Typically used with load balancers, firewalls, or routers. - -type: ip - - - - - -| extended - -// =============================================================== - -| -[[field-server-nat-port]] -<> - -a| Translated port of destination based NAT sessions (e.g. internet to private DMZ) - -Typically used with load balancers, firewalls, or routers. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-server-packets]] -<> - -a| Packets sent from the server to the client. - -type: long - - - -example: `12` - -| core - -// =============================================================== - -| -[[field-server-port]] -<> - -a| Port of the server. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/server/#server-port[server.port] - -| core - -// =============================================================== - -| -[[field-server-registered-domain]] -<> - -a| The highest registered server domain, stripped of the subdomain. - -For example, the registered domain for "foo.example.com" is "example.com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". - -type: keyword - - - -example: `example.com` - -| extended - -// =============================================================== - -| -[[field-server-subdomain]] -<> - -a| The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. - -For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. - -type: keyword - - - -example: `east` - -| extended - -// =============================================================== - -| -[[field-server-top-level-domain]] -<> - -a| The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". - -type: keyword - - - -example: `co.uk` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-server-nestings]] -[discrete] -===== Field sets that can be nested under Server - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `server.as.*` -| <> -| Fields describing an Autonomous System (Internet routing prefix). - -// =============================================================== - - -| `server.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `server.user.*` -| <> -| Fields to describe the user relevant to the event. - -// =============================================================== - - -|===== - - -[[ecs-service]] -=== Service Fields - -The service fields describe the service for or from which the data was collected. - -These fields help you find and correlate logs for a specific service and version. - -[discrete] -==== Service Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-service-address]] -<> - -a| Address where data about this service was collected from. - -This should be a URI, network address (ipv4:port or [ipv6]:port) or a resource path (sockets). - -type: keyword - - - -example: `172.26.0.2:5432` - -| extended - -// =============================================================== - -| -[[field-service-environment]] -<> - -a| beta:[ This field is beta and subject to change. ] - -Identifies the environment where the service is running. - -If the same service runs in different environments (production, staging, QA, development, etc.), the environment can identify other instances of the same service. Can also group services and applications from the same environment. - -type: keyword - - - -example: `production` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/deployment/#deployment-environment-name[deployment.environment.name] - -| extended - -// =============================================================== - -| -[[field-service-ephemeral-id]] -<> - -a| Ephemeral identifier of this service (if one exists). - -This id normally changes across restarts, but `service.id` does not. - -type: keyword - - - -example: `8a4f500f` - -| extended - -// =============================================================== - -| -[[field-service-id]] -<> - -a| Unique identifier of the running service. If the service is comprised of many nodes, the `service.id` should be the same for all nodes. - -This id should uniquely identify the service. This makes it possible to correlate logs and metrics for one specific service, no matter which particular node emitted the event. - -Note that if you need to see the events from one specific host of the service, you should filter on that `host.name` or `host.id` instead. - -type: keyword - - - -example: `d37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6` - -| core - -// =============================================================== - -| -[[field-service-name]] -<> - -a| Name of the service data is collected from. - -The name of the service is normally user given. This allows for distributed services that run on multiple hosts to correlate the related instances based on the name. - -In the case of Elasticsearch the `service.name` could contain the cluster name. For Beats the `service.name` is by default a copy of the `service.type` field if no name is specified. - -type: keyword - - - -example: `elasticsearch-metrics` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/service/#service-name[service.name] - -| core - -// =============================================================== - -| -[[field-service-node-name]] -<> - -a| Name of a service node. - -This allows for two nodes of the same service running on the same host to be differentiated. Therefore, `service.node.name` should typically be unique across nodes of a given service. - -In the case of Elasticsearch, the `service.node.name` could contain the unique node name within the Elasticsearch cluster. In cases where the service doesn't have the concept of a node name, the host name or container name can be used to distinguish running instances that make up this service. If those do not provide uniqueness (e.g. multiple instances of the service running on the same host) - the node name can be manually set. - -type: keyword - - - -example: `instance-0000000016` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/service/#service-instance-id[service.instance.id] - -| extended - -// =============================================================== - -| -[[field-service-node-role]] -<> - -a| Deprecated for removal in next major version release. This field will be superseded by `node.roles`. - -Role of a service node. - -This allows for distinction between different running roles of the same service. - -In the case of Kibana, the `service.node.role` could be `ui` or `background_tasks`. - -In the case of Elasticsearch, the `service.node.role` could be `master` or `data`. - -Other services could use this to distinguish between a `web` and `worker` role running as part of the service. - -type: keyword - - - -example: `background_tasks` - -| extended - -// =============================================================== - -| -[[field-service-node-roles]] -<> - -a| Roles of a service node. - -This allows for distinction between different running roles of the same service. - -In the case of Kibana, the `service.node.role` could be `ui` or `background_tasks` or both. - -In the case of Elasticsearch, the `service.node.role` could be `master` or `data` or both. - -Other services could use this to distinguish between a `web` and `worker` role running as part of the service. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["ui", "background_tasks"]` - -| extended - -// =============================================================== - -| -[[field-service-state]] -<> - -a| Current state of the service. - -type: keyword - - - - - -| core - -// =============================================================== - -| -[[field-service-type]] -<> - -a| The type of the service data is collected from. - -The type can be used to group and correlate logs and metrics from one service type. - -Example: If logs or metrics are collected from Elasticsearch, `service.type` would be `elasticsearch`. - -type: keyword - - - -example: `elasticsearch` - -| core - -// =============================================================== - -| -[[field-service-version]] -<> - -a| Version of the service the data was collected from. - -This allows to look at a data set only for a specific version of a service. - -type: keyword - - - -example: `3.2.4` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/service/#service-version[service.version] - -| core - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `service` fields are expected to be nested at: - - -* `service.origin` - -* `service.target` - - -Note also that the `service` fields may be used directly at the root of the events. - -[[ecs-service-nestings]] -[discrete] -===== Field sets that can be nested under Service - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `service.origin.*` -| <>| beta:[ Reusing the `service` fields in this location is currently considered beta.] - -Describes the origin service in case of an incoming request or event. - -// =============================================================== - - -| `service.target.*` -| <>| beta:[ Reusing the `service` fields in this location is currently considered beta.] - -Describes the target service in case of an outgoing request or event. - -// =============================================================== - - -|===== - - - -[discrete] -==== Service Field Usage - -For usage and examples of the service fields, please see the <> section. - -include::usage/service.asciidoc[] - - -[[ecs-source]] -=== Source Fields - -Source fields capture details about the sender of a network exchange/packet. These fields are populated from a network event, packet, or other event containing details of a network transaction. - -Source fields are usually populated in conjunction with destination fields. The source and destination fields are considered the baseline and should always be filled if an event contains source and destination details from a network transaction. If the event also contains identification of the client and server roles, then the client and server fields should also be populated. - -[discrete] -==== Source Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-source-address]] -<> - -a| Some event source addresses are defined ambiguously. The event will sometimes list an IP, a domain or a unix socket. You should always store the raw address in the `.address` field. - -Then it should be duplicated to `.ip` or `.domain`, depending on which one it is. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/source/#source-address[source.address] - -| extended - -// =============================================================== - -| -[[field-source-bytes]] -<> - -a| Bytes sent from the source to the destination. - -type: long - - - -example: `184` - -| core - -// =============================================================== - -| -[[field-source-domain]] -<> - -a| The domain name of the source system. - -This value may be a host name, a fully qualified domain name, or another host naming format. The value may derive from the original event or be added from enrichment. - -type: keyword - - - -example: `foo.example.com` - -| core - -// =============================================================== - -| -[[field-source-ip]] -<> - -a| IP address of the source (IPv4 or IPv6). - -type: ip - - - - - -| core - -// =============================================================== - -| -[[field-source-mac]] -<> - -a| MAC address of the source. - -The notation format from RFC 7042 is suggested: Each octet (that is, 8-bit byte) is represented by two [uppercase] hexadecimal digits giving the value of the octet as an unsigned integer. Successive octets are separated by a hyphen. - -type: keyword - - - -example: `00-00-5E-00-53-23` - -| core - -// =============================================================== - -| -[[field-source-nat-ip]] -<> - -a| Translated ip of source based NAT sessions (e.g. internal client to internet) - -Typically connections traversing load balancers, firewalls, or routers. - -type: ip - - - - - -| extended - -// =============================================================== - -| -[[field-source-nat-port]] -<> - -a| Translated port of source based NAT sessions. (e.g. internal client to internet) - -Typically used with load balancers, firewalls, or routers. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-source-packets]] -<> - -a| Packets sent from the source to the destination. - -type: long - - - -example: `12` - -| core - -// =============================================================== - -| -[[field-source-port]] -<> - -a| Port of the source. - -type: long - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/source/#source-port[source.port] - -| core - -// =============================================================== - -| -[[field-source-registered-domain]] -<> - -a| The highest registered source domain, stripped of the subdomain. - -For example, the registered domain for "foo.example.com" is "example.com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". - -type: keyword - - - -example: `example.com` - -| extended - -// =============================================================== - -| -[[field-source-subdomain]] -<> - -a| The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. - -For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. - -type: keyword - - - -example: `east` - -| extended - -// =============================================================== - -| -[[field-source-top-level-domain]] -<> - -a| The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". - -type: keyword - - - -example: `co.uk` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `source` fields are expected to be nested at: - - -* `process.entry_meta.source` - - -Note also that the `source` fields may be used directly at the root of the events. - -[[ecs-source-nestings]] -[discrete] -===== Field sets that can be nested under Source - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `source.as.*` -| <> -| Fields describing an Autonomous System (Internet routing prefix). - -// =============================================================== - - -| `source.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `source.user.*` -| <> -| Fields to describe the user relevant to the event. - -// =============================================================== - - -|===== - - -[[ecs-threat]] -=== Threat Fields - -Fields to classify events and alerts according to a threat taxonomy such as the MITRE ATT&CK® framework. - -These fields are for users to classify alerts from all of their sources (e.g. IDS, NGFW, etc.) within a common taxonomy. The threat.tactic.* fields are meant to capture the high level category of the threat (e.g. "impact"). The threat.technique.* fields are meant to capture which kind of approach is used by this detected threat, to accomplish the goal (e.g. "endpoint denial of service"). - -[discrete] -==== Threat Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-threat-enrichments]] -<> - -a| A list of associated indicators objects enriching the event, and the context of that association/enrichment. - -type: nested - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator]] -<> - -a| Object containing associated indicators enriching the event. - -type: object - - - - - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-confidence]] -<> - -a| Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. - -Expected values for this field: - -* `Not Specified` -* `None` -* `Low` -* `Medium` -* `High` - -type: keyword - - - -example: `Medium` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-description]] -<> - -a| Describes the type of action conducted by the threat. - -type: keyword - - - -example: `IP x.x.x.x was observed delivering the Angler EK.` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-email-address]] -<> - -a| Identifies a threat indicator as an email address (irrespective of direction). - -type: keyword - - - -example: `phish@example.com` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-first-seen]] -<> - -a| The date and time when intelligence source first reported sighting this indicator. - -type: date - - - -example: `2020-11-05T17:25:47.000Z` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-ip]] -<> - -a| Identifies a threat indicator as an IP address (irrespective of direction). - -type: ip - - - -example: `1.2.3.4` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-last-seen]] -<> - -a| The date and time when intelligence source last reported sighting this indicator. - -type: date - - - -example: `2020-11-05T17:25:47.000Z` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-marking-tlp]] -<> - -a| Traffic Light Protocol sharing markings. - -Expected values for this field: - -* `WHITE` -* `CLEAR` -* `GREEN` -* `AMBER` -* `AMBER+STRICT` -* `RED` - -type: keyword - - - -example: `CLEAR` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-marking-tlp-version]] -<> - -a| Traffic Light Protocol version. - -type: keyword - - - -example: `2.0` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-modified-at]] -<> - -a| The date and time when intelligence source last modified information for this indicator. - -type: date - - - -example: `2020-11-05T17:25:47.000Z` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-name]] -<> - -a| The display name indicator in an UI friendly format - -URL, IP address, email address, registry key, port number, hash value, or other relevant name can serve as the display name. - -type: keyword - - - -example: `5.2.75.227` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-port]] -<> - -a| Identifies a threat indicator as a port number (irrespective of direction). - -type: long - - - -example: `443` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-provider]] -<> - -a| The name of the indicator's provider. - -type: keyword - - - -example: `lrz_urlhaus` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-reference]] -<> - -a| Reference URL linking to additional information about this indicator. - -type: keyword - - - -example: `https://system.example.com/indicator/0001234` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-scanner-stats]] -<> - -a| Count of AV/EDR vendors that successfully detected malicious file or URL. - -type: long - - - -example: `4` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-sightings]] -<> - -a| Number of times this indicator was observed conducting threat activity. - -type: long - - - -example: `20` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-indicator-type]] -<> - -a| Type of indicator as represented by Cyber Observable in STIX 2.0. - -Expected values for this field: - -* `autonomous-system` -* `artifact` -* `directory` -* `domain-name` -* `email-addr` -* `file` -* `ipv4-addr` -* `ipv6-addr` -* `mac-addr` -* `mutex` -* `port` -* `process` -* `software` -* `url` -* `user-account` -* `windows-registry-key` -* `x509-certificate` - -type: keyword - - - -example: `ipv4-addr` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-matched-atomic]] -<> - -a| Identifies the atomic indicator value that matched a local environment endpoint or network event. - -type: keyword - - - -example: `bad-domain.com` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-matched-field]] -<> - -a| Identifies the field of the atomic indicator that matched a local environment endpoint or network event. - -type: keyword - - - -example: `file.hash.sha256` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-matched-id]] -<> - -a| Identifies the _id of the indicator document enriching the event. - -type: keyword - - - -example: `ff93aee5-86a1-4a61-b0e6-0cdc313d01b5` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-matched-index]] -<> - -a| Identifies the _index of the indicator document enriching the event. - -type: keyword - - - -example: `filebeat-8.0.0-2021.05.23-000011` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-matched-occurred]] -<> - -a| Indicates when the indicator match was generated - -type: date - - - -example: `2021-10-05T17:00:58.326Z` - -| extended - -// =============================================================== - -| -[[field-threat-enrichments-matched-type]] -<> - -a| Identifies the type of match that caused the event to be enriched with the given indicator - -type: keyword - - - -example: `indicator_match_rule` - -| extended - -// =============================================================== - -| -[[field-threat-feed-dashboard-id]] -<> - -a| The saved object ID of the dashboard belonging to the threat feed for displaying dashboard links to threat feeds in Kibana. - -type: keyword - - - -example: `5ba16340-72e6-11eb-a3e3-b3cc7c78a70f` - -| extended - -// =============================================================== - -| -[[field-threat-feed-description]] -<> - -a| Description of the threat feed in a UI friendly format. - -type: keyword - - - -example: `Threat feed from the AlienVault Open Threat eXchange network.` - -| extended - -// =============================================================== - -| -[[field-threat-feed-name]] -<> - -a| The name of the threat feed in UI friendly format. - -type: keyword - - - -example: `AlienVault OTX` - -| extended - -// =============================================================== - -| -[[field-threat-feed-reference]] -<> - -a| Reference information for the threat feed in a UI friendly format. - -type: keyword - - - -example: `https://otx.alienvault.com` - -| extended - -// =============================================================== - -| -[[field-threat-framework]] -<> - -a| Name of the threat framework used to further categorize and classify the tactic and technique of the reported threat. Framework classification can be provided by detecting systems, evaluated at ingest time, or retrospectively tagged to events. - -type: keyword - - - -example: `MITRE ATT&CK` - -| extended - -// =============================================================== - -| -[[field-threat-group-alias]] -<> - -a| The alias(es) of the group for a set of related intrusion activity that are tracked by a common name in the security community. - -While not required, you can use a MITRE ATT&CK® group alias(es). - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `[ "Magecart Group 6" ]` - -| extended - -// =============================================================== - -| -[[field-threat-group-id]] -<> - -a| The id of the group for a set of related intrusion activity that are tracked by a common name in the security community. - -While not required, you can use a MITRE ATT&CK® group id. - -type: keyword - - - -example: `G0037` - -| extended - -// =============================================================== - -| -[[field-threat-group-name]] -<> - -a| The name of the group for a set of related intrusion activity that are tracked by a common name in the security community. - -While not required, you can use a MITRE ATT&CK® group name. - -type: keyword - - - -example: `FIN6` - -| extended - -// =============================================================== - -| -[[field-threat-group-reference]] -<> - -a| The reference URL of the group for a set of related intrusion activity that are tracked by a common name in the security community. - -While not required, you can use a MITRE ATT&CK® group reference URL. - -type: keyword - - - -example: `https://attack.mitre.org/groups/G0037/` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-confidence]] -<> - -a| Identifies the vendor-neutral confidence rating using the None/Low/Medium/High scale defined in Appendix A of the STIX 2.1 framework. Vendor-specific confidence scales may be added as custom fields. - -Expected values for this field: - -* `Not Specified` -* `None` -* `Low` -* `Medium` -* `High` - -type: keyword - - - -example: `Medium` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-description]] -<> - -a| Describes the type of action conducted by the threat. - -type: keyword - - - -example: `IP x.x.x.x was observed delivering the Angler EK.` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-email-address]] -<> - -a| Identifies a threat indicator as an email address (irrespective of direction). - -type: keyword - - - -example: `phish@example.com` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-first-seen]] -<> - -a| The date and time when intelligence source first reported sighting this indicator. - -type: date - - - -example: `2020-11-05T17:25:47.000Z` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-id]] -<> - -a| The ID of the indicator used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. This field can have multiple values to allow for the identification of the same indicator across systems that use different ID formats. - -While not required, a common approach is to use a STIX 2.x indicator ID. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `[indicator--d7008e06-ab86-415a-9803-3c81ce2d3c37]` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-ip]] -<> - -a| Identifies a threat indicator as an IP address (irrespective of direction). - -type: ip - - - -example: `1.2.3.4` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-last-seen]] -<> - -a| The date and time when intelligence source last reported sighting this indicator. - -type: date - - - -example: `2020-11-05T17:25:47.000Z` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-marking-tlp]] -<> - -a| Traffic Light Protocol sharing markings. - -Expected values for this field: - -* `WHITE` -* `CLEAR` -* `GREEN` -* `AMBER` -* `AMBER+STRICT` -* `RED` - -type: keyword - - - -example: `CLEAR` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-marking-tlp-version]] -<> - -a| Traffic Light Protocol version. - -type: keyword - - - -example: `2.0` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-modified-at]] -<> - -a| The date and time when intelligence source last modified information for this indicator. - -type: date - - - -example: `2020-11-05T17:25:47.000Z` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-name]] -<> - -a| The display name indicator in an UI friendly format - -URL, IP address, email address, registry key, port number, hash value, or other relevant name can serve as the display name. - -type: keyword - - - -example: `5.2.75.227` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-port]] -<> - -a| Identifies a threat indicator as a port number (irrespective of direction). - -type: long - - - -example: `443` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-provider]] -<> - -a| The name of the indicator's provider. - -type: keyword - - - -example: `lrz_urlhaus` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-reference]] -<> - -a| Reference URL linking to additional information about this indicator. - -type: keyword - - - -example: `https://system.example.com/indicator/0001234` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-scanner-stats]] -<> - -a| Count of AV/EDR vendors that successfully detected malicious file or URL. - -type: long - - - -example: `4` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-sightings]] -<> - -a| Number of times this indicator was observed conducting threat activity. - -type: long - - - -example: `20` - -| extended - -// =============================================================== - -| -[[field-threat-indicator-type]] -<> - -a| Type of indicator as represented by Cyber Observable in STIX 2.0. - -Expected values for this field: - -* `autonomous-system` -* `artifact` -* `directory` -* `domain-name` -* `email-addr` -* `file` -* `ipv4-addr` -* `ipv6-addr` -* `mac-addr` -* `mutex` -* `port` -* `process` -* `software` -* `url` -* `user-account` -* `windows-registry-key` -* `x509-certificate` - -type: keyword - - - -example: `ipv4-addr` - -| extended - -// =============================================================== - -| -[[field-threat-software-alias]] -<> - -a| The alias(es) of the software for a set of related intrusion activity that are tracked by a common name in the security community. - -While not required, you can use a MITRE ATT&CK® associated software description. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `[ "X-Agent" ]` - -| extended - -// =============================================================== - -| -[[field-threat-software-id]] -<> - -a| The id of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. - -While not required, you can use a MITRE ATT&CK® software id. - -type: keyword - - - -example: `S0552` - -| extended - -// =============================================================== - -| -[[field-threat-software-name]] -<> - -a| The name of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. - -While not required, you can use a MITRE ATT&CK® software name. - -type: keyword - - - -example: `AdFind` - -| extended - -// =============================================================== - -| -[[field-threat-software-platforms]] -<> - -a| The platforms of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. - -While not required, you can use MITRE ATT&CK® software platform values. - -Expected values for this field: - -* `AWS` -* `Azure` -* `Azure AD` -* `GCP` -* `Linux` -* `macOS` -* `Network` -* `Office 365` -* `SaaS` -* `Windows` - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `[ "Windows" ]` - -| extended - -// =============================================================== - -| -[[field-threat-software-reference]] -<> - -a| The reference URL of the software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. - -While not required, you can use a MITRE ATT&CK® software reference URL. - -type: keyword - - - -example: `https://attack.mitre.org/software/S0552/` - -| extended - -// =============================================================== - -| -[[field-threat-software-type]] -<> - -a| The type of software used by this threat to conduct behavior commonly modeled using MITRE ATT&CK®. - -While not required, you can use a MITRE ATT&CK® software type. - -Expected values for this field: - -* `Malware` -* `Tool` - -type: keyword - - - -example: `Tool` - -| extended - -// =============================================================== - -| -[[field-threat-tactic-id]] -<> - -a| The id of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ ) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `TA0002` - -| extended - -// =============================================================== - -| -[[field-threat-tactic-name]] -<> - -a| Name of the type of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `Execution` - -| extended - -// =============================================================== - -| -[[field-threat-tactic-reference]] -<> - -a| The reference url of tactic used by this threat. You can use a MITRE ATT&CK® tactic, for example. (ex. https://attack.mitre.org/tactics/TA0002/ ) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `https://attack.mitre.org/tactics/TA0002/` - -| extended - -// =============================================================== - -| -[[field-threat-technique-id]] -<> - -a| The id of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `T1059` - -| extended - -// =============================================================== - -| -[[field-threat-technique-name]] -<> - -a| The name of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/) - -type: keyword - -Multi-fields: - -* threat.technique.name.text (type: match_only_text) - - - - -Note: this field should contain an array of values. - - - -example: `Command and Scripting Interpreter` - -| extended - -// =============================================================== - -| -[[field-threat-technique-reference]] -<> - -a| The reference url of technique used by this threat. You can use a MITRE ATT&CK® technique, for example. (ex. https://attack.mitre.org/techniques/T1059/) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `https://attack.mitre.org/techniques/T1059/` - -| extended - -// =============================================================== - -| -[[field-threat-technique-subtechnique-id]] -<> - -a| The full id of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `T1059.001` - -| extended - -// =============================================================== - -| -[[field-threat-technique-subtechnique-name]] -<> - -a| The name of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/) - -type: keyword - -Multi-fields: - -* threat.technique.subtechnique.name.text (type: match_only_text) - - - - -Note: this field should contain an array of values. - - - -example: `PowerShell` - -| extended - -// =============================================================== - -| -[[field-threat-technique-subtechnique-reference]] -<> - -a| The reference url of subtechnique used by this threat. You can use a MITRE ATT&CK® subtechnique, for example. (ex. https://attack.mitre.org/techniques/T1059/001/) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `https://attack.mitre.org/techniques/T1059/001/` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-threat-nestings]] -[discrete] -===== Field sets that can be nested under Threat - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `threat.enrichments.indicator.as.*` -| <> -| Fields describing an Autonomous System (Internet routing prefix). - -// =============================================================== - - -| `threat.enrichments.indicator.file.*` -| <> -| Fields describing files. - -// =============================================================== - - -| `threat.enrichments.indicator.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `threat.enrichments.indicator.registry.*` -| <> -| Fields related to Windows Registry operations. - -// =============================================================== - - -| `threat.enrichments.indicator.url.*` -| <> -| Fields that let you store URLs in various forms. - -// =============================================================== - - -| `threat.enrichments.indicator.x509.*` -| <> -| These fields contain x509 certificate metadata. - -// =============================================================== - - -| `threat.indicator.as.*` -| <> -| Fields describing an Autonomous System (Internet routing prefix). - -// =============================================================== - - -| `threat.indicator.file.*` -| <> -| Fields describing files. - -// =============================================================== - - -| `threat.indicator.geo.*` -| <> -| Fields describing a location. - -// =============================================================== - - -| `threat.indicator.registry.*` -| <> -| Fields related to Windows Registry operations. - -// =============================================================== - - -| `threat.indicator.url.*` -| <> -| Fields that let you store URLs in various forms. - -// =============================================================== - - -| `threat.indicator.x509.*` -| <> -| These fields contain x509 certificate metadata. - -// =============================================================== - - -|===== - - - -[discrete] -==== Threat Field Usage - -For usage and examples of the threat fields, please see the <> section. - -include::usage/threat.asciidoc[] - - -[[ecs-tls]] -=== TLS Fields - -Fields related to a TLS connection. These fields focus on the TLS protocol itself and intentionally avoids in-depth analysis of the related x.509 certificate files. - -[discrete] -==== TLS Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-tls-cipher]] -<> - -a| String indicating the cipher used during the current connection. - -type: keyword - - - -example: `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-cipher[tls.cipher] - -| extended - -// =============================================================== - -| -[[field-tls-client-certificate]] -<> - -a| PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of `client.certificate_chain` since this value also exists in that list. - -type: keyword - - - -example: `MII...` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-certificate[tls.client.certificate] - -| extended - -// =============================================================== - -| -[[field-tls-client-certificate-chain]] -<> - -a| Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of `client.certificate` since that value should be the first certificate in the chain. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["MII...", "MII..."]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-certificate-chain[tls.client.certificate_chain] - -| extended - -// =============================================================== - -| -[[field-tls-client-hash-md5]] -<> - -a| Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash. - -type: keyword - - - -example: `0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-hash-md5[tls.client.hash.md5] - -| extended - -// =============================================================== - -| -[[field-tls-client-hash-sha1]] -<> - -a| Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash. - -type: keyword - - - -example: `9E393D93138888D288266C2D915214D1D1CCEB2A` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-hash-sha1[tls.client.hash.sha1] - -| extended - -// =============================================================== - -| -[[field-tls-client-hash-sha256]] -<> - -a| Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash. - -type: keyword - - - -example: `0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-hash-sha256[tls.client.hash.sha256] - -| extended - -// =============================================================== - -| -[[field-tls-client-issuer]] -<> - -a| Distinguished name of subject of the issuer of the x.509 certificate presented by the client. - -type: keyword - - - -example: `CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-issuer[tls.client.issuer] - -| extended - -// =============================================================== - -| -[[field-tls-client-ja3]] -<> - -a| A hash that identifies clients based on how they perform an SSL/TLS handshake. - -type: keyword - - - -example: `d4e5b18d6b55c71272893221c96ba240` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-ja3[tls.client.ja3] - -| extended - -// =============================================================== - -| -[[field-tls-client-not-after]] -<> - -a| Date/Time indicating when client certificate is no longer considered valid. - -type: date - - - -example: `2021-01-01T00:00:00.000Z` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-not-after[tls.client.not_after] - -| extended - -// =============================================================== - -| -[[field-tls-client-not-before]] -<> - -a| Date/Time indicating when client certificate is first considered valid. - -type: date - - - -example: `1970-01-01T00:00:00.000Z` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-not-before[tls.client.not_before] - -| extended - -// =============================================================== - -| -[[field-tls-client-server-name]] -<> - -a| Also called an SNI, this tells the server which hostname to which the client is attempting to connect to. When this value is available, it should get copied to `destination.domain`. - -type: keyword - - - -example: `www.elastic.co` - -| extended - -// =============================================================== - -| -[[field-tls-client-subject]] -<> - -a| Distinguished name of subject of the x.509 certificate presented by the client. - -type: keyword - - - -example: `CN=myclient, OU=Documentation Team, DC=example, DC=com` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-subject[tls.client.subject] - -| extended - -// =============================================================== - -| -[[field-tls-client-supported-ciphers]] -<> - -a| Array of ciphers offered by the client during the client hello. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-supported-ciphers[tls.client.supported_ciphers] - -| extended - -// =============================================================== - -| -[[field-tls-curve]] -<> - -a| String indicating the curve used for the given cipher, when applicable. - -type: keyword - - - -example: `secp256r1` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-curve[tls.curve] - -| extended - -// =============================================================== - -| -[[field-tls-established]] -<> - -a| Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel. - -type: boolean - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-established[tls.established] - -| extended - -// =============================================================== - -| -[[field-tls-next-protocol]] -<> - -a| String indicating the protocol being tunneled. Per the values in the IANA registry (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), this string should be lower case. - -type: keyword - - - -example: `http/1.1` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-next-protocol[tls.next_protocol] - -| extended - -// =============================================================== - -| -[[field-tls-resumed]] -<> - -a| Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation. - -type: boolean - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-resumed[tls.resumed] - -| extended - -// =============================================================== - -| -[[field-tls-server-certificate]] -<> - -a| PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of `server.certificate_chain` since this value also exists in that list. - -type: keyword - - - -example: `MII...` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-certificate[tls.server.certificate] - -| extended - -// =============================================================== - -| -[[field-tls-server-certificate-chain]] -<> - -a| Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of `server.certificate` since that value should be the first certificate in the chain. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["MII...", "MII..."]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-certificate-chain[tls.server.certificate_chain] - -| extended - -// =============================================================== - -| -[[field-tls-server-hash-md5]] -<> - -a| Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash. - -type: keyword - - - -example: `0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-hash-md5[tls.server.hash.md5] - -| extended - -// =============================================================== - -| -[[field-tls-server-hash-sha1]] -<> - -a| Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash. - -type: keyword - - - -example: `9E393D93138888D288266C2D915214D1D1CCEB2A` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-hash-sha1[tls.server.hash.sha1] - -| extended - -// =============================================================== - -| -[[field-tls-server-hash-sha256]] -<> - -a| Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash. - -type: keyword - - - -example: `0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-hash-sha256[tls.server.hash.sha256] - -| extended - -// =============================================================== - -| -[[field-tls-server-issuer]] -<> - -a| Subject of the issuer of the x.509 certificate presented by the server. - -type: keyword - - - -example: `CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-issuer[tls.server.issuer] - -| extended - -// =============================================================== - -| -[[field-tls-server-ja3s]] -<> - -a| A hash that identifies servers based on how they perform an SSL/TLS handshake. - -type: keyword - - - -example: `394441ab65754e2207b1e1b457b3641d` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-ja3s[tls.server.ja3s] - -| extended - -// =============================================================== - -| -[[field-tls-server-not-after]] -<> - -a| Timestamp indicating when server certificate is no longer considered valid. - -type: date - - - -example: `2021-01-01T00:00:00.000Z` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-not-after[tls.server.not_after] - -| extended - -// =============================================================== - -| -[[field-tls-server-not-before]] -<> - -a| Timestamp indicating when server certificate is first considered valid. - -type: date - - - -example: `1970-01-01T00:00:00.000Z` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-not-before[tls.server.not_before] - -| extended - -// =============================================================== - -| -[[field-tls-server-subject]] -<> - -a| Subject of the x.509 certificate presented by the server. - -type: keyword - - - -example: `CN=www.example.com, OU=Infrastructure Team, DC=example, DC=com` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-subject[tls.server.subject] - -| extended - -// =============================================================== - -| -[[field-tls-version]] -<> - -a| Numeric part of the version parsed from the original string. - -type: keyword - - - -example: `1.2` - -| extended - -// =============================================================== - -| -[[field-tls-version-protocol]] -<> - -a| Normalized lowercase protocol name parsed from original string. - -type: keyword - - - -example: `tls` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-tls-nestings]] -[discrete] -===== Field sets that can be nested under TLS - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `tls.client.x509.*` -| <> -| These fields contain x509 certificate metadata. - -// =============================================================== - - -| `tls.server.x509.*` -| <> -| These fields contain x509 certificate metadata. - -// =============================================================== - - -|===== - - -[[ecs-tracing]] -=== Tracing Fields - -Distributed tracing makes it possible to analyze performance throughout a microservice architecture all in one view. This is accomplished by tracing all of the requests - from the initial web request in the front-end service - to queries made through multiple back-end services. - -Unlike most field sets in ECS, the tracing fields are *not* nested under the field set name. In other words, the correct field name is `trace.id`, not `tracing.trace.id`, and so on. - -[discrete] -==== Tracing Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-span-id]] -<> - -a| Unique identifier of the span within the scope of its trace. - -A span represents an operation within a transaction, such as a request to another service, or a database query. - -type: keyword - - - -example: `3ff9a8981b7ccd5a` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+span_id+%22&type=code[span_id] - -| extended - -// =============================================================== - -| -[[field-trace-id]] -<> - -a| Unique identifier of the trace. - -A trace groups multiple events like transactions that belong together. For example, a user request handled by multiple inter-connected services. - -type: keyword - - - -example: `4bf92f3577b34da6a3ce929d0e0e4736` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+trace_id+%22&type=code[trace_id] - -| extended - -// =============================================================== - -| -[[field-transaction-id]] -<> - -a| Unique identifier of the transaction within the scope of its trace. - -A transaction is the highest level of work measured within a service, such as a request to a server. - -type: keyword - - - -example: `00f067aa0ba902b7` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] Not applicable. - -| extended - -// =============================================================== - -|===== - - -[[ecs-url]] -=== URL Fields - -URL fields provide support for complete or partial URLs, and supports the breaking down into scheme, domain, path, and so on. - -[discrete] -==== URL Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-url-domain]] -<> - -a| Domain of the url, such as "www.elastic.co". - -In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the `domain` field. - -If the URL contains a literal IPv6 address enclosed by `[` and `]` (IETF RFC 2732), the `[` and `]` characters should also be captured in the `domain` field. - -type: keyword - - - -example: `www.elastic.co` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-domain[url.domain] - -| extended - -// =============================================================== - -| -[[field-url-extension]] -<> - -a| The field contains the file extension from the original request url, excluding the leading dot. - -The file extension is only set if it exists, as not every url has a file extension. - -The leading period must not be included. For example, the value must be "png", not ".png". - -Note that when the file name has multiple extensions (example.tar.gz), only the last one should be captured ("gz", not "tar.gz"). - -type: keyword - - - -example: `png` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-extension[url.extension] - -| extended - -// =============================================================== - -| -[[field-url-fragment]] -<> - -a| Portion of the url after the `#`, such as "top". - -The `#` is not part of the fragment. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-fragment[url.fragment] - -| extended - -// =============================================================== - -| -[[field-url-full]] -<> - -a| If full URLs are important to your use case, they should be stored in `url.full`, whether this field is reconstructed or present in the event source. - -type: wildcard - -Multi-fields: - -* url.full.text (type: match_only_text) - - - - - -example: `https://www.elastic.co:443/search?q=elasticsearch#top` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-full[url.full] - -| extended - -// =============================================================== - -| -[[field-url-original]] -<> - -a| Unmodified original url as seen in the event source. - -Note that in network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. - -This field is meant to represent the URL as it was observed, complete or not. - -type: wildcard - -Multi-fields: - -* url.original.text (type: match_only_text) - - - - - -example: `https://www.elastic.co:443/search?q=elasticsearch#top or /search?q=elasticsearch` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-original[url.original] - -| extended - -// =============================================================== - -| -[[field-url-password]] -<> - -a| Password of the request. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-url-path]] -<> - -a| Path of the request, such as "/search". - -type: wildcard - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-path[url.path] - -| extended - -// =============================================================== - -| -[[field-url-port]] -<> - -a| Port of the request, such as 443. - -type: long - - - -example: `443` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-port[url.port] - -| extended - -// =============================================================== - -| -[[field-url-query]] -<> - -a| The query field describes the query string of the request, such as "q=elasticsearch". - -The `?` is excluded from the query string. If a URL contains no `?`, there is no query field. If there is a `?` but no query, the query field exists with an empty string. The `exists` query can be used to differentiate between the two cases. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-query[url.query] - -| extended - -// =============================================================== - -| -[[field-url-registered-domain]] -<> - -a| The highest registered url domain, stripped of the subdomain. - -For example, the registered domain for "foo.example.com" is "example.com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last two labels will not work well for TLDs such as "co.uk". - -type: keyword - - - -example: `example.com` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-registered-domain[url.registered_domain] - -| extended - -// =============================================================== - -| -[[field-url-scheme]] -<> - -a| Scheme of the request, such as "https". - -Note: The `:` is not part of the scheme. - -type: keyword - - - -example: `https` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-scheme[url.scheme] - -| extended - -// =============================================================== - -| -[[field-url-subdomain]] -<> - -a| The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain. - -For example the subdomain portion of "www.east.mydomain.co.uk" is "east". If the domain has multiple levels of subdomain, such as "sub2.sub1.example.com", the subdomain field should contain "sub2.sub1", with no trailing period. - -type: keyword - - - -example: `east` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-subdomain[url.subdomain] - -| extended - -// =============================================================== - -| -[[field-url-top-level-domain]] -<> - -a| The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is "com". - -This value can be determined precisely with a list like the public suffix list (https://publicsuffix.org). Trying to approximate this by simply taking the last label will not work well for effective TLDs such as "co.uk". - -type: keyword - - - -example: `co.uk` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-top-level-domain[url.top_level_domain] - -| extended - -// =============================================================== - -| -[[field-url-username]] -<> - -a| Username of the request. - -type: keyword - - - - - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `url` fields are expected to be nested at: - - -* `threat.enrichments.indicator.url` - -* `threat.indicator.url` - - -Note also that the `url` fields may be used directly at the root of the events. - - -[[ecs-user]] -=== User Fields - -The user fields describe information about the user that is relevant to the event. - -Fields can have one entry or multiple entries. If a user has more than one id, provide an array that includes all of them. - -[discrete] -==== User Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-user-domain]] -<> - -a| Name of the directory the user is a member of. - -For example, an LDAP or Active Directory domain name. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-user-email]] -<> - -a| User email address. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-email[user.email] - -| extended - -// =============================================================== - -| -[[field-user-full-name]] -<> - -a| User's full name, if available. - -type: keyword - -Multi-fields: - -* user.full_name.text (type: match_only_text) - - - - - -example: `Albert Einstein` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-full-name[user.full_name] - -| extended - -// =============================================================== - -| -[[field-user-hash]] -<> - -a| Unique user hash to correlate information for a user in anonymized form. - -Useful if `user.id` or `user.name` contain confidential information and cannot be used. - -type: keyword - - - - - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-hash[user.hash] - -| extended - -// =============================================================== - -| -[[field-user-id]] -<> - -a| Unique identifier of the user. - -type: keyword - - - -example: `S-1-5-21-202424912787-2692429404-2351956786-1000` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-id[user.id] - -| core - -// =============================================================== - -| -[[field-user-name]] -<> - -a| Short name or login of the user. - -type: keyword - -Multi-fields: - -* user.name.text (type: match_only_text) - - - - - -example: `a.einstein` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-name[user.name] - -| core - -// =============================================================== - -| -[[field-user-roles]] -<> - -a| Array of user roles at the time of the event. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["kibana_admin", "reporting_user"]` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-roles[user.roles] - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `user` fields are expected to be nested at: - - -* `client.user` - -* `destination.user` - -* `process.attested_user` - -* `process.real_user` - -* `process.saved_user` - -* `process.user` - -* `server.user` - -* `source.user` - -* `user.changes` - -* `user.effective` - -* `user.target` - - -Note also that the `user` fields may be used directly at the root of the events. - -[[ecs-user-nestings]] -[discrete] -===== Field sets that can be nested under User - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `user.changes.*` -| <> -| Captures changes made to a user. - -// =============================================================== - - -| `user.effective.*` -| <> -| User whose privileges were assumed. - -// =============================================================== - - -| `user.group.*` -| <> -| User's group relevant to the event. - -// =============================================================== - - -| `user.risk.*` -| <> -| Fields for describing risk score and level. - -// =============================================================== - - -| `user.target.*` -| <> -| Targeted user of action taken. - -// =============================================================== - - -|===== - - - -[discrete] -==== User Field Usage - -For usage and examples of the user fields, please see the <> section. - -include::usage/user.asciidoc[] - - -[[ecs-user_agent]] -=== User agent Fields - -The user_agent fields normally come from a browser request. - -They often show up in web service logs coming from the parsed user agent string. - -[discrete] -==== User agent Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-user-agent-device-name]] -<> - -a| Name of the device. - -type: keyword - - - -example: `iPhone` - -| extended - -// =============================================================== - -| -[[field-user-agent-name]] -<> - -a| Name of the user agent. - -type: keyword - - - -example: `Safari` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user_agent/#user-agent-name[user_agent.name] - -| extended - -// =============================================================== - -| -[[field-user-agent-original]] -<> - -a| Unparsed user_agent string. - -type: keyword - -Multi-fields: - -* user_agent.original.text (type: match_only_text) - - - - - -example: `Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user_agent/#user-agent-original[user_agent.original] - -| extended - -// =============================================================== - -| -[[field-user-agent-version]] -<> - -a| Version of the user agent. - -type: keyword - - - -example: `12.0` - -image:https://img.shields.io/badge/OpenTelemetry-4a5ca6?style=flat&logo=opentelemetry[OTel Badge] image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] https://opentelemetry.io/docs/specs/semconv/attributes-registry/user_agent/#user-agent-version[user_agent.version] - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -[[ecs-user_agent-nestings]] -[discrete] -===== Field sets that can be nested under User agent - -[options="header"] -|===== -| Location | Field Set | Description - -// =============================================================== - - -| `user_agent.os.*` -| <> -| OS fields contain information about the operating system. - -// =============================================================== - - -|===== - - -[[ecs-vlan]] -=== VLAN Fields - -The VLAN fields are used to identify 802.1q tag(s) of a packet, as well as ingress and egress VLAN associations of an observer in relation to a specific packet or connection. - -Network.vlan fields are used to record a single VLAN tag, or the outer tag in the case of q-in-q encapsulations, for a packet or connection as observed, typically provided by a network sensor (e.g. Zeek, Wireshark) passively reporting on traffic. - -Network.inner VLAN fields are used to report inner q-in-q 802.1q tags (multiple 802.1q encapsulations) as observed, typically provided by a network sensor (e.g. Zeek, Wireshark) passively reporting on traffic. Network.inner VLAN fields should only be used in addition to network.vlan fields to indicate q-in-q tagging. - -Observer.ingress and observer.egress VLAN values are used to record observer specific information when observer events contain discrete ingress and egress VLAN information, typically provided by firewalls, routers, or load balancers. - -[discrete] -==== VLAN Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-vlan-id]] -<> - -a| VLAN ID as reported by the observer. - -type: keyword - - - -example: `10` - -| extended - -// =============================================================== - -| -[[field-vlan-name]] -<> - -a| Optional VLAN name as reported by the observer. - -type: keyword - - - -example: `outside` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `vlan` fields are expected to be nested at: - - -* `network.inner.vlan` - -* `network.vlan` - -* `observer.egress.vlan` - -* `observer.ingress.vlan` - - -Note also that the `vlan` fields are not expected to be used directly at the root of the events. -[[ecs-volume]] -=== Volume Fields - -Fields related to storage volume details. - -[discrete] -==== Volume Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-volume-bus-type]] -<> - -a| Bus type of the device, such as `Nvme`, `Usb`, or `FileBackedVirtual`. - -type: keyword - - - -example: `FileBackedVirtual` - -| extended - -// =============================================================== - -| -[[field-volume-default-access]] -<> - -a| Describes the default access(es) of the volume. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-volume-device-name]] -<> - -a| Full path of the volume device. - -Only populate this field for POSIX system volumes. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-volume-device-type]] -<> - -a| Volume device type. - -The most frequently seen volume device types are `Disk File System` and `CD-ROM File System`. - -type: keyword - - - -example: `CD-ROM File System` - -| extended - -// =============================================================== - -| -[[field-volume-dos-name]] -<> - -a| The MS-DOS name of a device. - -DOS device name is in the format of driver letters, such as `C:`. The field is relevant to Windows systems only. - -type: keyword - - - -example: `E:` - -| extended - -// =============================================================== - -| -[[field-volume-file-system-type]] -<> - -a| Volume device file system type. - -The most common volume file system types are `NTFS` and `UDF`. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-volume-mount-name]] -<> - -a| Mount name of the volume device. - -Only populate this field for POSIX system volumes. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-volume-nt-name]] -<> - -a| The NT device name. - -NT device name uses a format of `\Device\HarddiskVolume2`. The field is relevant to Windows systems only. - -type: keyword - - - -example: `\Device\Cdrom1` - -| extended - -// =============================================================== - -| -[[field-volume-product-id]] -<> - -a| ProductID of the device. - -The vendor provides the ProductID for the volume, if any. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-volume-product-name]] -<> - -a| Product name of the volume. - -The volume device vendor provides this value. - -type: keyword - - - -example: `Virtual DVD-ROM` - -| extended - -// =============================================================== - -| -[[field-volume-removable]] -<> - -a| Indicates if the volume is removable. - -type: boolean - - - - - -| extended - -// =============================================================== - -| -[[field-volume-serial-number]] -<> - -a| Serial number identifier for the volume device. - -The serial number is provided by the vendor of the device, if any. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-volume-size]] -<> - -a| Size of the volume device in bytes. - -type: long - - - - - -| extended - -// =============================================================== - -| -[[field-volume-vendor-id]] -<> - -a| VendorID of the volume device. - -The volume device vendor provides this value. - -type: keyword - - - - - -| extended - -// =============================================================== - -| -[[field-volume-vendor-name]] -<> - -a| Vendor name of the volume device. - -The value is provided by the vendor of the device. - -type: keyword - - - -example: `Msft` - -| extended - -// =============================================================== - -| -[[field-volume-writable]] -<> - -a| Indicates if the volume is writable. - -type: boolean - - - - - -| extended - -// =============================================================== - -|===== - - -[[ecs-vulnerability]] -=== Vulnerability Fields - -The vulnerability fields describe information about a vulnerability that is relevant to an event. - -[discrete] -==== Vulnerability Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-vulnerability-category]] -<> - -a| The type of system or architecture that the vulnerability affects. These may be platform-specific (for example, Debian or SUSE) or general (for example, Database or Firewall). For example (https://qualysguard.qualys.com/qwebhelp/fo_portal/knowledgebase/vulnerability_categories.htm) - -This field must be an array. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `["Firewall"]` - -| extended - -// =============================================================== - -| -[[field-vulnerability-classification]] -<> - -a| The classification of the vulnerability scoring system. For example (https://www.first.org/cvss/) - -type: keyword - - - -example: `CVSS` - -| extended - -// =============================================================== - -| -[[field-vulnerability-description]] -<> - -a| The description of the vulnerability that provides additional context of the vulnerability. For example (https://cve.mitre.org/about/faqs.html#cve_entry_descriptions_created) - -type: keyword - -Multi-fields: - -* vulnerability.description.text (type: match_only_text) - - - - - -example: `In macOS before 2.12.6, there is a vulnerability in the RPC...` - -| extended - -// =============================================================== - -| -[[field-vulnerability-enumeration]] -<> - -a| The type of identifier used for this vulnerability. For example (https://cve.mitre.org/about/) - -type: keyword - - - -example: `CVE` - -| extended - -// =============================================================== - -| -[[field-vulnerability-id]] -<> - -a| The identification (ID) is the number portion of a vulnerability entry. It includes a unique identification number for the vulnerability. For example (https://cve.mitre.org/about/faqs.html#what_is_cve_id) - -type: keyword - - - -example: `CVE-2019-00001` - -| extended - -// =============================================================== - -| -[[field-vulnerability-reference]] -<> - -a| A resource that provides additional information, context, and mitigations for the identified vulnerability. - -type: keyword - - - -example: `https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6111` - -| extended - -// =============================================================== - -| -[[field-vulnerability-report-id]] -<> - -a| The report or scan identification number. - -type: keyword - - - -example: `20191018.0001` - -| extended - -// =============================================================== - -| -[[field-vulnerability-scanner-vendor]] -<> - -a| The name of the vulnerability scanner vendor. - -type: keyword - - - -example: `Tenable` - -| extended - -// =============================================================== - -| -[[field-vulnerability-score-base]] -<> - -a| Scores can range from 0.0 to 10.0, with 10.0 being the most severe. - -Base scores cover an assessment for exploitability metrics (attack vector, complexity, privileges, and user interaction), impact metrics (confidentiality, integrity, and availability), and scope. For example (https://www.first.org/cvss/specification-document) - -type: float - - - -example: `5.5` - -| extended - -// =============================================================== - -| -[[field-vulnerability-score-environmental]] -<> - -a| Scores can range from 0.0 to 10.0, with 10.0 being the most severe. - -Environmental scores cover an assessment for any modified Base metrics, confidentiality, integrity, and availability requirements. For example (https://www.first.org/cvss/specification-document) - -type: float - - - -example: `5.5` - -| extended - -// =============================================================== - -| -[[field-vulnerability-score-temporal]] -<> - -a| Scores can range from 0.0 to 10.0, with 10.0 being the most severe. - -Temporal scores cover an assessment for code maturity, remediation level, and confidence. For example (https://www.first.org/cvss/specification-document) - -type: float - - - - - -| extended - -// =============================================================== - -| -[[field-vulnerability-score-version]] -<> - -a| The National Vulnerability Database (NVD) provides qualitative severity rankings of "Low", "Medium", and "High" for CVSS v2.0 base score ranges in addition to the severity ratings for CVSS v3.0 as they are defined in the CVSS v3.0 specification. - -CVSS is owned and managed by FIRST.Org, Inc. (FIRST), a US-based non-profit organization, whose mission is to help computer security incident response teams across the world. For example (https://nvd.nist.gov/vuln-metrics/cvss) - -type: keyword - - - -example: `2.0` - -| extended - -// =============================================================== - -| -[[field-vulnerability-severity]] -<> - -a| The severity of the vulnerability can help with metrics and internal prioritization regarding remediation. For example (https://nvd.nist.gov/vuln-metrics/cvss) - -type: keyword - - - -example: `Critical` - -| extended - -// =============================================================== - -|===== - - -[[ecs-x509]] -=== x509 Certificate Fields - -This implements the common core fields for x509 certificates. This information is likely logged with TLS sessions, digital signatures found in executable binaries, S/MIME information in email bodies, or analysis of files on disk. - -When the certificate relates to a file, use the fields at `file.x509`. When hashes of the DER-encoded certificate are available, the `hash` data set should be populated as well (e.g. `file.hash.sha256`). - -Events that contain certificate information about network connections, should use the x509 fields under the relevant TLS fields: `tls.server.x509` and/or `tls.client.x509`. - -[discrete] -==== x509 Certificate Field Details - -[options="header"] -|===== -| Field | Description | Level - -// =============================================================== - -| -[[field-x509-alternative-names]] -<> - -a| List of subject alternative names (SAN). Name types vary by certificate authority and certificate type but commonly contain IP addresses, DNS names (and wildcards), and email addresses. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `*.elastic.co` - -| extended - -// =============================================================== - -| -[[field-x509-issuer-common-name]] -<> - -a| List of common name (CN) of issuing certificate authority. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `Example SHA2 High Assurance Server CA` - -| extended - -// =============================================================== - -| -[[field-x509-issuer-country]] -<> - -a| List of country \(C) codes - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `US` - -| extended - -// =============================================================== - -| -[[field-x509-issuer-distinguished-name]] -<> - -a| Distinguished name (DN) of issuing certificate authority. - -type: keyword - - - -example: `C=US, O=Example Inc, OU=www.example.com, CN=Example SHA2 High Assurance Server CA` - -| extended - -// =============================================================== - -| -[[field-x509-issuer-locality]] -<> - -a| List of locality names (L) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `Mountain View` - -| extended - -// =============================================================== - -| -[[field-x509-issuer-organization]] -<> - -a| List of organizations (O) of issuing certificate authority. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `Example Inc` - -| extended - -// =============================================================== - -| -[[field-x509-issuer-organizational-unit]] -<> - -a| List of organizational units (OU) of issuing certificate authority. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `www.example.com` - -| extended - -// =============================================================== - -| -[[field-x509-issuer-state-or-province]] -<> - -a| List of state or province names (ST, S, or P) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `California` - -| extended - -// =============================================================== - -| -[[field-x509-not-after]] -<> - -a| Time at which the certificate is no longer considered valid. - -type: date - - - -example: `2020-07-16T03:15:39Z` - -| extended - -// =============================================================== - -| -[[field-x509-not-before]] -<> - -a| Time at which the certificate is first considered valid. - -type: date - - - -example: `2019-08-16T01:40:25Z` - -| extended - -// =============================================================== - -| -[[field-x509-public-key-algorithm]] -<> - -a| Algorithm used to generate the public key. - -type: keyword - - - -example: `RSA` - -| extended - -// =============================================================== - -| -[[field-x509-public-key-curve]] -<> - -a| The curve used by the elliptic curve public key algorithm. This is algorithm specific. - -type: keyword - - - -example: `nistp521` - -| extended - -// =============================================================== - -| -[[field-x509-public-key-exponent]] -<> - -a| Exponent used to derive the public key. This is algorithm specific. - -type: long - - - -example: `65537` - -| extended - -// =============================================================== - -| -[[field-x509-public-key-size]] -<> - -a| The size of the public key space in bits. - -type: long - - - -example: `2048` - -| extended - -// =============================================================== - -| -[[field-x509-serial-number]] -<> - -a| Unique serial number issued by the certificate authority. For consistency, this must be encoded in base 16 and formatted without colons and uppercase characters. - -type: keyword - - - -example: `55FBB9C7DEBF09809D12CCAA` - -| extended - -// =============================================================== - -| -[[field-x509-signature-algorithm]] -<> - -a| Identifier for certificate signature algorithm. We recommend using names found in Go Lang Crypto library. See https://github.com/golang/go/blob/go1.14/src/crypto/x509/x509.go#L337-L353. - -type: keyword - - - -example: `SHA256-RSA` - -| extended - -// =============================================================== - -| -[[field-x509-subject-common-name]] -<> - -a| List of common names (CN) of subject. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `shared.global.example.net` - -| extended - -// =============================================================== - -| -[[field-x509-subject-country]] -<> - -a| List of country \(C) code - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `US` - -| extended - -// =============================================================== - -| -[[field-x509-subject-distinguished-name]] -<> - -a| Distinguished name (DN) of the certificate subject entity. - -type: keyword - - - -example: `C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net` - -| extended - -// =============================================================== - -| -[[field-x509-subject-locality]] -<> - -a| List of locality names (L) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `San Francisco` - -| extended - -// =============================================================== - -| -[[field-x509-subject-organization]] -<> - -a| List of organizations (O) of subject. - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `Example, Inc.` - -| extended - -// =============================================================== - -| -[[field-x509-subject-organizational-unit]] -<> - -a| List of organizational units (OU) of subject. - -type: keyword - - -Note: this field should contain an array of values. - - - - - -| extended - -// =============================================================== - -| -[[field-x509-subject-state-or-province]] -<> - -a| List of state or province names (ST, S, or P) - -type: keyword - - -Note: this field should contain an array of values. - - - -example: `California` - -| extended - -// =============================================================== - -| -[[field-x509-version-number]] -<> - -a| Version of x509 format. - -type: keyword - - - -example: `3` - -| extended - -// =============================================================== - -|===== - -[discrete] -==== Field Reuse - -The `x509` fields are expected to be nested at: - - -* `file.x509` - -* `threat.enrichments.indicator.x509` - -* `threat.indicator.x509` - -* `tls.client.x509` - -* `tls.server.x509` - - -Note also that the `x509` fields are not expected to be used directly at the root of the events. diff --git a/docs/fields/field-values-usage.asciidoc b/docs/fields/field-values-usage.asciidoc deleted file mode 100644 index 88905ba3bc..0000000000 --- a/docs/fields/field-values-usage.asciidoc +++ /dev/null @@ -1,175 +0,0 @@ -[[ecs-using-the-categorization-fields]] -=== Using the Categorization Fields - -The event categorization fields work together to identify and group similar events from multiple data sources. - -These general principles can help guide the categorization process: - -* Events from multiple data sources that are similar enough to be viewed or analyzed together, should fall into the same `event.category` field. -* Both `event.category` and `event.type` are arrays and may be populated with multiple allowed values, if the event can be reasonably classified into more than one category and/or type. -* `event.kind`, `event.category`, `event.type` and `event.outcome` all have allowed values. This is to normalize these fields. Values that aren't in the list of allowed values should not be used. -* Values of `event.outcome` are a very limited set to indicate success or failure. Domain-specific actions, such as deny and allow, that could be considered outcomes are not - captured in the `event.outcome` field, but rather in the `event.type` and/or `event.action` fields. -* Values of `event.category`, `event.type`, and `event.outcome` are consistent across all values of `event.kind`. -* When a specific event doesn't fit into any of the defined allowed categorization values, the field should be left empty. - -The following examples detail populating the categorization fields and provides some context for the classification decisions. - -[float] -==== Firewall blocking a network connection - -This event from a firewall describes a successfully blocked network connection: - -[source,json] ----- -... - { - "source": { - "address": "10.42.42.42", - "ip": "10.42.42.42", - "port": 38842 - }, - "destination": { - "address": "10.42.42.1", - "ip": "10.42.42.1", - "port": 443 - }, - "rule": { - "name": "wan-lan", - "id": "default" - }, - ... - "event": { - "kind": "event", <1> - "category": [ <2> - "network" - ], - "type": [ <3> - "connection", - "denied" - ], - "outcome": "success", <4> - "action": "dropped" <5> - } - } -... ----- - -<1> Classifying as an `event`. -<2> `event.category` categorizes this event as `network` activity. -<3> The event was both an attempted network `connection` and was `denied`. -<4> The blocking of this connection is expected. The outcome is a `success` from the perspective of the firewall emitting the event. -<5> The firewall classifies this denied connection as `dropped`, and this value is captured in `event.action`. - -A "denied" network connection could fall under different action values: "blocked", "dropped", "quarantined", etc. The `event.action` field captures the action taken as described by the source, and populating `event.type:denied` provides an independent, normalized value. - -A single query will return all denied network connections which have been normalized with the same categorization values: - -[source,sh] ----- -event.category:network AND event.type:denied ----- - -[float] -==== Failed attempt to create a user account - -User `alice` attempts to add a user account, `bob`, into a directory service, but the action fails: - -[source,json] ----- -{ - "user": { - "name": "alice", - "target": { - "name": "bob" - } - }, - "event": { - "kind": "event", <1> - "category": [ <2> - "iam" - ], - "type": [ <3> - "user", - "creation" - ], - "outcome": "failure" <4> - } -} ----- - -<1> Again classifying as an `event`. -<2> Categorized using `iam` for an event user account activity. -<3> Both `user` and `creation` -<4> The creation of a user account was attempted, but it was not successful. - -[float] -==== Informational listing of a file - -A utility, such as a file integrity monitoring (FIM) application, takes inventory of a file but does not access or modify the file: - -[source,json] ----- -{ - "file": { - "name": "example.png", - "owner": "alice", - "path": "/home/alice/example.png", - "type": "file" - }, - "event": { - "kind": "event", <1> - "category": [ <2> - "file" - ], - "type": [ <3> - "info" - ] - } -} ----- - -<1> Classifying as `event`. -<2> The event is reporting on a `file`. -<3> The `info` type categorizes purely informational events. The target file here was not accessed or modified. - -The source data didn't include any context around the event's outcome, so `event.outcome` should not be populated. - -[float] -=== Security application failed to block a network connection - -An intrusion detection system (IDS) attempts to block a connection but fails. The event emitted by the IDS is considered an alert: - -[source,json] ----- -{ - "source": { - "address": "10.42.42.42", - "ip": "10.42.42.42", - "port": 38842 - }, - "destination": { - "address": "10.42.42.1", - "ip": "10.42.42.1", - "port": 443 - }, - ... - "event": { - "kind": "alert", <1> - "category": [ <2> - "intrusion_detection", - "network" - ], - "type": [ <3> - "connection", - "denied" - ], - "outcome": "failure" <4> - } -} ----- - -<1> The IDS emitted this event when a detection rule generated an alert. The `event.kind` is set to `alert`. -<2> With the event emitted from a network IDS device, the event is categorized both as `network` and `intrusion_detection`. -<3> The alert event is a `connection` that was `denied` by the IDS' configuration. -<4> The IDS experienced an issue when attempting to deny the connection. Since the action taken by the IDS failed, the outcome is set as `failure`. diff --git a/docs/fields/field-values.asciidoc b/docs/fields/field-values.asciidoc deleted file mode 100644 index c05396aa7e..0000000000 --- a/docs/fields/field-values.asciidoc +++ /dev/null @@ -1,630 +0,0 @@ -[[ecs-category-field-values-reference]] -== {ecs} Categorization Fields - -At a high level, ECS provides fields to classify events in two different ways: -"Where it's from" (e.g., `event.module`, `event.dataset`, `agent.type`, `observer.type`, etc.), -and "What it is." The categorization fields hold the "What it is" information, -independent of the source of the events. - -ECS defines four categorization fields for this purpose, each of which falls under the `event.*` field set. - -[float] -[[ecs-category-fields]] -=== Categorization Fields - -* <> -* <> -* <> -* <> - -NOTE: If your events don't match any of these categorization values, you should -leave the fields empty. This will ensure you can start populating the fields -once the appropriate categorization values are published, in a later release. - -[float] -[[ecs-category-usage]] -=== Categorization Usage - -<> contains examples combining the categorization fields to classify different types of events. - - -[[ecs-allowed-values-event-kind]] -=== ECS Categorization Field: event.kind - -This is one of four ECS Categorization Fields, and indicates the highest level in the ECS category hierarchy. - -`event.kind` gives high-level information about what type of information the event contains, without being specific to the contents of the event. For example, values of this field distinguish alert events from metric events. - -The value of this field can be used to inform how these kinds of events should be handled. They may warrant different retention, different access control, it may also help understand whether the data is coming in at a regular interval or not. - -*Allowed Values* - -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> - -[float] -[[ecs-event-kind-alert]] -==== alert - -This value indicates an event such as an alert or notable event, triggered by a detection rule executing externally to the Elastic Stack. - -`event.kind:alert` is often populated for events coming from firewalls, intrusion detection systems, endpoint detection and response systems, and so on. - -This value is not used by Elastic solutions for alert documents that are created by rules executing within the Kibana alerting framework. - - - -[float] -[[ecs-event-kind-asset]] -==== asset - -This value indicates events whose primary purpose is to store an inventory of assets/entities and their attributes. Assets/entities are objects (such as users and hosts) that are expected to be subjects of detailed analysis within the system. - -Examples include lists of user identities or accounts ingested from directory services such as Active Directory (AD), inventory of hosts pulled from configuration management databases (CMDB), and lists of cloud storage buckets pulled from cloud provider APIs. - -This value is used by Elastic Security for asset management solutions. `event.kind: asset` is not used for normal system events or logs that are coming from an asset/entity, nor is it used for system events or logs coming from a directory or CMDB system. - - - -[float] -[[ecs-event-kind-enrichment]] -==== enrichment - -The `enrichment` value indicates an event collected to provide additional context, often to other events. - -An example is collecting indicators of compromise (IOCs) from a threat intelligence provider with the intent to use those values to enrich other events. The IOC events from the intelligence provider should be categorized as `event.kind:enrichment`. - - - -[float] -[[ecs-event-kind-event]] -==== event - -This value is the most general and most common value for this field. It is used to represent events that indicate that something happened. - - - -[float] -[[ecs-event-kind-metric]] -==== metric - -This value is used to indicate that this event describes a numeric measurement taken at given point in time. - -Examples include CPU utilization, memory usage, or device temperature. - -Metric events are often collected on a predictable frequency, such as once every few seconds, or once a minute, but can also be used to describe ad-hoc numeric metric queries. - - - -[float] -[[ecs-event-kind-state]] -==== state - -The state value is similar to metric, indicating that this event describes a measurement taken at given point in time, except that the measurement does not result in a numeric value, but rather one of a fixed set of categorical values that represent conditions or states. - -Examples include periodic events reporting Elasticsearch cluster state (green/yellow/red), the state of a TCP connection (open, closed, fin_wait, etc.), the state of a host with respect to a software vulnerability (vulnerable, not vulnerable), and the state of a system regarding compliance with a regulatory standard (compliant, not compliant). - -Note that an event that describes a change of state would not use `event.kind:state`, but instead would use 'event.kind:event' since a state change fits the more general event definition of something that happened. - -State events are often collected on a predictable frequency, such as once every few seconds, once a minute, once an hour, or once a day, but can also be used to describe ad-hoc state queries. - - - -[float] -[[ecs-event-kind-pipeline_error]] -==== pipeline_error - -This value indicates that an error occurred during the ingestion of this event, and that event data may be missing, inconsistent, or incorrect. `event.kind:pipeline_error` is often associated with parsing errors. - - - -[float] -[[ecs-event-kind-signal]] -==== signal - -This value is used by Elastic solutions (e.g., Security, Observability) for alert documents that are created by rules executing within the Kibana alerting framework. - -Usage of this value is reserved, and data ingestion pipelines must not populate `event.kind` with the value "signal". - - - -[[ecs-allowed-values-event-category]] -=== ECS Categorization Field: event.category - -This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy. - -`event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory. - -This field is an array. This will allow proper categorization of some events that fall in multiple categories. - -*Allowed Values* - -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> - -[float] -[[ecs-event-category-api]] -==== api - -Events in this category annotate API calls that occured on a system. Typical sources for those events could be from the Operating System level through the native libraries (for example Windows Win32, Linux libc, etc.), or managed sources of events (such as ETW, syslog), but can also include network protocols (such as SOAP, RPC, Websocket, REST, etc.) - - -*Expected event types for category api:* - -access, admin, allowed, change, creation, deletion, denied, end, info, start, user - - -[float] -[[ecs-event-category-authentication]] -==== authentication - -Events in this category are related to the challenge and response process in which credentials are supplied and verified to allow the creation of a session. Common sources for these logs are Windows event logs and ssh logs. Visualize and analyze events in this category to look for failed logins, and other authentication-related activity. - - -*Expected event types for category authentication:* - -start, end, info - - -[float] -[[ecs-event-category-configuration]] -==== configuration - -Events in the configuration category have to deal with creating, modifying, or deleting the settings or parameters of an application, process, or system. - -Example sources include security policy change logs, configuration auditing logging, and system integrity monitoring. - - -*Expected event types for category configuration:* - -access, change, creation, deletion, info - - -[float] -[[ecs-event-category-database]] -==== database - -The database category denotes events and metrics relating to a data storage and retrieval system. Note that use of this category is not limited to relational database systems. Examples include event logs from MS SQL, MySQL, Elasticsearch, MongoDB, etc. Use this category to visualize and analyze database activity such as accesses and changes. - - -*Expected event types for category database:* - -access, change, info, error - - -[float] -[[ecs-event-category-driver]] -==== driver - -Events in the driver category have to do with operating system device drivers and similar software entities such as Windows drivers, kernel extensions, kernel modules, etc. - -Use events and metrics in this category to visualize and analyze driver-related activity and status on hosts. - - -*Expected event types for category driver:* - -change, end, info, start - - -[float] -[[ecs-event-category-email]] -==== email - -This category is used for events relating to email messages, email attachments, and email network or protocol activity. - -Emails events can be produced by email security gateways, mail transfer agents, email cloud service providers, or mail server monitoring applications. - - -*Expected event types for category email:* - -info - - -[float] -[[ecs-event-category-file]] -==== file - -Relating to a set of information that has been created on, or has existed on a filesystem. Use this category of events to visualize and analyze the creation, access, and deletions of files. Events in this category can come from both host-based and network-based sources. An example source of a network-based detection of a file transfer would be the Zeek file.log. - - -*Expected event types for category file:* - -access, change, creation, deletion, info - - -[float] -[[ecs-event-category-host]] -==== host - -Use this category to visualize and analyze information such as host inventory or host lifecycle events. - -Most of the events in this category can usually be observed from the outside, such as from a hypervisor or a control plane's point of view. Some can also be seen from within, such as "start" or "end". - -Note that this category is for information about hosts themselves; it is not meant to capture activity "happening on a host". - - -*Expected event types for category host:* - -access, change, end, info, start - - -[float] -[[ecs-event-category-iam]] -==== iam - -Identity and access management (IAM) events relating to users, groups, and administration. Use this category to visualize and analyze IAM-related logs and data from active directory, LDAP, Okta, Duo, and other IAM systems. - - -*Expected event types for category iam:* - -admin, change, creation, deletion, group, info, user - - -[float] -[[ecs-event-category-intrusion_detection]] -==== intrusion_detection - -Relating to intrusion detections from IDS/IPS systems and functions, both network and host-based. Use this category to visualize and analyze intrusion detection alerts from systems such as Snort, Suricata, and Palo Alto threat detections. - - -*Expected event types for category intrusion_detection:* - -allowed, denied, info - - -[float] -[[ecs-event-category-library]] -==== library - -Events in this category refer to the loading of a library, such as (dll / so / dynlib), into a process. Use this category to visualize and analyze library loading related activity on hosts. Keep in mind that driver related activity will be captured under the "driver" category above. - - -*Expected event types for category library:* - -start - - -[float] -[[ecs-event-category-malware]] -==== malware - -Malware detection events and alerts. Use this category to visualize and analyze malware detections from EDR/EPP systems such as Elastic Endpoint Security, Symantec Endpoint Protection, Crowdstrike, and network IDS/IPS systems such as Suricata, or other sources of malware-related events such as Palo Alto Networks threat logs and Wildfire logs. - - -*Expected event types for category malware:* - -info - - -[float] -[[ecs-event-category-network]] -==== network - -Relating to all network activity, including network connection lifecycle, network traffic, and essentially any event that includes an IP address. Many events containing decoded network protocol transactions fit into this category. Use events in this category to visualize or analyze counts of network ports, protocols, addresses, geolocation information, etc. - - -*Expected event types for category network:* - -access, allowed, connection, denied, end, info, protocol, start - - -[float] -[[ecs-event-category-package]] -==== package - -Relating to software packages installed on hosts. Use this category to visualize and analyze inventory of software installed on various hosts, or to determine host vulnerability in the absence of vulnerability scan data. - - -*Expected event types for category package:* - -access, change, deletion, info, installation, start - - -[float] -[[ecs-event-category-process]] -==== process - -Use this category of events to visualize and analyze process-specific information such as lifecycle events or process ancestry. - - -*Expected event types for category process:* - -access, change, end, info, start - - -[float] -[[ecs-event-category-registry]] -==== registry - -Having to do with settings and assets stored in the Windows registry. Use this category to visualize and analyze activity such as registry access and modifications. - - -*Expected event types for category registry:* - -access, change, creation, deletion - - -[float] -[[ecs-event-category-session]] -==== session - -The session category is applied to events and metrics regarding logical persistent connections to hosts and services. Use this category to visualize and analyze interactive or automated persistent connections between assets. Data for this category may come from Windows Event logs, SSH logs, or stateless sessions such as HTTP cookie-based sessions, etc. - - -*Expected event types for category session:* - -start, end, info - - -[float] -[[ecs-event-category-threat]] -==== threat - -Use this category to visualize and analyze events describing threat actors' targets, motives, or behaviors. - - -*Expected event types for category threat:* - -indicator - - -[float] -[[ecs-event-category-vulnerability]] -==== vulnerability - -Relating to vulnerability scan results. Use this category to analyze vulnerabilities detected by Tenable, Qualys, internal scanners, and other vulnerability management sources. - - -*Expected event types for category vulnerability:* - -info - - -[float] -[[ecs-event-category-web]] -==== web - -Relating to web server access. Use this category to create a dashboard of web server/proxy activity from apache, IIS, nginx web servers, etc. Note: events from network observers such as Zeek http log may also be included in this category. - - -*Expected event types for category web:* - -access, error, info - - -[[ecs-allowed-values-event-type]] -=== ECS Categorization Field: event.type - -This is one of four ECS Categorization Fields, and indicates the third level in the ECS category hierarchy. - -`event.type` represents a categorization "sub-bucket" that, when used along with the `event.category` field values, enables filtering events down to a level appropriate for single visualization. - -This field is an array. This will allow proper categorization of some events that fall in multiple event types. - -*Allowed Values* - -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> - -[float] -[[ecs-event-type-access]] -==== access - -The access event type is used for the subset of events within a category that indicate that something was accessed. Common examples include `event.category:database AND event.type:access`, or `event.category:file AND event.type:access`. Note for file access, both directory listings and file opens should be included in this subcategory. You can further distinguish access operations using the ECS `event.action` field. - - - -[float] -[[ecs-event-type-admin]] -==== admin - -The admin event type is used for the subset of events within a category that are related to admin objects. For example, administrative changes within an IAM framework that do not specifically affect a user or group (e.g., adding new applications to a federation solution or connecting discrete forests in Active Directory) would fall into this subcategory. Common example: `event.category:iam AND event.type:change AND event.type:admin`. You can further distinguish admin operations using the ECS `event.action` field. - - - -[float] -[[ecs-event-type-allowed]] -==== allowed - -The allowed event type is used for the subset of events within a category that indicate that something was allowed. Common examples include `event.category:network AND event.type:connection AND event.type:allowed` (to indicate a network firewall event for which the firewall disposition was to allow the connection to complete) and `event.category:intrusion_detection AND event.type:allowed` (to indicate a network intrusion prevention system event for which the IPS disposition was to allow the connection to complete). You can further distinguish allowed operations using the ECS `event.action` field, populating with values of your choosing, such as "allow", "detect", or "pass". - - - -[float] -[[ecs-event-type-change]] -==== change - -The change event type is used for the subset of events within a category that indicate that something has changed. If semantics best describe an event as modified, then include them in this subcategory. Common examples include `event.category:process AND event.type:change`, and `event.category:file AND event.type:change`. You can further distinguish change operations using the ECS `event.action` field. - - - -[float] -[[ecs-event-type-connection]] -==== connection - -Used primarily with `event.category:network` this value is used for the subset of network traffic that includes sufficient information for the event to be included in flow or connection analysis. Events in this subcategory will contain at least source and destination IP addresses, source and destination TCP/UDP ports, and will usually contain counts of bytes and/or packets transferred. Events in this subcategory may contain unidirectional or bidirectional information, including summary information. Use this subcategory to visualize and analyze network connections. Flow analysis, including Netflow, IPFIX, and other flow-related events fit in this subcategory. Note that firewall events from many Next-Generation Firewall (NGFW) devices will also fit into this subcategory. A common filter for flow/connection information would be `event.category:network AND event.type:connection AND event.type:end` (to view or analyze all completed network connections, ignoring mid-flow reports). You can further distinguish connection events using the ECS `event.action` field, populating with values of your choosing, such as "timeout", or "reset". - - - -[float] -[[ecs-event-type-creation]] -==== creation - -The "creation" event type is used for the subset of events within a category that indicate that something was created. A common example is `event.category:file AND event.type:creation`. - - - -[float] -[[ecs-event-type-deletion]] -==== deletion - -The deletion event type is used for the subset of events within a category that indicate that something was deleted. A common example is `event.category:file AND event.type:deletion` to indicate that a file has been deleted. - - - -[float] -[[ecs-event-type-denied]] -==== denied - -The denied event type is used for the subset of events within a category that indicate that something was denied. Common examples include `event.category:network AND event.type:denied` (to indicate a network firewall event for which the firewall disposition was to deny the connection) and `event.category:intrusion_detection AND event.type:denied` (to indicate a network intrusion prevention system event for which the IPS disposition was to deny the connection to complete). You can further distinguish denied operations using the ECS `event.action` field, populating with values of your choosing, such as "blocked", "dropped", or "quarantined". - - - -[float] -[[ecs-event-type-end]] -==== end - -The end event type is used for the subset of events within a category that indicate something has ended. A common example is `event.category:process AND event.type:end`. - - - -[float] -[[ecs-event-type-error]] -==== error - -The error event type is used for the subset of events within a category that indicate or describe an error. A common example is `event.category:database AND event.type:error`. Note that pipeline errors that occur during the event ingestion process should not use this `event.type` value. Instead, they should use `event.kind:pipeline_error`. - - - -[float] -[[ecs-event-type-group]] -==== group - -The group event type is used for the subset of events within a category that are related to group objects. Common example: `event.category:iam AND event.type:creation AND event.type:group`. You can further distinguish group operations using the ECS `event.action` field. - - - -[float] -[[ecs-event-type-indicator]] -==== indicator - -The indicator event type is used for the subset of events within a category that contain details about indicators of compromise (IOCs). - -A common example is `event.category:threat AND event.type:indicator`. - - - -[float] -[[ecs-event-type-info]] -==== info - -The info event type is used for the subset of events within a category that indicate that they are purely informational, and don't report a state change, or any type of action. For example, an initial run of a file integrity monitoring system (FIM), where an agent reports all files under management, would fall into the "info" subcategory. Similarly, an event containing a dump of all currently running processes (as opposed to reporting that a process started/ended) would fall into the "info" subcategory. An additional common examples is `event.category:intrusion_detection AND event.type:info`. - - - -[float] -[[ecs-event-type-installation]] -==== installation - -The installation event type is used for the subset of events within a category that indicate that something was installed. A common example is `event.category:package` AND `event.type:installation`. - - - -[float] -[[ecs-event-type-protocol]] -==== protocol - -The protocol event type is used for the subset of events within a category that indicate that they contain protocol details or analysis, beyond simply identifying the protocol. Generally, network events that contain specific protocol details will fall into this subcategory. A common example is `event.category:network AND event.type:protocol AND event.type:connection AND event.type:end` (to indicate that the event is a network connection event sent at the end of a connection that also includes a protocol detail breakdown). Note that events that only indicate the name or id of the protocol should not use the protocol value. Further note that when the protocol subcategory is used, the identified protocol is populated in the ECS `network.protocol` field. - - - -[float] -[[ecs-event-type-start]] -==== start - -The start event type is used for the subset of events within a category that indicate something has started. A common example is `event.category:process AND event.type:start`. - - - -[float] -[[ecs-event-type-user]] -==== user - -The user event type is used for the subset of events within a category that are related to user objects. Common example: `event.category:iam AND event.type:deletion AND event.type:user`. You can further distinguish user operations using the ECS `event.action` field. - - - -[[ecs-allowed-values-event-outcome]] -=== ECS Categorization Field: event.outcome - -This is one of four ECS Categorization Fields, and indicates the lowest level in the ECS category hierarchy. - -`event.outcome` simply denotes whether the event represents a success or a failure from the perspective of the entity that produced the event. - -Note that when a single transaction is described in multiple events, each event may populate different values of `event.outcome`, according to their perspective. - -Also note that in the case of a compound event (a single event that contains multiple logical events), this field should be populated with the value that best captures the overall success or failure from the perspective of the event producer. - -Further note that not all events will have an associated outcome. For example, this field is generally not populated for metric events, events with `event.type:info`, or any events for which an outcome does not make logical sense. - -*Allowed Values* - -* <> -* <> -* <> - -[float] -[[ecs-event-outcome-failure]] -==== failure - -Indicates that this event describes a failed result. A common example is `event.category:file AND event.type:access AND event.outcome:failure` to indicate that a file access was attempted, but was not successful. - - - -[float] -[[ecs-event-outcome-success]] -==== success - -Indicates that this event describes a successful result. A common example is `event.category:file AND event.type:create AND event.outcome:success` to indicate that a file was successfully created. - - - -[float] -[[ecs-event-outcome-unknown]] -==== unknown - -Indicates that this event describes only an attempt for which the result is unknown from the perspective of the event producer. For example, if the event contains information only about the request side of a transaction that results in a response, populating `event.outcome:unknown` in the request event is appropriate. The unknown value should not be used when an outcome doesn't make logical sense for the event. In such cases `event.outcome` should not be populated. - - - - -include::field-values-usage.asciidoc[] diff --git a/docs/fields/fields.asciidoc b/docs/fields/fields.asciidoc deleted file mode 100644 index f99e3d4198..0000000000 --- a/docs/fields/fields.asciidoc +++ /dev/null @@ -1,129 +0,0 @@ -[[ecs-field-reference]] -== {ecs} Field Reference - -This is the documentation of ECS version 9.0.0-dev. - -ECS defines multiple groups of related fields. They are called "field sets". -The <> field set is the only one whose fields are defined -at the root of the event. - -All other field sets are defined as objects in {es}, under which -all fields are defined. - -For a single page representation of all fields, please see the -{ecs_github_repo_link}/generated/csv/fields.csv[generated CSV of fields]. - -[float] -[[ecs-fieldsets]] -=== Field Sets -[cols="<,<",options="header",] -|===== -| Field Set | Description - -| <> | All fields defined directly at the root of the events. - -| <> | Fields about the monitoring agent. - -| <> | Fields describing an Autonomous System (Internet routing prefix). - -| <> | Fields about the client side of a network connection, used with server. - -| <> | Fields about the cloud resource. - -| <> | These fields contain information about binary code signatures. - -| <> | Fields describing the container that generated this event. - -| <> | The data_stream fields take part in defining the new data stream naming scheme. - -| <> | Fields about the destination side of a network connection, used with source. - -| <> | Fields characterizing a (mobile) device a process or application is running on. - -| <> | These fields contain information about code libraries dynamically loaded into processes. - -| <> | Fields describing DNS queries and answers. - -| <> | Meta-information specific to ECS. - -| <> | These fields contain Linux Executable Linkable Format (ELF) metadata. - -| <> | Describes an email transaction. - -| <> | Fields about errors of any kind. - -| <> | Fields breaking down the event details. - -| <> | Fields describing functions as a service. - -| <> | Fields describing files. - -| <> | Fields describing a location. - -| <> | User's group relevant to the event. - -| <> | Hashes, usually file hashes. - -| <> | Fields describing the relevant computing instance. - -| <> | Fields describing an HTTP request. - -| <> | Fields to describe observer interface information. - -| <> | Details about the event's logging mechanism. - -| <> | These fields contain Mac OS Mach Object file format (Mach-O) metadata. - -| <> | Fields describing the communication path over which the event happened. - -| <> | Fields describing an entity observing the event from outside the host. - -| <> | Fields relevant to container orchestrators. - -| <> | Fields describing the organization or company the event is associated with. - -| <> | OS fields contain information about the operating system. - -| <> | These fields contain information about an installed software package. - -| <> | These fields contain Windows Portable Executable (PE) metadata. - -| <> | These fields contain information about a process. - -| <> | Fields related to Windows Registry operations. - -| <> | Fields meant to facilitate pivoting around a piece of data. - -| <> | Fields for describing risk score and level. - -| <> | Fields to capture details about rules used to generate alerts or other notable events. - -| <> | Fields about the server side of a network connection, used with client. - -| <> | Fields describing the service for or from which the data was collected. - -| <> | Fields about the source side of a network connection, used with destination. - -| <> | Fields to classify events and alerts according to a threat taxonomy. - -| <> | Fields describing a TLS connection. - -| <> | Fields related to distributed tracing. - -| <> | Fields that let you store URLs in various forms. - -| <> | Fields to describe the user relevant to the event. - -| <> | Fields to describe a browser user_agent string. - -| <> | Fields to describe observed VLAN information. - -| <> | Fields related to storage volume details. - -| <> | Fields to describe the vulnerability relevant to an event. - -| <> | These fields contain x509 certificate metadata. - -|===== - -include::field-details.asciidoc[] diff --git a/docs/fields/usage/cloud.asciidoc b/docs/fields/usage/cloud.asciidoc deleted file mode 100644 index e0432c3afc..0000000000 --- a/docs/fields/usage/cloud.asciidoc +++ /dev/null @@ -1,78 +0,0 @@ -[[ecs-cloud-usage]] -==== Cloud Fields Usage and Examples - -Here are the subjects covered in this page. - -* <> -** <> -** <> - -[discrete] -[[ecs-cloud-usage-field-reuse]] -===== Field reuse - -The cloud fields can be used to -* <> -* or to <> that has a direct invocation relationship to the observed service or resource - -[discrete] -[[ecs-cloud-usage-cloud-at-root]] -====== Cloud fields at the Root of an Event - -Use the cloud fields at the root of an event to describe the cloud resource the event primarily relates to. -An example for this use case is a log entry being recorded for a service that is deployed in a cloud environment: - -[source,json] ------------ -{ - "cloud": { - "provider": "aws", - "region": "us-east-1", - "service": { "name": "ec2" } - } -} ------------ - -[discrete] -[[ecs-cloud-usage-origin-target]] -====== Describing external cloud resources in an invocation relationship - -Managed cloud services can be in an invocation relationship to the observed service (i.e. service for which the corresponding event is captured). -For instance, an observed service running on AWS Lambda can be invoked through an AWS API Gateway. -Another example is an observed service that invokes an external cloud service (e.g. AWS Simple Email Service). -In the context of an invocation relationship, cloud fields can be nested under `cloud.origin.*` and `cloud.target.*`, respectively, -to capture the cloud context on origin or target cloud services from the perspective of an observed service. -This concept is similar to <> under `service.origin.*` and `service.target.*`. - -Let's consider an exemplary event that represents an inbound AWS Lambda invocation coming from an AWS API Gateway. Use the following `cloud.origin.*` -nesting to describe the API Gateway service from the perspective of the AWS Lambda service: - -[source,json] ------------ -{ - "service": { <1> - "name": "MyLambdaFunction", - "version": "1.0.0", - "origin": { <2> - "name": "MyGateway", - "version" "2.0", - } - }, - "cloud": { <3> - "provider": "aws", - "region": "us-east-1", - "service": { "name": "lambda" }, - "origin": { <4> - "provider": "aws", - "region": "eu-west-1", - "service": { "name": "apigateway" } - } - } -} ------------ -<1> Describes the observed AWS Lambda function -<2> Describes the API Gateway service where the inbound request comes from -<3> Describes the cloud context of the observed AWS Lambda function -<4> Describes the cloud context of the API Gateway service where the inbound request comes from - -Note that `cloud.origin.*` and `cloud.target.*` fields should only be used on events that represent an invocation relationship. \ No newline at end of file diff --git a/docs/fields/usage/service.asciidoc b/docs/fields/usage/service.asciidoc deleted file mode 100644 index c6e217580b..0000000000 --- a/docs/fields/usage/service.asciidoc +++ /dev/null @@ -1,92 +0,0 @@ -[[ecs-service-usage]] -==== Service Fields Usage and Examples - -Here are the subjects covered in this page. - -* <> -** <> -** <> - -[discrete] -[[ecs-service-usage-field-reuse]] -===== Field reuse - -The service fields can be used to -* <> (i.e. observed service) -* or to <> to the observed service - -[discrete] -[[ecs-service-usage-service-at-root]] -====== Service fields at the Root of an Event - -Use the service fields at the root of an event to describe the service the event primarily relates to. -An example for this use case is a log entry being recorded for a particular service or appplication (e.g. `MyService`): - -[source,json] ------------ -{ - "service": { <1> - "id": "d37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6", - "name": "MyService", - "version": "1.0.0" - }, - ... -} ------------ -<1> Describes the service for which the log entry is being captured - -[discrete] -[[ecs-service-usage-origin-target]] -====== Describing external services in an invocation relationship - -Multiple services can be in an invocation relationship. -Where it is possible to apply https://www.elastic.co/guide/en/apm/guide/current/apm-distributed-tracing.html[distributed tracing] on all the involved services -describe the individual services <> -and use the <> to represent the invocation relationship. - -There are situations when distributed tracing cannot be applied on some external services that are in an invocation relationship to an observed service. -Let's consider the example of a service `MyService` being deployed on a cloud provider with an upstream API gateway that passes through requests to -`MyService` (with additional context information about the API gateway itself). -To describe the API gateway as a service from the perspective of `MyService` one can self-nest the service fields under `service.origin`: - -[source,json] ------------ -{ - "service": { <1> - "id": "d37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6", - "name": "MyService", - "version": "1.0.0", - "origin": { <2> - "id": "api-gateway-46372994637e2b4567", - "name": "SomeGateway", - "version" "2.5.1", - } - }, - ... -} ------------ -<1> Describes the observed service that receives the inbound request from an external service -<2> Describes the origin external service of the inbound request - -Similar to the usage of `service.origin` fields the service fields can be self-nested under `service.target.*` to describe an external target service for an outbound request: - -[source,json] ------------ -{ - "service": { <1> - "id": "d37e5ebfe0ae6c4972dbe9f0174a1637bb8247f6", - "name": "MyService", - "version": "1.0.0", - "target": { <2> - "id": "sms-service-0xe6c4272dbeAf0134", - "name": "ManagedSMSService", - "version": "1.9.0", - } - }, - ... -} ------------ -<1> Describes the observed service that emits the outbound request to an external service -<2> Describes the target external service of the outbound request - -Note that `service.origin.*` and `service.target.*` fields should only be used on events that represent an invocation relationship. diff --git a/docs/fields/usage/threat.asciidoc b/docs/fields/usage/threat.asciidoc deleted file mode 100644 index 7693250d30..0000000000 --- a/docs/fields/usage/threat.asciidoc +++ /dev/null @@ -1,188 +0,0 @@ -[[ecs-threat-usage]] -==== Threat Fields Usage and Examples - -The `threat.*` fields map threat indicators to ECS. The data helps detect -malicious events with indicator match rules and enrichment. - -[discrete] -[[ecs-threat-usage-indicators]] -===== Indicators - -Threat intelligence indicators come from many sources in different structures. -Normalize these indicators using the ECS threat.indicator.* fields. Once -normalized, consistently query indicators from various sources and build -indicator match rules. - -The below example is from an online database. It contains several network -indicators from a known malware site. - -```JSON -{ - "@timestamp": "2019-08-10T11:09:23.000Z", - "event": { - "kind": "enrichment", <1> - "category": "threat", <2> - "type": "indicator", <3> - "severity": 7, - "risk_score": 10.0, - }, - "threat: { - "indicator": { <4> - "first_seen": "2020-11-05T17:25:47.000Z", - "last_seen": "2020-11-05T17:25:47.000Z", - "modified_at": "2020-11-05T17:25:47.000Z", - "sightings": 10, - "type": [ - "ipv4-addr", - "port", - "domain-name", - "email-addr" - ], - "description": "Email address, domain, port, and IP address observed during an Angler EK campaign.", - "provider": "Abuse.ch", - "reference": "https://urlhaus.abuse.ch/url/abcdefg/", - "confidence": "High", - "ip": 1.2.3.4, - "port": 443, - "email.address": "phish@malicious.evil", - "marking": { - "tlp": "CLEAR" - }, - "url": { - "domain": "malicious.evil", - }, - "scanner_stats": 4 - } - }, - "related": { <5> - "hosts": [ - "malicious.evil" - ], - "ip": [ - 1.2.3.4 - ] - } -} -``` -<1> Use the `enrichment` value for `event.kind`. -<2> Use the `threat` value for `event.category`. -<3> The event type is set to `indicator`. -<4> Capture indicator details at `threat.indicator.*`. -<5> Copy indicators to the relevant `related.*` fields. - -The following example maps a file-based indicator. - -```JSON -{ - "@timestamp": "2019-08-10T11:09:23.000Z", - "event": { - "kind": "enrichment", - "category": "threat", - "type": "indicator", - "severity": 7, - "risk_score": 10, - }, - "threat": { - "indicator": { - "first_seen": "2020-11-05T17:25:47.000Z", - "last_seen": "2020-11-05T17:25:47.000Z", - "modified_at": "2020-11-05T17:25:47.000Z", - "sightings": 10, - "type": [ - "file" <1> - ], - "description": "Implant used during an Angler EK campaign.", - "provider": "Abuse.ch", - "reference": "https://bazaar.abuse.ch/sample/f3ec9a2f2766c6bcf8c2894a9927c227649249ac146aabfe8d26b259be7d7055", - "confidence": "High", - "file": { <2> - "hash": { - "sha256": "0c415dd718e3b3728707d579cf8214f54c2942e964975a5f925e0b82fea644b4", - "md5": "1eee2bf3f56d8abed72da2bc523e7431" - }, - "size": 656896, - "name": "invoice.doc" - }, - "marking": { - "tlp": "CLEAR" - }, - "scanner_stats": 4 - } - }, - "related": { <3> - "hash": [ - "1eee2bf3f56d8abed72da2bc523e7431", - "0c415dd718e3b3728707d579cf8214f54c2942e964975a5f925e0b82fea644b4" - ] - } -} -``` -<1> Use the `file` value for `threat.indicator.type`. -<2> Capture file attributes at `threat.indicator.file.*`. -<3> Again, populate the `related.hash` field with the file hashes. - -[discrete] -[[ecs-threat-usage-enrichments]] -===== Enrichments - -Event enrichment searches for known threats using an event's values and, if found, adds those associated details. - -```JSON -{ - "process": { - "name": "svchost.exe", - "pid": 1644, - "entity_id": "MDgyOWFiYTYtMzRkYi1kZTM2LTFkNDItMzBlYWM3NDVlOTgwLTE2NDQtMTMyNDk3MTA2OTcuNDc1OTExNTAw", - "executable": "C:\\Windows\\System32\\svchost.exe" - }, - "message": "Endpoint file event", - "@timestamp": "2020-11-17T19:07:46.0956672Z", - "file": { - "path": "C:\\Windows\\Prefetch\\SVCHOST.EXE-AE7DB802.pf", - "extension": "pf", - "name": "SVCHOST.EXE-AE7DB802.pf", - "hash": { - "sha256": "0c415dd718e3b3728707d579cf8214f54c2942e964975a5f925e0b82fea644b4" - } - }, - "threat": { - "enrichments": [ <1> - { - "indicator": { - "marking": { - "tlp": "CLEAR" - }, - "first_seen": "2020-11-17T19:07:46.0956672Z", - "file": { - "hash": { - "sha256": "0c415dd718e3b3728707d579cf8214f54c2942e964975a5f925e0b82fea644b4", - "md5": "1eee2bf3f56d8abed72da2bc523e7431" - }, - "size": 656896, - "name": "invoice.doc" - }, - "last_seen": "2020-11-17T19:07:46.0956672Z", - "reference": "https://system.example.com/event/#0001234", - "sightings": 4, - "type": [ - "sha256", - "md5", - "file_name", - "file_size" - ], - "description": "file last associated with delivering Angler EK" - }, - "matched": { <2> - "atomic": "0c415dd718e3b3728707d579cf8214f54c2942e964975a5f925e0b82fea644b4", - "field": "file.hash.sha256", - "id": "abc123f03", - "index": "threat-indicators-index-000001", - "type": "indicator_match_rule" - } - } - ] - } -} -``` -<1> Add each enrichment to a nested object under `threat.enrichments.*`. -<2> The `matched` object provides context about the indicators this event matched on. diff --git a/docs/fields/usage/user.asciidoc b/docs/fields/usage/user.asciidoc deleted file mode 100644 index 6951723edb..0000000000 --- a/docs/fields/usage/user.asciidoc +++ /dev/null @@ -1,420 +0,0 @@ -[[ecs-user-usage]] -==== User Fields Usage and Examples - -Here are the subjects covered in this page. - -* <> -* <> - -* <>, or all places user fields can appear -** <> -** <> -** <> -** <> -** <> -** <> - -* <> - -* <> - -[discrete] -[[ecs-user-usage-categorization]] -===== Categorization - -User fields can be present in any kind of event, without affecting the event's -categorization. - -However when the event is about IAM (Identity and Account Management), -it should be categorized as follows. In this section we'll cover specifically -`event.category` and `event.type` with regards to IAM activity. Make sure to read -the <> to see all allowed -values, and read more about `event.kind` and `event.outcome`. - -NOTE: IAM activity is a bit particular in that events are expected to be assigned 2 event types. -One of them indicates the type of activity (creation, deletion, change, etc.), -and the other indicates whether a user or a group is the target of the management activity. - -Many sections of the examples below are elided, in order to focus on the categorization -of the events. - -Creation of group "test-group": - -```JSON -{ - "event": { - "kind": "event", - "category": ["iam"], <1> - "type": ["group", "creation"], <2> - "outcome": "success" - }, - "group": { "name": "test-group", ... }, - "user": { ... }, - "related": { "user": [ ... ] } -} -``` -<1> Category "iam" -<2> Both relevant event types to a group creation - -Adding "test-user" to "test-group": - -```JSON -{ - "event": { - "kind": "event", - "category": ["iam"], <1> - "type": ["user", "change"], <2> - "action": "user added to group", <3> - "outcome": "success" - }, - "user": { - ... - "target": { <4> - "name": "test-user", - "group": { "name": "test-group" } - } - }, - "related": { "user": [ ... ] } -} -``` -<1> Category "iam" -<2> Both relevant event types to a user modification -<3> `event.action` is not a categorization field, and has no mandated value. It can be populated based on source event details or by a pipeline, to ensure the event captures all subtleties of what's happening. -<4> How to use all possible user fields is detailed below. - -[discrete] -[[ecs-user-identifiers]] -===== User identifiers - -Different systems use different values for user identifiers. Here are a few pointers -to help normalize some simple cases. - -* When a system provides a composite value for the user name (e.g. DOMAINNAME\username), - capture the domain name in `user.domain` and the user name (without the domain) in `user.name`. -* When a system uses an email address as the main identifier, populate both - `user.id` and `user.email` with it. - -[discrete] -[[ecs-user-usage-field-reuse]] -===== Field reuse - -The user fields can be reused (or appear) in many places across ECS. This makes -it possible to capture many users relevant to a single event. - -Here's the full list of places where the user fields can appear: - -* `user.*` -* `user.effective.*` -* `user.target.*` -* `user.changes.*` -* `source.user.*` -* `destination.user.*` -* `client.user.*` -* `server.user.*` - -Let's go over the meaning of each. - -The examples below will only populate `user.name` and sometimes `user.id` inside -the various `user` nestings, for readability. -However in implementations, unless otherwise noted, all `user` fields that can -reasonably be populated in each location should be populated. - -[discrete] -[[ecs-user-usage-user-at-root]] -====== User fields at the Root of an Event - -The user fields at the root of an event are used to capture the user -performing the main action described by the event. This is especially important -when there's more than one user present on the event. `user.*` fields at the root -of the event represent the user performing the action. - -In many cases, events that only mention one user should populate the user fields -at the root of the event, even if the user is not the one performing the action. - -In cases where a purpose-specific user field such as `url.username` is populated, -`user.name` should also be populated with the same user name. - -[source,json] ------------ -{ - "url": { "username": "alice" }, <1> - "user": { "name": "alice" }, <2> - "related": { "user": ["alice"] } -} ------------ -<1> Purpose-specific username field -<2> Username copied to `user.name` to establish `user.name` as a reliable baseline. - -[discrete] -[[ecs-user-usage-remote-logons]] -====== Remote Logons - -When users are crossing host boundaries, the users are captured at -`source.user` and `destination.user`. - -Examples of data sources where this is applicable: - -* Remote logons via ssh, kerberos -* Firewalls observing network traffic - -In order to align with ECS' design of having `user` at the root of the event as the -user performing the action, all `source.user` fields should be copied to `user` at the root. - -Here's an example where user "alice" logs on to another host as user "deus": - -[source,json] ------------ -{ - "user": { - "name": "alice" - }, - "source": { - "user": { - "name": "alice" - }, - "ip": "10.42.42.42" - }, - "destination": { - "user": { - "name": "deus" - }, - "ip": "10.42.42.43" - }, - "related": { "user": ["alice", "deus"] } -} ------------ - -Whenever an event source populates the `client` and `server` fields in addition -to `source` and `destination`, the user fields should be copied accordingly as well. -You can review <> to learn more about -mapping network events. - -[discrete] -[[ecs-user-usage-privilege-changes]] -====== Privilege Changes - -The `user.effective` fields are relevant when there's a privilege escalation or demotion -and it's possible to determine the user requesting/performing the escalation. - -Use the `user` fields at the root to capture who is requesting the privilege change, -and `user.effective` to capture the requested privilege level, whether or not the -privilege change was successful. - -Here are examples where this is applicable: - -* A user changing identity on a host. -** Examples: sudo, su, Run as. -* Running a program as a different user. Examples: -** A trusted user runs a specific admin command as root via a mechanism such as the Posix setuid/setgid. -** A service manager with administrator privileges starts child processes as limited - users, for security purposes (e.g. root runs Apache HTTPD as user "apache") - -In cases where the event source only gives information about the effective user -and not who requested different privileges, the `user` fields at the root of the -event should be used instead of `user.effective`. - -Here's an example of user "alice" running a command as root via sudo: - -[source,json] ------------ -{ - "user": { - "name": "alice", - "id": "1001", - "effective": { - "name": "root", - "id": "1" - } - }, - "related": { "user": ["alice", "root"] } -} ------------ - -When it's not possible (or it's prohibitive) to determine which user is requesting -different privilege levels, it's acceptable to capture the effective user at the -root of the event. Typically a privilege change event will already have happened, -for example: bob "su" as root; and subsequent events will show the root user -performing the actions. - -[discrete] -[[ecs-user-usage-iam]] -====== Identity and Access Management - -Whenever a user is performing an action that affects another user -- typically -in IAM scenarios -- the user affected by the action is captured at -`user.target`. The user performing the IAM activity is captured at the root -of the event. - -Examples of IAM activity include: - -* user-a creates or deletes user-b -* user-a modifies user-b - -In the create/delete scenarios, there's either no prior state (user creation) -or no post state (user deletion). In these cases, only `user` at the root and -`user.target` must be populated. - -Example where "root" creates user "bob": - -[source,json] ------------ -{ - "user": { - "name": "root", - "id": "1", - "target": { - "name": "bob", - "id": "1002", - ... - } - } - "related": { "user": ["bob", "root"] } -} ------------ - -When there's a change of state to an existing user, `user.target` must be used -to capture the prior state of the user, and `user.changes` should list only -the changes that were performed. - -Example where "root" renames user "bob" to "bob.barker": - -[source,json] ------------ -{ - "user": { - "name": "root", - "id": "1", - "target": { - "name": "bob", - "id": "1002" - }, - "changes": { - "name": "bob.barker" - } - }, - "related": { "user": ["bob", "bob.barker", "root"] } -} ------------ - -You'll note in the example above that unmodified attributes like the user ID are -not repeated under `user.changes.*`, since they didn't change. - -[discrete] -[[ecs-user-usage-combining]] -====== Combining IAM and Privilege Change - -We've covered above how `user.target` and `user.changes` can be used at the same time. -If privilege escalation is also present in the same IAM event, `user.effective` -should of course be used as well. - -Here's the "rename" example from the IAM section above. In the following example, -we know "alice" is escalating privileges to "root", in order to modify user "bob": - -[source,json] ------------ -{ - "user": { - "name": "alice", - "id": "1001", - "effective": { - "name": "root", - "id": "1" - }, - "target": { - "name": "bob", - "id": "1002" - }, - "changes": { - "name": "bob.barker" - } - }, - "related": { "user": ["alice", "bob", "bob.barker", "root"] } -} ------------ - -[discrete] -[[ecs-user-usage-reuse-subtleties]] -====== Subtleties around field reuse - -Most cases of field reuse in ECS are reusing a field set inside a different field set. -Two examples of this are: - -* reusing `group` in `user`, resulting in the `user.group.*` fields, or -* reusing `user` in `destination`, resulting in the `destination.user.*` fields, - which also include `destination.user.group.*`. - -The `user` fields can also be reused within `user` as different names, -representing the role of each relevant user. Examples are the `user.target.*` or `user.effective.*` fields. - -However, it's important to note that `user` fields reused within -`user` are _not carried around anywhere else_. -Let's illustrate the various permutations of what's valid and what is not. - -[options="header"] -|===== -| Field | Validity | Notes - -| `user.group.*` | Valid | Normal reuse. -| `destination.user.group.*` | Valid | The `group` reuse gets carried around when `user` is reused elsewhere. -Populate only if relevant to the event. - -| `user.target.group.*`, `user.effective.group.*`, `user.changes.group.*` -| Valid -| The `group` reuse gets carried around even when `user` is reused within itself. -Populate only if relevant to the event. - -| `destination.user.target.*`, `destination.user.effective.*`, `destination.user.changes.*` -| *Invalid* -| The `user` fields reused within `user` are not carried around anywhere else. -The same rule applies when `user` is reused under `source`, `client` and `server`. - -|===== - - -[discrete] -[[ecs-user-usage-pivoting]] -===== Pivoting via related.user - -In all events in this page, we've populated the `related.user` fields. - -Any event that has users in it should always populate the array field `related.user` -with all usernames seen in the event; including event names that appear in custom fields. -Note that this field is not a nesting of all user fields, -it's a flat array meant to contain user identifiers. - -Taking the example from `user.changes` again, we can see that no matter the role -of the each user (before/after privilege escalation, affected user, username after rename), they are all present in `related.user`: - -[source,json] ------------ -{ - "user": { - "name": "alice", - "id": "1001", - "effective": { - "name": "root", - "id": "1" - }, - "target": { - "name": "bob", - "id": "1002" - }, - "changes": { - "name": "bob.barker" - } - }, - "related": { "user": ["alice", "root", "bob", "bob.barker"] } -} ------------ - -Like the other fields in the <> field set, `related.user` is meant to facilitate -pivoting. For example, if you have a suspicion about user "bob.barker", searching -for this name in `related.user` will give you all events related to this user, whether -it's the creation / rename of the user, or events where this user was active in a system. - -[discrete] -[[ecs-user-usage-mappings]] -===== Mapping Examples - -For examples of mapping events from various sources, you can look at -https://github.com/elastic/ecs/blob/master/rfcs/text/0007-multiple-users.md#source-data[RFC 0007 in section Source Data]. diff --git a/docs/index.asciidoc b/docs/index.asciidoc deleted file mode 100644 index d1e793118a..0000000000 --- a/docs/index.asciidoc +++ /dev/null @@ -1,74 +0,0 @@ -= Elastic Common Schema (ECS) Reference -:doctype: book -:ecs: ECS - -include::{asciidoc-dir}/../../shared/versions/stack/current.asciidoc[] -include::{asciidoc-dir}/../../shared/attributes.asciidoc[] - -:ecs_repo: https://github.com/elastic/ecs/ -:ecs_github_repo_link: {ecs_repo}blob/{source_branch} -:ecs_issue: {ecs_repo}issues/ -:ecs_pull: {ecs_repo}pull/ - -[[ecs-reference]] -== Overview - -This is the documentation of ECS version 9.0.0-dev. - -[float] -=== What is ECS? - -The Elastic Common Schema (ECS) is an open source specification, -developed with support from the Elastic user community. -ECS defines a common set of fields to be used when storing event data in Elasticsearch, -such as logs and metrics. - -ECS specifies field names and Elasticsearch datatypes for each field, -and provides descriptions and example usage. -ECS also groups fields into ECS levels, which are used to signal how much a field -is expected to be present. You can learn more about ECS levels in <>. -Finally, ECS also provides a set of naming guidelines for adding custom fields. - -The goal of ECS is to enable and encourage users of Elasticsearch to normalize their event data, -so that they can better analyze, visualize, and correlate the data represented in their events. -ECS has been scoped to accommodate a wide variety of events, spanning: - -- *Event sources*: whether the source of your event is an Elastic product, - a third- party product, or a custom application built by your organization. -- *Ingestion architectures*: whether the ingestion path for your events includes Beats processors, - Logstash, Elasticsearch ingest node, all of the above, or none of the above. -- *Consumers*: whether consumed by API, Kibana queries, dashboards, apps, or other means. - -[float] -=== New to ECS? - -If you're new to ECS and looking for an introduction to its benefits and examples of the -core concepts, <> is a great place to start. - -[float] -=== My events don't map with ECS - -ECS is a permissive schema. If your events have additional data that cannot be -mapped to ECS, you can simply add them to your events, using custom field names. - - -[float] -=== Maturity - -ECS improvements are released following https://semver.org/[Semantic Versioning]. -Major ECS releases are planned to be aligned with major Elastic Stack releases. - -Any feedback on the general structure, missing fields, or existing fields is appreciated. -For contributions please read the -https://github.com/elastic/ecs/blob/master/CONTRIBUTING.md[Contribution -Guidelines]. - - - -include::using-ecs/index.asciidoc[] -include::fields/fields.asciidoc[] -include::fields/field-values.asciidoc[] -include::migrating/index.asciidoc[] -include::opentelemetry/index.asciidoc[] -include::additional-info/index.asciidoc[] -include::release-notes/index.asciidoc[] diff --git a/docs/migrating/converting.asciidoc b/docs/migrating/converting.asciidoc deleted file mode 100644 index 099ee86711..0000000000 --- a/docs/migrating/converting.asciidoc +++ /dev/null @@ -1,205 +0,0 @@ -[[ecs-converting]] -=== Map custom data to ECS - -A common schema helps you correlate and use data from various sources. - -Fields for most Elastic modules and solutions (version 7.0 and later) are mapped -to the Elastic Common Schema. You may want to map data from other -implementations to ECS to help you correlate data across all of your products -and solutions. - -[float] -[[ecs-converting-before-you-start]] -==== Before you start - -Before you start a conversion, be sure that you understand the basics below. - -[float] -[[core-or-ext]] -===== Core and extended levels - -Make sure you understand the distinction between Core and Extended fields, -as explained in the <>. - -Core and Extended fields are documented in the <> or, for -a single page representation of all fields, please see the -{ecs_github_repo_link}/generated/csv/fields.csv[generated CSV of fields]. - -[float] -[[ecs-conv]] -===== An approach to mapping an existing implementation - -Here's the recommended approach for converting an existing implementation to {ecs}. - -. Review each field in your original event and map it to the relevant ECS field. - - - Start by mapping your field to the relevant ECS Core field. - - If a relevant ECS Core field does not exist, map your field to the relevant ECS Extended field. - - If no relevant ECS Extended field exists, consider keeping your field with its original details, - or possibly renaming it using ECS naming guidelines and attempt to map one - or more of your original event fields to it. - -. Review each ECS Core field, and attempt to populate it. - - - Review your original event data again - - Consider populating the field based on additional meta-data such as static - information (e.g. add `event.category:authentication` even if your auth events - don't mention the word "authentication") - - Consider capturing additional environment meta-data, such as information about the - host, container or cloud instance. - -. Review other extended fields from any field set you are already using, and - attempt to populate it as well. - -. Set `ecs.version` to the version of the schema you are conforming to. This will - allow you to upgrade your sources, pipelines and content (like dashboards) - smoothly in the future. - -[float] -[[ecs-conv-spreadsheet]] -===== Use a spreadsheet to plan your migration - -Using a spreadsheet to plan the migration from pre-existing source fields to ECS -is a common practice. It's a good way to address each of your fields -methodically among colleagues. - -To help you plan your migration, Elastic offers a -https://ela.st/sample-pipeline-mapping[spreadsheet template]. You can use a CSV -version of this spreadsheet to -<>. This is the easiest and most consistent way to map your custom data -to ECS, regardless of your ingest method. - -[float] -[[ecs-map-custom-data-to-ecs-es-pipeline]] -==== Map custom data to ECS using an {es} ingest pipeline - -Use {kib}'s **Create pipeline from CSV** feature to create an {es} ingest -pipeline from a CSV file that maps custom data to ECS fields. - -Before you start, ensure you meet the -{ref}/ingest.html#ingest-prerequisites[prerequisites] to create ingest pipelines -in {kib}. - -. Download or make a copy of the -https://ela.st/sample-pipeline-mapping[spreadsheet template]. - -. Use the spreadsheet to map your custom data to ECS fields. While you can -include additional columns, {kib} only processes the following supported -columns. Other columns are ignored. -+ -.**Supported columns** -[role="child_attributes"] -[%collapsible] -==== -`source_field`:: -(Required) JSON field key from your custom data. Supports dot notation. Rows -with an empty `source_field` are skipped. - -`destination_field`:: -(Required) ECS field name. Supports dot notation. To perform a -`format_action` without renaming the field, leave `destination_field` empty. -+ -If the `destination field` is `@timestamp`, a `format_action` of -`parse_timestamp` and a `timestamp_format` of `UNIX_MS` are used, regardless of -any provided values. This helps prevent downstream conversion problems. - -`format_action`:: -(Optional) Conversion to apply to the field value. -+ -[%collapsible%open] -.Valid values -===== -(empty):: -No conversion. - -`parse_timestamp`:: -Formats a date or time value. To specify a format, use `timestamp_format`. - -`to_array`:: -Converts to an array. - -`to_boolean`:: -Converts to a boolean. - -`to_float`:: -Converts to a floating point number. - -`to_integer`:: -Converts to an integer - -`to_string`:: -Converts to a string. - -`lowercase`:: -Converts to lowercase. - -`uppercase`:: -Converts to uppercase. -===== - -`timestamp_format`:: -(Optional) Time and date format to use with the `parse_timestamp` format action. -Valid values are `UNIX`, `UNIX_MS`, `ISO8601`, `TAI64N`, and -{ref}/mapping-date-format.html[Java time patterns]. Defaults to `UNIX_MS`. - -`copy_action`:: -(Optional) Action to take on the `source_field`. Valid values are: -+ -[%collapsible%open] -.Valid values -===== -(empty):: -(Default) Uses the default action. You'll specify the default action later -on {kib}'s **Create pipeline from CSV** page. - -`copy`:: -Makes a copy of the `source_field` to use as the `destination_field`. -The final document contains both fields. -+ -`rename`:: -Renames the `source_field` to the `destination_field`. The final document only -contains the `destination_field`. -===== -==== - -. Save and export your spreadsheet as a CSV file. -+ -NOTE: {kib}'s **Create pipeline from CSV** feature only supports CSV files up to -100 MB. - -. In {kib}, open the main menu and click **Stack Management > Ingest Pipelines > -Create pipeline > New pipeline from CSV**. -+ -[role="screenshot"] -image::images/kib-create-pipeline-from-csv.png[Create Pipeline from CSV in Kibana,align="center"] - -. On the **Create pipeline from CSV** page, upload your CSV file. - -. Under **Default action**, select the **Copy field name** or **Rename field** -option. -+ -For the **Copy field name** option, {kib} makes a copy of the `source_field` to -use as the `destination_field` by default. The final document contains both -fields. -+ -For the **Rename field** option, renames the `source_field` to the -`destination_field` by default. The final document only contains the -`destination_field`. -+ -You can override this default using the `copy_action` column of your CSV. - -. Click **Process CSV**. -+ -{kib} displays a JSON preview of the ingest pipeline generated from your CSV -file. -+ -[role="screenshot"] -image::images/kib-create-pipeline-from-csv-preview.png[Preview pipeline from CSV in Kibana,align="center"] - -. To create the pipeline, click **Continue to create pipeline**. - -. On the **Create pipeline** page, you can add additional ingest processors to -your pipeline. -+ -When you're done, click **Create pipeline**. diff --git a/docs/migrating/images/kib-create-pipeline-from-csv-preview.png b/docs/migrating/images/kib-create-pipeline-from-csv-preview.png deleted file mode 100644 index a1f522daa9ba103984a77ab9ec01aac4ccd16186..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339125 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 T5qvlk@N-4i_+sgW8&UrO=BQT6 diff --git a/docs/migrating/images/kib-create-pipeline-from-csv.png b/docs/migrating/images/kib-create-pipeline-from-csv.png deleted file mode 100644 index b09b1990d2a7570a9486464baebbc8b3657da077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91345 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. - -If you have a custom pipeline or application you would like to convert to ECS, -please have a look at <>. - -include::products-solutions.asciidoc[] -include::converting.asciidoc[] diff --git a/docs/migrating/products-solutions.asciidoc b/docs/migrating/products-solutions.asciidoc deleted file mode 100644 index cea4c957dc..0000000000 --- a/docs/migrating/products-solutions.asciidoc +++ /dev/null @@ -1,18 +0,0 @@ -[[ecs-products-solutions]] -=== Products and Solutions that Support ECS - -The following Elastic products support ECS out of the box, as of version 7.0: - -* {beats-ref}/beats-reference.html[{beats}] -* {apm-guide-ref}/apm-overview.html[APM] -* {security-guide}/es-overview.html[Elastic Security] -** {security-guide}/siem-field-reference.html[Elastic Security Field Reference] - a list of ECS fields used in the Security app -* https://www.elastic.co/products/endpoint-security[Elastic Endpoint Security -Server] -* {observability-guide}/monitor-logs.html[Log Monitoring] -* Log formatters that support ECS out of the box for various languages can be found - https://github.com/elastic/ecs-logging/blob/master/README.md[here]. -* {observability-guide}/analyze-metrics.html[Metrics Monitoring] -* {ls}' {es} output has an {logstash-ref}/plugins-outputs-elasticsearch.html#_compatibility_with_the_elastic_common_schema_ecs[ECS compatibility mode] - -// TODO Insert community & partner solutions here diff --git a/docs/opentelemetry/index.asciidoc b/docs/opentelemetry/index.asciidoc deleted file mode 100644 index 89f5997701..0000000000 --- a/docs/opentelemetry/index.asciidoc +++ /dev/null @@ -1,69 +0,0 @@ -[[ecs-opentelemetry]] -== ECS & OpenTelemetry - -In April 2023, Elastic donated ECS to OpenTelemetry and together with the OTel community https://opentelemetry.io/blog/2023/ecs-otel-semconv-convergence/[jointly announced] -the intention to achieve convergence of ECS and https://opentelemetry.io/docs/specs/semconv/[OTel Semantic Conventions (SemConv)]. -This donation should be seen as a directional decision for the evolution of both standards -rather than a single event that merged both schemas into a single standard. - -While both schemes complement each other in large areas and thus offer mutual added value and great potential for convergence, -it is important to understand that in some areas convergence is not achievable due to conceptual differences or consistency reasons. -For example, while ECS contains a few fields (e.g. https://www.elastic.co/guide/en/ecs/current/ecs-container.html#field-container-disk-read-bytes[container.disk.read.bytes]) -that are meant to be used in a metric-like way, metrics in OpenTelemetry are following a completely different data model (with metric name, type, dimensions, etc.). -Also, in OTel semantic conventions there are some stable (or quasi-stable) attributes that have semantically equivalent, stable fields in ECS, however, with different field names. -This kind of differences require explicit handling to achieve compatibility. - -[float] -[[ecs-opentelemetry-relation]] -=== Relation between ECS and Semantic Conventions - -The https://github.com/elastic/ecs/tree/main/schemas[ECS schema files] contain an explicit mapping between ECS fields and corresponding OTel semnatic convention attributes. -This can be used to generate tooling for compatibility between ECS and semnatic conventions (e.g. alias fields in Elasticsearch). -The relation between individual ECS fields and corresponding OTel semantic conventions attributes follows one of the following categories: - -[%header] -|==== -| Category | Description - -| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match] -| The name of the ECS field is identical to the SemConv attribute name and has (practically) the same semantics. - -| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent] -| The ECS field name is different but has the same semantics as the corresponding SemConv attribute. -For this type of relation aliasing approaches (e.g. https://www.elastic.co/guide/en/elasticsearch/reference/current/field-alias.html[Elasticsearch field aliases]) can be used to achieve compatibility between ECS and OTel SemConv. - -| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related] -| The ECS field name is different and has related - yet different - semantics as the corresponding SemConv attribute. -An aliasing approach is not sufficient to resolve compatibility for this type of relation. - -| image:https://img.shields.io/badge/conflict-910000?style=flat[relation,title=conflict] -| The ECS field name is the same as an OTel SemConv namespace or an attribute that has significantly different semantics. - -| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=OTLP] -| The ECS field has a corresponding representation in https://github.com/open-telemetry/opentelemetry-proto[OpenTelemetry's protocol definition]. - -| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric] -| For this ECS field there is a corresponding metric defined in OTel SemConv. - -| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=na] -| The ECS field is not applicable in the context of OTel or won't be aligned due to significant, conceptual conflict with OTel concepts in that area. -|==== - - - -The following documentation pages provide an overview and more details on the alignment between ECS and OTel semantic conventions: - -- <> -- <> - - - -[[ecs-otel-alignment-overview]] -=== OTel Alignment Overview - -include::otel-mapping-summary.asciidoc[] - -[[ecs-otel-alignment-details]] -=== Field & Attributes Alignment - -include::otel-fields-mapping.asciidoc[] diff --git a/docs/opentelemetry/otel-fields-mapping.asciidoc b/docs/opentelemetry/otel-fields-mapping.asciidoc deleted file mode 100644 index 4e6d5f047a..0000000000 --- a/docs/opentelemetry/otel-fields-mapping.asciidoc +++ /dev/null @@ -1,2568 +0,0 @@ -//// -This file is automatically generated. Don't edit it manually! -//// -The following table gives an overview of mappings between individual ECS fields (in ECS version `9.0.0-dev`) -and corresponding OTel semantic convention attributes (in SemConv version `1.29.0`). - -[%header] -|==== -| ECS Field | Relation | OTel Semantic Conventions Attribute | Stability - -[[otel-mapping-namespace-base]] -4+e| *Base Fields* - -.3+| -[[otel-mapping-for-timestamp]] -<> - - - -^| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+time_unix_nano+%22&type=code[time_unix_nano] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== - - -^| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+observed_time_unix_nano+%22&type=code[observed_time_unix_nano] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== - - -^| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+start_time_unix_nano+%22&type=code[start_time_unix_nano] + - -Note: On logs, events and metrics, `time_unix_nano` defines the time of the event. For logs, `observed_time_unix_nano` defines the time when the event was observed by the collection system. On spans, `start_time_unix_nano` represents the start time of the span. - - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.2+| -[[otel-mapping-for-labels]] -<> - - - -^| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/k8s/#k8s-pod-label[k8s.pod.label] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== - - -^| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-label[container.label] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-message]] -<> - - - -^| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+body+%22&type=code[body] + - -Note: The `body` in OTLP is of type `Any` and can be either an unstructured log message or a structured event. - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-client]] -4+e| *Client Fields* - -.1+| -[[otel-mapping-for-client-address]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/client/#client-address[client.address] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-client-port]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/client/#client-port[client.port] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-cloud]] -4+e| *Cloud Fields* - -.1+| -[[otel-mapping-for-cloud-account-id]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-account-id[cloud.account.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-cloud-availability-zone]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-availability-zone[cloud.availability_zone] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-cloud-provider]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-provider[cloud.provider] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-cloud-region]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-region[cloud.region] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-cloud-service-name]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud/#cloud-platform[cloud.platform] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-container]] -4+e| *Container Fields* - -.1+| -[[otel-mapping-for-container-cpu-usage]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.container.cpu.usage+--%3E%22&type=code[container.cpu.usage] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-id]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-id[container.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-image-hash-all]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-image-repo-digests[container.image.repo_digests] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-image-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-image-name[container.image.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-image-tag]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-image-tags[container.image.tags] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-labels]] -<> - - - -^| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-label[container.label] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-memory-usage]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.container.memory.usage+--%3E%22&type=code[container.memory.usage] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-name[container.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-container-runtime]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container/#container-runtime[container.runtime] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-data_stream]] -4+e| *Data Stream Fields* - -.1+| -[[otel-mapping-for-data-stream-dataset]] -<> [beta] - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -.1+| -[[otel-mapping-for-data-stream-namespace]] -<> [beta] - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -.1+| -[[otel-mapping-for-data-stream-type]] -<> [beta] - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -[[otel-mapping-namespace-destination]] -4+e| *Destination Fields* - -.1+| -[[otel-mapping-for-destination-address]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/destination/#destination-address[destination.address] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-destination-port]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/destination/#destination-port[destination.port] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-device]] -4+e| *Device Fields* - -.1+| -[[otel-mapping-for-device-id]] -<> [beta] - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-id[device.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-device-manufacturer]] -<> [beta] - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-manufacturer[device.manufacturer] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-device-model-identifier]] -<> [beta] - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-model-identifier[device.model.identifier] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-device-model-name]] -<> [beta] - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/device/#device-model-name[device.model.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-dns]] -4+e| *DNS Fields* - -.1+| -[[otel-mapping-for-dns-question-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/dns/#dns-question-name[dns.question.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-ecs]] -4+e| *ECS Fields* - -.1+| -[[otel-mapping-for-ecs-version]] -<> - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -[[otel-mapping-namespace-error]] -4+e| *Error Fields* - -.1+| -[[otel-mapping-for-error-message]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/exception/#exception-message[exception.message] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-error-stack-trace]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/exception/#exception-stacktrace[exception.stacktrace] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-error-type]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/error/#error-type[error.type] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-faas]] -4+e| *FaaS Fields* - -.1+| -[[otel-mapping-for-faas-coldstart]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-coldstart[faas.coldstart] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-faas-execution]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-invocation-id[faas.invocation_id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-faas-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-name[faas.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-faas-trigger-type]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-trigger[faas.trigger] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-faas-version]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/#faas-version[faas.version] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-file]] -4+e| *File Fields* - -.1+| -[[otel-mapping-for-file-accessed]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-accessed[file.accessed] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-attributes]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-attributes[file.attributes] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-created]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-created[file.created] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-ctime]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-changed[file.changed] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-directory]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-directory[file.directory] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-extension]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-extension[file.extension] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-fork-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-fork-name[file.fork_name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-gid]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-group-id[file.group.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-group]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-group-name[file.group.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-inode]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-inode[file.inode] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-mode]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-mode[file.mode] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-mtime]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-modified[file.modified] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-name[file.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-owner]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-owner-name[file.owner.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-path]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-path[file.path] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-size]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-size[file.size] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-target-path]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-symbolic-link-target-path[file.symbolic_link.target_path] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-file-uid]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file/#file-owner-id[file.owner.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-geo]] -4+e| *Geo Fields* - -.1+| -[[otel-mapping-for-geo-city-name]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-locality-name[geo.locality.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-geo-continent-code]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-continent-code[geo.continent.code] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-geo-country-iso-code]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-country-iso-code[geo.country.iso_code] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.2+| -[[otel-mapping-for-geo-location]] -<> - - - -^| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-location-lat[geo.location.lat] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== - - -^| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-location-lon[geo.location.lon] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-geo-postal-code]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-postal-code[geo.postal_code] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-geo-region-iso-code]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo/#geo-region-iso-code[geo.region.iso_code] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-host]] -4+e| *Host Fields* - -.1+| -[[otel-mapping-for-host-architecture]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-arch[host.arch] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-cpu-usage]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.cpu.utilization+--%3E%22&type=code[system.cpu.utilization] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-disk-read-bytes]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.disk.io+--%3E%22&type=code[system.disk.io] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-disk-write-bytes]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.disk.io+--%3E%22&type=code[system.disk.io] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-id]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-id[host.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-ip]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-ip[host.ip] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-mac]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-mac[host.mac] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-name[host.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-network-egress-bytes]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.io+--%3E%22&type=code[system.network.io] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-network-egress-packets]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.packets+--%3E%22&type=code[system.network.packets] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-network-ingress-bytes]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.io+--%3E%22&type=code[system.network.io] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-network-ingress-packets]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.network.packets+--%3E%22&type=code[system.network.packets] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-type]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/host/#host-type[host.type] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-host-uptime]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.system.uptime+--%3E%22&type=code[system.uptime] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-http]] -4+e| *HTTP Fields* - -.1+| -[[otel-mapping-for-http-request-body-bytes]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-body-size[http.request.body.size] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-http-request-bytes]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-size[http.request.size] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.2+| -[[otel-mapping-for-http-request-method]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-method-original[http.request.method_original] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== - - -^| image:https://img.shields.io/badge/conflict-910000?style=flat[relation,title=conflict,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-request-method[http.request.method] + - -Note: `http.request.method` in SemConv is the known, normalized, upper case value of the request method, other than the ECS' `http.request.method` that retains casing from the original event. - - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-http-response-body-bytes]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-response-body-size[http.response.body.size] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-http-response-bytes]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-response-size[http.response.size] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-http-response-status-code]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/#http-response-status-code[http.response.status_code] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.2+| -[[otel-mapping-for-http-version]] -<> - - - -^| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-protocol-name[network.protocol.name] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== - - -^| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-protocol-version[network.protocol.version] + - -Note: In OTel SemConv, `network.protocol.version` specifies the HTTP version if the value of `network.protocol.name` is `http`. - - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-log]] -4+e| *Log Fields* - -.1+| -[[otel-mapping-for-log-file-path]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/log/#log-file-path[log.file.path] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-log-level]] -<> - - - -^| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+severity_text+%22&type=code[severity_text] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-network]] -4+e| *Network Fields* - -.1+| -[[otel-mapping-for-network-protocol]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-protocol-name[network.protocol.name] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-network-transport]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-transport[network.transport] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-network-type]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/#network-type[network.type] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-os]] -4+e| *Operating System Fields* - -.1+| -[[otel-mapping-for-os-full]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-description[os.description] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-os-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-name[os.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-os-type]] -<> - - - -^| image:https://img.shields.io/badge/conflict-910000?style=flat[relation,title=conflict,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-type[os.type] + - -Note: The expected values in ECS for `os.type` do not correspond with the values defined in semantic conventions! - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-os-version]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/os/#os-version[os.version] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-process]] -4+e| *Process Fields* - -.1+| -[[otel-mapping-for-process-args]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-command-args[process.command_args] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-args-count]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-args-count[process.args_count] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-command-line]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-command-line[process.command_line] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-executable]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-executable-path[process.executable.path] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.real_user.id - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-real-user-id[process.real_user.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.saved_user.id - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-saved-user-id[process.saved_user.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.user.id - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-user-id[process.user.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-interactive]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-interactive[process.interactive] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.real_user.name - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-real-user-name[process.real_user.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.saved_user.name - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-saved-user-name[process.saved_user.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.user.name - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-user-name[process.user.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.group_leader.pid - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-group-leader-pid[process.group_leader.pid] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-pid]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-pid[process.pid] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -process.session_leader.pid - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-session-leader-pid[process.session_leader.pid] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-title]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-title[process.title] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-uptime]] -<> - - - -^| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fsemantic-conventions+%22%3C%21--\+semconv+metric.process.uptime+--%3E%22&type=code[process.uptime] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-vpid]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-vpid[process.vpid] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-process-working-directory]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process/#process-working-directory[process.working_directory] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-related]] -4+e| *Related Fields* - -.1+| -[[otel-mapping-for-related-hash]] -<> - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -.1+| -[[otel-mapping-for-related-hosts]] -<> - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -.1+| -[[otel-mapping-for-related-ip]] -<> - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -.1+| -[[otel-mapping-for-related-user]] -<> - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -[[otel-mapping-namespace-server]] -4+e| *Server Fields* - -.1+| -[[otel-mapping-for-server-address]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/server/#server-address[server.address] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-server-port]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/server/#server-port[server.port] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-service]] -4+e| *Service Fields* - -.1+| -[[otel-mapping-for-service-environment]] -<> [beta] - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/deployment/#deployment-environment-name[deployment.environment.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-service-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/service/#service-name[service.name] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-service-node-name]] -<> - - - -^| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/service/#service-instance-id[service.instance.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-service-version]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/service/#service-version[service.version] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -[[otel-mapping-namespace-source]] -4+e| *Source Fields* - -.1+| -[[otel-mapping-for-source-address]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/source/#source-address[source.address] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-source-port]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/source/#source-port[source.port] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-tls]] -4+e| *TLS Fields* - -.1+| -[[otel-mapping-for-tls-cipher]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-cipher[tls.cipher] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-certificate]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-certificate[tls.client.certificate] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-certificate-chain]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-certificate-chain[tls.client.certificate_chain] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-hash-md5]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-hash-md5[tls.client.hash.md5] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-hash-sha1]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-hash-sha1[tls.client.hash.sha1] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-hash-sha256]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-hash-sha256[tls.client.hash.sha256] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-issuer]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-issuer[tls.client.issuer] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-ja3]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-ja3[tls.client.ja3] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-not-after]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-not-after[tls.client.not_after] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-not-before]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-not-before[tls.client.not_before] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-subject]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-subject[tls.client.subject] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-client-supported-ciphers]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-client-supported-ciphers[tls.client.supported_ciphers] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-curve]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-curve[tls.curve] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-established]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-established[tls.established] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-next-protocol]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-next-protocol[tls.next_protocol] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-resumed]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-resumed[tls.resumed] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-certificate]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-certificate[tls.server.certificate] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-certificate-chain]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-certificate-chain[tls.server.certificate_chain] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-hash-md5]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-hash-md5[tls.server.hash.md5] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-hash-sha1]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-hash-sha1[tls.server.hash.sha1] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-hash-sha256]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-hash-sha256[tls.server.hash.sha256] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-issuer]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-issuer[tls.server.issuer] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-ja3s]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-ja3s[tls.server.ja3s] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-not-after]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-not-after[tls.server.not_after] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-not-before]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-not-before[tls.server.not_before] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-tls-server-subject]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls/#tls-server-subject[tls.server.subject] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-tracing]] -4+e| *Tracing Fields* - -.1+| -[[otel-mapping-for-span-id]] -<> - - - -^| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+span_id+%22&type=code[span_id] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-trace-id]] -<> - - - -^| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=otlp,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://github.com/search?q=repo%3Aopen-telemetry%2Fopentelemetry-proto+%22\+trace_id+%22&type=code[trace_id] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-transaction-id]] -<> - - - -^| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=not-applicable,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| Not applicable. + - - -^| - -// =============================================================== -[[otel-mapping-namespace-url]] -4+e| *URL Fields* - -.1+| -[[otel-mapping-for-url-domain]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-domain[url.domain] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-url-extension]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-extension[url.extension] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-url-fragment]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-fragment[url.fragment] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-url-full]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-full[url.full] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-url-original]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-original[url.original] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-url-path]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-path[url.path] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-url-port]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-port[url.port] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-url-query]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-query[url.query] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-url-registered-domain]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-registered-domain[url.registered_domain] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-url-scheme]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-scheme[url.scheme] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-url-subdomain]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-subdomain[url.subdomain] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-url-top-level-domain]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url/#url-top-level-domain[url.top_level_domain] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-user]] -4+e| *User Fields* - -.1+| -[[otel-mapping-for-user-email]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-email[user.email] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-user-full-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-full-name[user.full_name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-user-hash]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-hash[user.hash] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-user-id]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-id[user.id] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-user-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-name[user.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-user-roles]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user/#user-roles[user.roles] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -[[otel-mapping-namespace-user_agent]] -4+e| *User agent Fields* - -.1+| -[[otel-mapping-for-user-agent-name]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user_agent/#user-agent-name[user_agent.name] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -.1+| -[[otel-mapping-for-user-agent-original]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user_agent/#user-agent-original[user_agent.original] + - - -^|image:https://img.shields.io/badge/✔-93c93e?style=flat[stable,title=stable] - -// =============================================================== -.1+| -[[otel-mapping-for-user-agent-version]] -<> - - - -^| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match,link=ecs-opentelemetry.html#ecs-opentelemetry-relation] - -<| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user_agent/#user-agent-version[user_agent.version] + - - -^|image:https://img.shields.io/badge/✘-fed10c?style=flat[experimental,title=experimental] - -// =============================================================== -|==== \ No newline at end of file diff --git a/docs/opentelemetry/otel-mapping-summary.asciidoc b/docs/opentelemetry/otel-mapping-summary.asciidoc deleted file mode 100644 index b1a9d9873d..0000000000 --- a/docs/opentelemetry/otel-mapping-summary.asciidoc +++ /dev/null @@ -1,1164 +0,0 @@ - -//// -This file is automatically generated. Don't edit it manually! -//// -The following table summarizes the alignment status by namespaces between ECS in version `9.0.0-dev` -and OpenTelemetry semantic conventions in version `1.29.0`. - -[cols="10*"] -|==== -h| -9+^h| Number of Fields / Attributes - -h| Namespace -^h| ECS -^h| OTel -^h| image:https://img.shields.io/badge/match-93c93e?style=flat[relation,title=match] -^h| image:https://img.shields.io/badge/equivalent-1ba9f5?style=flat[relation,title=equivalent] -^h| image:https://img.shields.io/badge/related-efc20d?style=flat[relation,title=related] -^h| image:https://img.shields.io/badge/conflict-910000?style=flat[relation,title=conflict] -^h| image:https://img.shields.io/badge/metric-cb00cb?style=flat[relation,title=metric] -^h| image:https://img.shields.io/badge/OTLP-ffdcb2?style=flat[relation,title=OTLP] -^h| image:https://img.shields.io/badge/n%2Fa-f2f4fb?style=flat[relation,title=na] - - -| Agent -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Android -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/android[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| artifact -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/artifact[7] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Autonomous System -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| ASP.NET Core -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/aspnetcore[7] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| General AWS -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/aws[42] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| az -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/az[2] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Base -^| <> -^| · -^| · -^| · -^| 2 -^| · -^| · -^| 4 -^| · - - -| Browser -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/browser[4] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| cicd -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cicd[6] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Client -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/client[2] -^| 2 -^| · -^| · -^| · -^| · -^| · -^| · - - -| Cloud -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloud[6] -^| 4 -^| 1 -^| · -^| · -^| · -^| · -^| · - - -| CloudEvents -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloudevents[5] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| cloudfoundry -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cloudfoundry[11] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Code -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/code[6] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Code Signature -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Container -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/container[13] -^| 4 -^| 2 -^| 1 -^| · -^| 2 -^| · -^| · - - -| CPU -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/cpu[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Data Stream -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| 3 - - -| General Database -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/db[27] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Deployment -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/deployment[4] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Destination -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/destination[2] -^| 2 -^| · -^| · -^| · -^| · -^| · -^| · - - -| Device -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/device[4] -^| 4 -^| · -^| · -^| · -^| · -^| · -^| · - - -| Disk -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/disk[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| DLL -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| DNS -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/dns[1] -^| 1 -^| · -^| · -^| · -^| · -^| · -^| · - - -| .NET -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/dotnet[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| ECS -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| 1 - - -| ELF Header -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Email -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Error -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/error[1] -^| 1 -^| 2 -^| · -^| · -^| · -^| · -^| · - - -| Event -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/event[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Exception -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/exception[4] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| FaaS -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas[16] -^| 3 -^| 2 -^| · -^| · -^| · -^| · -^| · - - -| Feature Flag -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/feature-flag[8] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| File -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/file[18] -^| 11 -^| 7 -^| · -^| · -^| · -^| · -^| · - - -| GCP Client -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/gcp[5] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| GenAI -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/gen-ai[22] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Geo -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/geo[7] -^| 1 -^| 4 -^| 2 -^| · -^| · -^| · -^| · - - -| Go -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/go[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| GraphQL -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/graphql[3] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Group -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Hash -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Heroku -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/heroku[3] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Host -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/host[15] -^| 5 -^| 1 -^| · -^| · -^| 8 -^| · -^| · - - -| HTTP -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/http[12] -^| 1 -^| 5 -^| 2 -^| 1 -^| · -^| · -^| · - - -| hw -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/hw[5] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Interface -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Java Virtual Machine (JVM) -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/jvm[7] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Kubernetes -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/k8s[26] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| linux -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/linux[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Log -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/log[7] -^| 1 -^| · -^| · -^| · -^| · -^| 1 -^| · - - -| Mach-O Header -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| General Messaging -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/messaging[37] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Network -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/network[16] -^| 2 -^| 1 -^| · -^| · -^| · -^| · -^| · - - -| Node.js -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/nodejs[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Observer -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Open Container Initiative (OCI) -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/oci[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| OpenTracing -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/opentracing[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Orchestrator -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Organization -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Operating System -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/os[5] -^| 2 -^| 1 -^| · -^| 1 -^| · -^| · -^| · - - -| OTel -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/otel[4] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Package -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| PE Header -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Peer -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/peer[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Process -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/process[33] -^| 15 -^| 2 -^| · -^| · -^| 1 -^| · -^| · - - -| profile -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/profile[1] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Registry -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Related -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| 4 - - -| Risk information -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Remote Procedure Call (RPC) -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/rpc[17] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Rule -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Server -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/server[2] -^| 2 -^| · -^| · -^| · -^| · -^| · -^| · - - -| Service -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/service[4] -^| 2 -^| 2 -^| · -^| · -^| · -^| · -^| · - - -| Session -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/session[2] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| SignalR -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/signalr[2] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Source -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/source[2] -^| 2 -^| · -^| · -^| · -^| · -^| · -^| · - - -| General System -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/system[12] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Telemetry -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/telemetry[5] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| test -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/test[4] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Thread -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/thread[2] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| Threat -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| TLS -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/tls[28] -^| 26 -^| · -^| · -^| · -^| · -^| · -^| · - - -| Tracing -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| 2 -^| 1 - - -| URL -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/url[13] -^| 12 -^| · -^| · -^| · -^| · -^| · -^| · - - -| User -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user[6] -^| 6 -^| · -^| · -^| · -^| · -^| · -^| · - - -| User agent -^| <> -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/user-agent[4] -^| 3 -^| · -^| · -^| · -^| · -^| · -^| · - - -| V8 JS -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/v8js[2] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| vcs -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/vcs[13] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| VLAN -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Volume -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Vulnerability -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - - -| Web Engine -^| · -^| https://opentelemetry.io/docs/specs/semconv/attributes-registry/webengine[3] -^| · -^| · -^| · -^| · -^| · -^| · -^| - - -| x509 Certificate -^| <> -^| · -^| · -^| · -^| · -^| · -^| · -^| · -^| · - -|==== diff --git a/docs/release-notes/8.0.1.asciidoc b/docs/release-notes/8.0.1.asciidoc deleted file mode 100644 index c49c4d0cb6..0000000000 --- a/docs/release-notes/8.0.1.asciidoc +++ /dev/null @@ -1,12 +0,0 @@ -[[ecs-release-notes-8.0.1]] -=== 8.0.1 - -[[tooling-changes-8.0.1]] -[float] -==== Tooling and artifact changes - -[[tooling-bugfixes-8.0.1]] -[float] -===== Bugfixes - -* Pin `markupsafe==2.0.1` to resolve `ImportError` exception. {ecs_pull}1804[#1804] diff --git a/docs/release-notes/8.0.asciidoc b/docs/release-notes/8.0.asciidoc deleted file mode 100644 index 4de5b03034..0000000000 --- a/docs/release-notes/8.0.asciidoc +++ /dev/null @@ -1,61 +0,0 @@ -[[ecs-release-notes-8.0.0]] -=== 8.0.0 - -[[schema-changes-8.0.0]] -[float] -==== Schema changes - -[[schema-breaking-8.0.0]] -[float] -===== Breaking changes - -* Remove `host.user.*` field reuse. {ecs_pull}1439[#1439] -* Remove deprecation notice on `http.request.method`. {ecs_pull}1443[#1443] -* Migrate `log.origin.file.line` from `integer` to `long`. {ecs_pull}1533[#1533] -* Remove `log.original` field. {ecs_pull}1580[#1580] -* Remove `process.ppid` field. {ecs_pull}1596[#1596] - -[[schema-added-8.0.0]] -[float] -===== Added - -* Added `faas.*` field set as beta. {ecs_pull}1628[#1628], {ecs_pull}1755[#1755] - -[[schema-improvements-8.0.0]] -[float] -===== Improvements - -* Wildcard type field migration GA. {ecs_pull}1582[#1582] -* `match_only_text` type field migration GA. {ecs_pull}1584[#1584] -* Threat indicator fields GA from RFC 0008. {ecs_pull}1586[#1586] - -[[tooling-changes-8.0.0]] -[float] -==== Tooling and artifact changes - -[[tooling-breaking-8.0.0]] -[float] -===== Breaking Changes - -* Removing deprecated --oss from generator {ecs_pull}1404[#1404] -* Removing use-cases directory {ecs_pull}1405[#1405] -* Remove Go code generator. {ecs_pull}1567[#1567] -* Remove template generation for ES6. {ecs_pull}1680[#1680] -* Update folder structure for generated ES artifacts. {ecs_pull}1700[#1700], {ecs_pull}1762[#1762] -* Updated support for overridable composable settings template. {ecs_pull}1737[#1737] - -[[tooling-improvements-8.0.0]] -[float] -===== Improvements - -* Align input options for --include and --subset arguments {ecs_pull}1519[#1519] -* Remove remaining Go deps after removing Go code generator. {ecs_pull}1585[#1585] -* Add explicit `default_field: true` for Beats artifacts. {ecs_pull}1633[#1633] -* Reorganize docs directory structure. {ecs_pull}1679[#1679] -* Added support for `analyzer` definitions for text fields. {ecs_pull}1737[#1737] - -[[tooling-bugfixes-8.0.0]] -[float] -===== Bugfixes - -* Fixed the `default_field` flag for root fields in Beats generator. {ecs_pull}1711[#1711] diff --git a/docs/release-notes/8.1.asciidoc b/docs/release-notes/8.1.asciidoc deleted file mode 100644 index df2f07ec8c..0000000000 --- a/docs/release-notes/8.1.asciidoc +++ /dev/null @@ -1,39 +0,0 @@ -[[ecs-release-notes-8.1.0]] -=== 8.1.0 - -[[schema-changes-8.1.0]] -[float] -==== Schema changes - -[[schema-added-8.1.0]] -[float] -===== Added - -* Added two new fields (sha384,tlsh) to hash schema and one field to pe schema (pehash). {ecs_pull}1678[#1678] -* Added `email.*` beta field set. {ecs_pull}1688[#1688], {ecs_pull}1705[#1705] - -[[schema-removed-8.1.0]] -[float] -===== Removed - -* Removing `process.target.*` reuses from experimental schema. {ecs_pull}1666[#1666] -* Removing RFC 0014 `pe.*` fields from experimental schema. {ecs_pull}1670[#1670] - -[[tooling-changes-8.1.0]] -[float] -==== Tooling and artifact changes - -[[tooling-improvements-8.1.0]] -[float] -===== Improvements - -* Update refs from master to main in USAGE.md etc {ecs_pull}1658[#1658] -* Clean up trailing spaces and additional newlines in schemas {ecs_pull}1667[#1667] -* Use higher compression as default in composable index template settings. {ecs_pull}1712[#1712] -* Bump dependencies. {ecs_pull}1782[#1782] - -[[tooling-bugfixes-8.1.0]] -[float] -===== Bugfixes - -* Fix invalid documentation link generation in component templates `_meta`. {ecs_pull}1728[#1728] diff --git a/docs/release-notes/8.10.asciidoc b/docs/release-notes/8.10.asciidoc deleted file mode 100644 index 20c7a80be6..0000000000 --- a/docs/release-notes/8.10.asciidoc +++ /dev/null @@ -1,31 +0,0 @@ -[[ecs-release-notes-8.10.0]] -=== 8.10.0 - -[[schema-changes-8.10.0]] -[float] -==== Schema changes - -[[schema-added-8.10.0]] -[float] -===== Added - -* Added `container.security_context.privileged` to indicated whether a container was started in privileged mode. {ecs_pull}2219[#2219], {ecs_pull}2225[#2225], {ecs_pull}2246[#2246] -* Added `process.thread.capabilities.permitted` to contain the current thread's possible capabilities. {ecs_pull}2245[#2245] -* Added `process.thread.capabilities.effective` to contain the current thread's effective capabilities. {ecs_pull}2245[#2245] - -[[schema-improvements-8.10.0]] -[float] -===== Improvements - -* Permit `ignore_above` if explicitly set on a `flattened` field. {ecs_pull}2248[#2248] - -[[tooling-changes-8.10.0]] -[float] -==== Tooling and artifact changes - -[[tooling-improvements-8.10.0]] -[float] -===== Improvements - -* Improved documentation formatting to better follow the contributing guide. {ecs_pull}2226[#2226] -* Bump `gitpython` dependency from 3.1.30 to 3.1.35 for security fixes. {ecs_pull}2251[#2251], {ecs_pull}2264[#2264], {ecs_pull}2265[#2265] diff --git a/docs/release-notes/8.11.asciidoc b/docs/release-notes/8.11.asciidoc deleted file mode 100644 index 91d35adfc9..0000000000 --- a/docs/release-notes/8.11.asciidoc +++ /dev/null @@ -1,28 +0,0 @@ -[[ecs-release-notes-8.11.0]] -=== 8.11.0 - -[[schema-changes-8.11.0]] -[float] -==== Schema changes - -[[schema-bugfixes-8.11.0]] -[float] -===== Bugfixes - -* Remove `expected_values` from `threat.*.indicator.name` fields. {ecs_pull}2281[#2281] - -[[schema-added-8.11.0]] -[float] -===== Added - -* Added `volume.*` as beta field set. {ecs_pull}2269[#2269] - -[[tooling-changes-8.11.0]] -[float] -==== Tooling and artifact changes - -[[tooling-bugfixes-8.11.0]] -[float] -===== Bugfixes - -* Respect reusable.top_level in Beats generator {ecs_pull}2278[#2278] diff --git a/docs/release-notes/8.16.asciidoc b/docs/release-notes/8.16.asciidoc deleted file mode 100644 index f96da18a24..0000000000 --- a/docs/release-notes/8.16.asciidoc +++ /dev/null @@ -1,38 +0,0 @@ -[[ecs-release-notes-8.16.0]] -=== 8.16.0 - -[[schema-changes-8.16.0]] -[float] -==== Schema changes - -[[schema-bugfixes-8.16.0]] -[float] -===== Bugfixes -* Fix broken link in docs for vulnerability.id. {ecs_pull}2328[#2328] - -[[schema-added-8.16.0]] -[float] -===== Added - -* Added `volume.*` as beta field set. {ecs_pull}2269[#2269] -* Advanced `process.env_vars` to GA. {ecs_pull}2315[#2315] -* Advanced `process.io` and `process.tty` fields to GA. {ecs_pull}2317[#2317] -* Added `threat.indicator.id`. {ecs_pull}2324[#2324] -* Added `process.group` to generated schemas. {ecs_pull}2335[#2335] - - -[[tooling-changes-8.16.0]] -[float] -==== Tooling and artifact changes - -[[tooling-bugfixes-8.16.0]] -[float] -===== Bugfixes -* Fix broken link for vulnerabilty.id {ecs_pull}2328[#2328] - -[[tooling-added-8.16.0]] -[float] -===== Added - -* Documentation in README.md providing instruction on contributions to ECS during the OTel donation {ecs_pull}2325[#2325] - diff --git a/docs/release-notes/8.2.1.asciidoc b/docs/release-notes/8.2.1.asciidoc deleted file mode 100644 index d942f18e67..0000000000 --- a/docs/release-notes/8.2.1.asciidoc +++ /dev/null @@ -1,23 +0,0 @@ -[[ecs-release-notes-8.2.1]] -=== 8.2.1 - -[[schema-changes-8.2.1]] -[float] -==== Schema changes - -[[schema-bugfixes-8.2.1]] -[float] -===== Bugfixes - -* Adding missing process fields for documentation. {ecs_pull}1906[#1906] - -[[tooling-changes-8.2.1]] -[float] -==== Tooling and artifact changes - -[[tooling-improvements-8.2.1]] -[float] -===== Improvements - -* Add type hints to `schema` modules. {ecs_pull}1771[#1771] -* Support `docs_only` param to subset defs. {ecs_pull}1909[#1909] diff --git a/docs/release-notes/8.2.asciidoc b/docs/release-notes/8.2.asciidoc deleted file mode 100644 index 7dc5171e83..0000000000 --- a/docs/release-notes/8.2.asciidoc +++ /dev/null @@ -1,41 +0,0 @@ -[[ecs-release-notes-8.2.0]] -=== 8.2.0 - -[[schema-changes-8.2.0]] -[float] -==== Schema changes - -[[schema-added-8.2.0]] -[float] -===== Added - -* Add beta `container.*` metric fields. {ecs_pull}1789[#1789] -* Add six new syslog fields to `log.syslog.*`. {ecs_pull}1793[#1793] -* Added `faas.id`, `faas.name` and `faas.version` fields as beta. {ecs_pull}1796[#1796] -* Added linux event model beta fields and reuses to support RFC 0030. {ecs_pull}1842[#1842], {ecs_pull}1847[#1847], {ecs_pull}1884[#1884] -* Added `threat.feed.dashboard_id`, `threat.feed.description`, `threat.feed.name`, `threat.feed.reference` fields. {ecs_pull}1844[#1844] - -[[schema-improvements-8.2.0]] -[float] -===== Improvements - -* `email.*` field set now GA. {ecs_pull}1794[#1794], {ecs_pull}1841[#1841] - -[[tooling-changes-8.2.0]] -[float] -==== Tooling and artifact changes - -[[tooling-added-8.2.0]] -[float] -===== Added - -* Adding optional field attribute, `pattern`. {ecs_pull}1834[#1834] -* Added support for re-using a fieldset as an array. {ecs_pull}1838[#1838] -* Added `--force-docs` option to generator. {ecs_pull}1879[#1879] - -[[tooling-improvements-8.2.0]] -[float] -===== Improvements -* Update refs from master to main in USAGE.md etc {ecs_pull}1658[#1658] -* Clean up trailing spaces and additional newlines in schemas {ecs_pull}1667[#1667] -* Use higher compression as default in composable index template settings. {ecs_pull}1712[#1712] \ No newline at end of file diff --git a/docs/release-notes/8.3.1.asciidoc b/docs/release-notes/8.3.1.asciidoc deleted file mode 100644 index 5a5b60c8e5..0000000000 --- a/docs/release-notes/8.3.1.asciidoc +++ /dev/null @@ -1,12 +0,0 @@ -[[ecs-release-notes-8.3.1]] -=== 8.3.1 - -[[schema-changes-8.3.1]] -[float] -==== Schema changes - -[[schema-deprecated-8.3.1]] -[float] -===== Deprecated - -* Deprecate `service.node.role` in favor of upcoming `service.node.roles`. {ecs_pull}1976[#1976] \ No newline at end of file diff --git a/docs/release-notes/8.3.asciidoc b/docs/release-notes/8.3.asciidoc deleted file mode 100644 index 2a6df7151c..0000000000 --- a/docs/release-notes/8.3.asciidoc +++ /dev/null @@ -1,25 +0,0 @@ -[[ecs-release-notes-8.3.0]] -=== 8.3.0 - -[[schema-changes-8.3.0]] -[float] -==== Schema changes - -[[schema-added-8.3.0]] -[float] -===== Added - -* Added `pattern` attribute to `.mac` fields. {ecs_pull}1871[#1871] -* Add `orchestrator.cluster.id`. {ecs_pull}1875[#1875] -* Add `orchestrator.resource.id`. {ecs_pull}1878[#1878] -* Add `orchestrator.resource.parent.type`. {ecs_pull}1889[#1889] -* Add `orchestrator.resource.ip`. {ecs_pull}1889[#1889] -* Add `container.image.hash.all`. {ecs_pull}1889[#1889] -* Add `service.node.role`. {ecs_pull}1916[#1916] -* Advanced `container.*` metric fields to GA. {ecs_pull}1927[#1927] - -[[schema-important-8.3.0]] -[float] -===== Important - -After adding `service.node.role`, it was realized that we intend for this field to have multiple values, and therefore we will be removing `role` and replacing with `roles` at the earliest opportunity. Please do not use `service.node.role`. \ No newline at end of file diff --git a/docs/release-notes/8.4.asciidoc b/docs/release-notes/8.4.asciidoc deleted file mode 100644 index e26cdd06c3..0000000000 --- a/docs/release-notes/8.4.asciidoc +++ /dev/null @@ -1,29 +0,0 @@ -[[ecs-release-notes-8.4.0]] -=== 8.4.0 - -[[schema-changes-8.4.0]] -[float] -==== Schema changes - -[[schema-added-8.4.0]] -[float] -===== Added - -* Initial set of `expected_values`. {ecs_pull}1962[#1962] -* Adding `service.node.roles`. {ecs_pull}1981[#1981] - -[[tooling-changes-8.4.0]] -[float] -==== Tooling and artifact changes - -[[tooling-added-8.4.0]] -[float] -===== Added - -* Introduce `expected_values` attribute. {ecs_pull}1952[#1952] - -[[tooling-improvements-8.4.0]] -[float] -===== Improvements - -* Additional type annotations. # {ecs_pull}1950[#1950] diff --git a/docs/release-notes/8.5.1.asciidoc b/docs/release-notes/8.5.1.asciidoc deleted file mode 100644 index 254f1d9018..0000000000 --- a/docs/release-notes/8.5.1.asciidoc +++ /dev/null @@ -1,12 +0,0 @@ -[[ecs-release-notes-8.5.1]] -=== 8.5.1 - -[[tooling-changes-8.5.1]] -[float] -==== Tooling and artifact changes - -[[tooling-bugfixes-8.5.1]] -[float] -===== Bugfixes - -* Fix type of `normalize` in `process.io.bytes_skipped`. {ecs_pull}2094[#2094] diff --git a/docs/release-notes/8.5.2.asciidoc b/docs/release-notes/8.5.2.asciidoc deleted file mode 100644 index b00717afc4..0000000000 --- a/docs/release-notes/8.5.2.asciidoc +++ /dev/null @@ -1,12 +0,0 @@ -[[ecs-release-notes-8.5.2]] -=== 8.5.2 - -[[schema-changes-8.5.2]] -[float] -==== Schema changes - -[[schema-bugfixes-8.5.2]] -[float] -===== Bugfixes - -* Fixes invalid `number` type on 4 `process.io` subfields. {ecs_pull}2105[#2105] diff --git a/docs/release-notes/8.5.asciidoc b/docs/release-notes/8.5.asciidoc deleted file mode 100644 index 4dd468377c..0000000000 --- a/docs/release-notes/8.5.asciidoc +++ /dev/null @@ -1,36 +0,0 @@ -[[ecs-release-notes-8.5.0]] -=== 8.5.0 - -[[schema-changes-8.5.0]] -[float] -==== Schema changes - -[[schema-added-8.5.0]] -[float] -===== Added - -* Adding `risk.*` fields as experimental. {ecs_pull}1994[#1994], {ecs_pull}2010[#2010] -* Adding `process.io.*` as beta fields. {ecs_pull}1956[#1956], {ecs_pull}2031[#2031] -* Adding `process.tty.rows` and `process.tty.columns` as beta fields. {ecs_pull}2031[#2031] -* Changed `process.env_vars` field type to be an array of keywords. {ecs_pull}2038[#2038] -* `process.attested_user` and `process.attested_groups` as beta fields. {ecs_pull}2050[#2050] -* Added `risk.*` fieldset to beta. {ecs_pull}2051[#2051], {ecs_pull}2058[#2058] -* Moved Linux event model fields to GA. {ecs_pull}2082[#2082] - -[[schema-improvements-8.5.0]] -[float] -===== Improvements - -* Advances `threat.enrichments.indicator` to GA. {ecs_pull}1928[#1928] -* Added `ios` and `android` as valid values for `os.type` {ecs_pull}1999[#1999] - -[[tooling-changes-8.5.0]] -[float] -==== Tooling and artifact changes - -[[tooling-bugfixes-8.5.0]] -[float] -===== Bugfixes - -* Added Deprecation Warning for `misspell` task {ecs_pull}1993[#1993] -* Fix typo in client schema {ecs_pull}2014[#2014] diff --git a/docs/release-notes/8.6.1.asciidoc b/docs/release-notes/8.6.1.asciidoc deleted file mode 100644 index 21870063a5..0000000000 --- a/docs/release-notes/8.6.1.asciidoc +++ /dev/null @@ -1,12 +0,0 @@ -[[ecs-release-notes-8.6.1]] -=== 8.6.1 - -[[schema-changes-8.6.1]] -[float] -==== Schema changes - -[[schema-bugfixes-8.6.1]] -[float] -===== Bugfixes - -* Fixing `tlp_version` and `tlp` field for threat. {ecs_pull}2156[#2156] diff --git a/docs/release-notes/8.6.asciidoc b/docs/release-notes/8.6.asciidoc deleted file mode 100644 index 142ff4e64e..0000000000 --- a/docs/release-notes/8.6.asciidoc +++ /dev/null @@ -1,21 +0,0 @@ -[[ecs-release-notes-8.6.0]] -=== 8.6.0 - -[[schema-changes-8.6.0]] -[float] -==== Schema changes - -[[schema-added-8.6.0]] -[float] -===== Added - -* Adding `vulnerability` option for `event.category`. {ecs_pull}2029[#2029] -* Added `device.*` field set as beta. {ecs_pull}2030[#2030] -* Added `tlp.version` to threat {ecs_pull}2074[#2074] -* Added fields for executable object format metadata for ELF, Mach-O and PE {ecs_pull}2083[#2083] - -[[schema-improvements-8.6.0]] -[float] -===== Improvements - -* Added `CLEAR` and `AMBER+STRICT` as valid values for `threat.indicator.marking.tlp` and `enrichments.indicator.marking.tlp` to accept new [TLP 2.0](https://www.first.org/tlp/) markings {ecs_pull}2022[#2022], {ecs_pull}2074[#2074] diff --git a/docs/release-notes/8.7.asciidoc b/docs/release-notes/8.7.asciidoc deleted file mode 100644 index 44a8ee64fe..0000000000 --- a/docs/release-notes/8.7.asciidoc +++ /dev/null @@ -1,37 +0,0 @@ -[[ecs-release-notes-8.7.0]] -=== 8.7.0 - -[[schema-changes-8.7.0]] -[float] -==== Schema changes - -[[schema-bugfixes-8.7.0]] -[float] -===== Bugfixes - -* Remove duplicated `client.domain` definition {ecs_pull}2120[#2120] - -[[schema-added-8.7.0]] -[float] -===== Added - -* Adding `name` field to `threat.indicator` {ecs_pull}2121[#2121] -* Adding `api` option to `event.category` {ecs_pull}2147[#2147] -* Adding `library` option to `event.category` {ecs_pull}2154[#2154] - -[[schema-improvements-8.7.0]] -[float] -===== Improvements - -* Description for `host.name` definition updated to encourage use of FDQN {ecs_pull}2122[#2122] - -[[tooling-changes-8.7.0]] -[float] -==== Tooling and artifact changes - -[[tooling-improvements-8.7.0]] -[float] -===== Improvements - -* Updated usage docs to include `threat.indicator.url.domain` and changed `indicator.marking.tlp` and `indicator.enrichments.marking.tlp` from "WHITE" to "CLEAR" to align with TLP 2.0. {ecs_pull}2124[#2124] -* Bump `gitpython` from `3.1.27` to `3.1.30` in `/scripts`. {ecs_pull}2139[#2139] diff --git a/docs/release-notes/8.8.asciidoc b/docs/release-notes/8.8.asciidoc deleted file mode 100644 index f94a5f1a84..0000000000 --- a/docs/release-notes/8.8.asciidoc +++ /dev/null @@ -1,25 +0,0 @@ -[[ecs-release-notes-8.8.0]] -=== 8.8.0 - -[[schema-changes-8.8.0]] -[float] -==== Schema changes - -[[schema-added-8.8.0]] -[float] -===== Added - -* Add `event.type: access` as an allowed value for `event.category: file`. {ecs_pull}2174[#2174] -* Add `orchestrator.resource.annotation` and `orchestrator.resource.label`. {ecs_pull}2181[#2181] -* Add `event.kind: asset` as a beta category. {ecs_pull}2191[#2191] - - -[[tooling-changes-8.8.0]] -[float] -==== Tooling and artifact changes - -[[tooling-added-8.8.0]] -[float] -===== Added - -* Add `parameters` property for field definitions, to provide any mapping parameter. {ecs_pull}2084[#2084] diff --git a/docs/release-notes/8.9.asciidoc b/docs/release-notes/8.9.asciidoc deleted file mode 100644 index eafdc36f15..0000000000 --- a/docs/release-notes/8.9.asciidoc +++ /dev/null @@ -1,18 +0,0 @@ -[[ecs-release-notes-8.9.0]] -=== 8.9.0 - -[[schema-changes-8.9.0]] -[float] -==== Schema changes - -[[schema-added-8.9.0]] -[float] -===== Added - -* Added `process.vpid` for namespaced process ids. {ecs_pull}2211[#2211] - -[[schema-deprecated-8.9.0]] -[float] -===== Deprecated - -* Removed `faas.trigger: nested` since we only have one trigger. {ecs_pull}2194[#2194] \ No newline at end of file diff --git a/docs/release-notes/index.asciidoc b/docs/release-notes/index.asciidoc deleted file mode 100644 index 01e792805a..0000000000 --- a/docs/release-notes/index.asciidoc +++ /dev/null @@ -1,49 +0,0 @@ -[[ecs-release-notes]] -== Release Notes - -This section summarizes the changes in each release. - -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> -* <> - -// Use these for links to issue and pulls. Note issues and pulls redirect one to -// each other on Github, so don't worry too much on using the right prefix. -:issue: https://github.com/elastic/ecs/issues/ -:pull: https://github.com/elastic/ecs/pull/ - -include::8.16.asciidoc[] -include::8.11.asciidoc[] -include::8.10.asciidoc[] -include::8.9.asciidoc[] -include::8.8.asciidoc[] -include::8.7.asciidoc[] -include::8.6.1.asciidoc[] -include::8.6.asciidoc[] -include::8.5.2.asciidoc[] -include::8.5.1.asciidoc[] -include::8.5.asciidoc[] -include::8.4.asciidoc[] -include::8.3.1.asciidoc[] -include::8.3.asciidoc[] -include::8.2.1.asciidoc[] -include::8.2.asciidoc[] -include::8.1.asciidoc[] -include::8.0.1.asciidoc[] -include::8.0.asciidoc[] diff --git a/docs/using-ecs/custom-fields.asciidoc b/docs/using-ecs/custom-fields.asciidoc deleted file mode 100644 index 897436e05f..0000000000 --- a/docs/using-ecs/custom-fields.asciidoc +++ /dev/null @@ -1,123 +0,0 @@ -[[ecs-custom-fields-in-ecs]] -=== Custom Fields - -ECS defines fields, their datatypes and their usage, and classifies them in -"core" and "extended" levels. - -However, ECS does not define anything about custom fields. By definition, they -are additional fields, exactly as the user or the integration defines them, -independently of ECS. - -Users and integrations are welcome to capture additional -information in their events, as custom fields. -This flexibility is by design, and ensures that no one is ever blocked by -something not being supported by ECS yet. - -ECS is under active development, however. Adding custom fields carries a small -risk of conflicting with a future ECS field. -There are ways of modeling custom fields that will lead to -lower chances of conflict with future versions of ECS. -This section outlines a few of these strategies. - -[float] -==== Modeling to Reduce Chances of Conflict - -[float] -===== The `labels` Field - -Any time a data source has a few extra fields that can be modeled with the -`keyword` data type, the simplest way to capture them is with the ECS field `labels`. - -Example: - -[source,json] -------------- -{ "labels": { "foo_id": "beef42", "env": "production" }, - "message": "...", - "event": { ... } -} -------------- - -If `labels` doesn't work for your use case, here's a few more tips to avoid conflicts. - -[float] -===== Proper Names - -ECS tries to model information by using the name of concepts, -and avoids proper names such as tool names, project names or company names. -By extension, nesting custom fields under a proper name is a relatively safe -approach to adding custom fields. This is the approach taken by Filebeats modules, -for example. - -As an example, an HTTP log from HAProxy will contain typical HTTP information, -as well as proxy details and statistics. The standard HTTP information can be -captured in the ECS field sets `http` and `url`, and the extra details in a custom -`haproxy` section: - -[source,json] -------------- -{ "http": { "request": { "method": "get", ... }, - "response": { "status_code": 200, ... } }, - "url": { "original": "/favicon.ico", ... }, - "haproxy": { "frontend_name": "myfrontend", "backend_name": "mybackend_prod", - "backend_queue": 0, ... } -} -------------- - -[float] -===== Capitalization - -ECS strives for a consistent feel by using nesting to group related concepts, -and underscores to join words. Following these guidelines for custom fields -ensures you preserve the same consistent experience throughout your schemas. - -Note however, that breaking away from these guidelines for your custom fields -can be used to your advantage. It can be a good way to differentiate -between ECS fields and custom fields. Since ECS doesn't -use capitalization for field names, this approach virtually guarantees that -custom fields will not conflict with future ECS fields. - -Common proxy concepts could modelled via a capitalized, but generic concept name. - -HAProxy example: - -[source,json] -------------- -{ "http": { "request": { "method": "get", ... } }, - "url": { "original": "/favicon.ico", ... }, - "Proxy": { "FrontendName": "myfrontend", "BackendName": "mybackend_prod" }, - "event": { "module": "haproxy" } -} -------------- - -NGINX example: - -[source,json] -------------- -{ "http": { "request": { "method": "get", ... } }, - "url": { "original": "/favicon.ico", ... }, - "Proxy": { "FrontendName": "another_frontend", "BackendName": "another_backend_prod" }, - "event": { "module": "nginx" } -} -------------- - -The above demonstrates that using a common concept name in custom fields -can still be beneficial to correlate among multiple sources that populate them. -Using capitalization ensures a future version of ECS that defines a `proxy` -field set will not conflict. - -Here's a sample event, during a migration from the custom field, to using a new -equivalent ECS field set: - -[source,json] -------------- -{ "http": { "request": { "method": "get", ... } }, - "Proxy": { "FrontendName": "myfrontend", "BackendName": "mybackend_prod" }, - "proxy": { "frontend_name": "myfrontend", "backend_name": "mybackend_prod" } -} -------------- - -The above will look strange during the migration. However the ability to start -populating ECS fields while custom fields are still present in your events makes -it possible to decouple the upgrade to a new version of ECS from the time you -adjust your pipelines and analysis content. diff --git a/docs/using-ecs/design.asciidoc b/docs/using-ecs/design.asciidoc deleted file mode 100644 index 9a4dd3a5d6..0000000000 --- a/docs/using-ecs/design.asciidoc +++ /dev/null @@ -1,59 +0,0 @@ -[[ecs-principles-design]] -=== Design Principles - -The considerations here form the basis of ECS design. These principles help guide -making the appropriate decisions for the project. - -[float] -==== A common schema - -A goal of ECS is to maximize interoperability and reuse. When expanding the concepts represented in ECS, -consider how broad or narrow the intended use cases are. - -Defining fields with narrow, lacking, or incorrect definitions limit future use. The best practice is to add -the fewest fields to adequately capture an event. Adding more fields in the future is less complicated than changing or removing -established ones. - -Also, avoid adding fields because a concept exists. For example, a network protocol specification may contain many features, -but some are obscure and used infrequently. Finally, avoid standardization for standardization’s sake. - - -[float] -==== Field sets are namespaces - -Field sets create independent schema sections for understanding a concept in isolation. - -Complex concepts may be better captured using nesting. A field set may contain several sub-components that make up a -larger concept: `dns.question.class`, `dns.question.answer`, `dns.question.type`. - -[float] -==== Naming consistency - -Consistent naming across the schema makes learning and memorizing field names easier. -Do not limit terms with broad meaning to a single case. - -Examples: - -* Many concepts can include a `.name` or `.id` value (for example, `event.id`, `error.id`, `group.id`, `rule.id`, `user.id`). -* Several potential IP addresses in a single event (`source.ip`, `destination.ip`, `host.ip`). - -[float] -==== Reuse - -Introducing extra fields may seem necessary when adding or expanding a concept. But, try to use an existing field -or reuse an existing field set to avoid duplicating fields. Leveraging consistent fields across event sources helps build more straightforward queries and visualizations. - -For example, imagine an app or framework produces a unique ID for each log it emits. Instead of adding a custom `.id` field specific to that app, -consider the `event.id` field. - -Reusing fields simplifies capturing several entities of a type within a single event. One example, the `user.*` field set and the reuse `user.target.*` allow collecting the -same detail about the acting and target users. Redefining the entire `user.*` field set is unnecessary. In limited use, consider an array of field set reuses if multiples of the same reuse need capturing. - -[float] -==== Custom fields are a feature - -Many situations will need custom fields to fully capture the event contents. Users and integrations are -encouraged to add custom fields to capture concepts not defined in ECS. Custom fields give users the flexibility to add fields for their internal use cases, -less common concepts, and experimentation. - -Following the <>, users and integrations can create a path for future migration if a similar concept appears in ECS. diff --git a/docs/using-ecs/getting-started.asciidoc b/docs/using-ecs/getting-started.asciidoc deleted file mode 100644 index 5383093fb2..0000000000 --- a/docs/using-ecs/getting-started.asciidoc +++ /dev/null @@ -1,290 +0,0 @@ -[[ecs-getting-started]] -=== Getting Started - -ECS enables and encourages users to normalize event data in order -to better analyze, visualize, and correlate their events. Collected events -can be normalized at ingest time, consistently searched across indices, -and visualized predictably. - -Note that when adopting an Elastic solution, such as https://www.elastic.co/observability[Observability] -or https://www.elastic.co/security[Security], all events will map to ECS out of the box. Elastic -provides an extensive set of https://www.elastic.co/integrations[integrations] to simplify -ingesting your data sources. - -If you rely on custom data pipelines and/or building content around specific needs, -ECS can still help to alleviate the challenges of searching, analyzing, and visualizing -across your data. Let's see how using a common schema can simplify the search experience, -and then take a look at how an event's contents can be mapped to ECS field sets. - -[float] -==== Simplified Search - -With ECS defining a normalized schema across all of your data sources, querying -against those sources is simplified. Consider searching for a particular source IP -address prior to adopting ECS. All the various data sources and their field mappings -would need to be considered in your query: - -[source,sh] ------------ -src:10.42.42.42 OR client_ip:10.42.42.42 OR apache.access.remote_ip:10.42.42.42 OR -context.user.ip:10.42.42.42 OR src_ip:10.42.42.42 ------------ - -With all sources mapped to ECS, the query becomes much simpler: - -[source,sh] ------------ -source.ip:10.42.42.42 ------------ - -Not only does this simplify writing queries, but saved queries shared with other -users become much more obvious. To gain familiarity with ECS fields, you can also -take a look at the <> section. - -[float] -==== Unified Visualizations - -With normalized data from different data sources, building insightful visualizations -across sources is simple. From a single, centralized dashboard, events from web servers, -IDS/IPS devices, and firewalls can be aggregated and visualized, and enhanced with drill-downs, -and pivoting for delving into deeper investigations. Centralized monitoring of diverse data -sources is straightforward with normalized ECS data. - -[role="screenshot"] -image:images/ecs-getting-started-dashboard.png[Simplify visualization using ECS] - - -[float] -==== Translating Data Sources - -To align events to ECS, some sort of parsing will usually be necessary -to transform the contents of the original event into the relevant ECS fields. Depending on -how you've designed your Elastic Stack data ingestion pipelines, the amount of work to parse -your events will vary. - -For example, an Apache web server log event: - -[source,sh] ------------ -10.42.42.42 - - [15/Jul/2020:20:48:32 +0000] "GET /content HTTP/1.1" 200 2571 "-" -"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) -Chrome/83.0.4103.106 Safari/537.36" ------------ - -In order to map this event to ECS, the contents of the event is associated with the -appropriate ECS fields. - -[options="header"] -|===== -| Field Name | Value - -// =============================================================== - -| @timestamp -| `2020-07-15T20:48:32.000Z` - -// ============================================================== - -| event.original -| 10.42.42.42 - - [15/Jul/2020:20:48:32 +0000] "GET /content HTTP/1.1" 200 2571 "-" -"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) -Chrome/83.0.4103.106 Safari/537.36 - -// ============================================================== - -| http.request.method -| GET - -// ============================================================== - -| http.response.body.bytes -| 2571 - -// ============================================================== - -| http.response.status_code -| 200 - -// ============================================================== - -| http.version -| 1.1 - -// ============================================================== - -| message -| GET /content HTTP/1.1" 200 2571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36 - -// ============================================================== - -| source.address -| 10.42.42.42 - -// ============================================================== - -| source.ip -| 10.42.42.42 - -// ============================================================== - -| url.original -| `/content` - -// ============================================================== - -| user_agent.original -| `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36` - -|===== - -Beyond extracting values that are present in the original event, we also populate -other fields to provide additional context about the event itself. - -* `ecs.version`: States which version of ECS the ingest pipeline was developed against. -* `event.dataset` and `event.module`: Answers "where is this event from" and are expected to have a - hardcoded value per pipeline, per source. -* `event.kind`, `event.category`, `event.type`, and `event.outcome`: The <> - should also be hardcoded using knowledge of each type of event the source emits. The contents of - these fields are limited to the specifically allowed values detailed in the ECS documentation. - -[options="header"] -|===== -| Field Name | Value - -// =============================================================== - -| ecs.version -| 1.5.0 - -// ============================================================== - -| event.module -| apache - -// =============================================================== - -| event.dataset -| apache.access - -// ============================================================== - -| event.kind -| event - -// =============================================================== - -| event.category -| [ "network", "web" ] - -// ============================================================== - -| event.type -| [ "access" ] - -// ============================================================== - -| event.outcome -| success - -|===== - -Lastly, existing field values can be interpreted or enriched using a processor, with the results -populating additional fields in the final event. - -* The `user_agent` processor extracts details from the original user agent string, `user_agent.original`. -* IP fields like `source.ip` can provide enrichment using the `geoip` processor to add information about the - location and autonomous system number (ASN) associated with an IP address. -* The `registered domain` processor reads a field containing a hostname and writes the registered domain to - another field -* Event collectors, such as {beats-ref}/beats-reference.html[Beats], can enrich - each event with metadata from the machine's hosting provider (cloud) and/or from the host machine (host). - -Here are some examples of additional fields processed by metadata or parser processors. - -[options="header"] -|===== -| Field Name | Value | Processor - -// ============================================================== - -| host.architecture -| x86_64 -| `add_host_metadata` - -// ============================================================== - -| host.hostname -| mbp.example.com -| `add_host_metadata` - -// ============================================================== - -| host.ip -| [ "192.168.1.100" ] -| `add_host_metadata` - -// ============================================================== - -| host.os.family -| darwin -| `add_host_metadata` - -// ============================================================== - -| host.os.kernel -| 19.4.0 -| `add_host_metadata` - -// ============================================================== - -| host.os.name -| Mac OS X -| `add_host_metadata` - -// ============================================================== - -| host.os.version -| 10.15.4 -| `add_host_metadata` - -// ============================================================== - -| user_agent.name -| Chrome -| `user_agent` - -// ============================================================== - -| user_agent.os.full -| Mac OS X 10.15.4 -| `user_agent` - -// ============================================================== - -| user_agent.os.name -| Mac OS X -| `user_agent` - -// ============================================================== - -| user_agent.os.version -| 10.15.4 -| `user_agent` - -// ============================================================== - -| user_agent.version -| 83.0.4103.106 -| `user_agent` - -|===== - -[float] -==== Field Mapping Reference Guides - -We've covered at a high level how to map your events to ECS. Now if you'd like your events to render well in the Elastic -solutions, check out the reference guides below to learn more about each: - -* {observability-guide}/logs-app-fields.html[Log Monitoring Field Reference] -* {observability-guide}/metrics-app-fields.html[Metrics Monitoring Field Reference] -* {security-guide}/siem-field-reference.html[Elastic Security Field Reference] diff --git a/docs/using-ecs/guidelines.asciidoc b/docs/using-ecs/guidelines.asciidoc deleted file mode 100644 index 6b0d3641ef..0000000000 --- a/docs/using-ecs/guidelines.asciidoc +++ /dev/null @@ -1,82 +0,0 @@ -[[ecs-guidelines]] -=== Guidelines and Best Practices - -The {ecs} schema serves best when you follow schema guidelines and best -practices. - -[discrete] -==== ECS Field Levels - -ECS defines "Core" and "Extended" fields. - -* *Core fields.* Fields that are most common across all use cases are defined as *core fields*. -+ -These generalized fields are used by analysis content -(searches, visualizations, dashboards, alerts, machine learning jobs, reports) -across use cases. Analysis content designed to operate on these -fields should work properly on data from any relevant source. -+ -Focus on populating these fields first. - -* *Extended fields.* Any field that is not a core field is defined as an *extended field*. -Extended fields may apply to more narrow use cases, or may be more open -to interpretation depending on the use case. Extended fields are more likely to -change over time. - -Each {ecs} <> in a table is identified as core or extended. - - - -[discrete] -==== General guidelines - -* The document MUST have the `@timestamp` field. -* Use the {ref}/mapping-types.html[data types] - defined for an ECS field. -* Use the `ecs.version` field to define which version of ECS is used. -* Map as many fields as possible to ECS. - - -[discrete] -===== Guidelines for field names - -* *Field names must be lower case* - -* *Combine words using underscore* - -* *No special characters except underscore* - -* *Use present tense* unless field describes historical information. - -* *Use singular and plural names properly* to reflect the field content. -** For example, use `requests_per_sec` rather than `request_per_sec`. - -* *Use prefixes for all fields*, except for the base fields. -** For example, all `host` fields are prefixed with `host.`. Such a grouping is - called a field set. - -* *Nest fields inside a field set* with dots -** The document structure should be nested JSON objects. - If you use Beats or Logstash, the nesting of JSON objects is done for you automatically. - If you're ingesting to Elasticsearch using the API, your fields must be nested - objects, not strings containing dots. -** See <> for more details. - -* *General to specific*. Organise the nesting of field sets from general to specific, - to allow grouping fields into objects with a prefix like `host.*`. - -* *Avoid repetition* or stuttering of words -** If part of the field name is already in the name of the field set, - avoid repeating it. Example: `host.host_ip` should be `host.ip`. -** Exceptions can be made, when changing the name of the field would break a - strong convention in the community. - Example: `host.hostname` is an exception to this rule. - -* *Avoid abbreviations when possible* -** Exceptions can be made, when the name used for the concept is too strongly - in favor of the abbreviation. - Example: `ip` fields, or field sets such as `os`, `geo`. - -include::guidelines/conventions.asciidoc[] -include::guidelines/implementation.asciidoc[] -include::guidelines/mapping-network-events.asciidoc[] diff --git a/docs/using-ecs/guidelines/conventions.asciidoc b/docs/using-ecs/guidelines/conventions.asciidoc deleted file mode 100644 index e0b804debc..0000000000 --- a/docs/using-ecs/guidelines/conventions.asciidoc +++ /dev/null @@ -1,84 +0,0 @@ -[[ecs-conventions]] -==== Conventions - -The implementation of ECS follows a few conventions. Understanding them will -help you understand ECS better. - -[discrete] -===== Datatype for integers - -Unless otherwise noted, the datatype used for integer fields should be `long`. - -[discrete] -===== IDs and most codes are keywords, not integers - -Despite the fact that IDs and codes (such as error codes) are often integers, -this is not always the case. -Since we want to make it possible to map as many systems and data sources -to ECS as possible, we default to using the `keyword` type for IDs and codes. - -Some specific kinds of codes are always integers, like HTTP status codes. -If those have a specific corresponding specific field (as HTTP status does), -its type can safely be an integer type. -But generic fields like `error.code` cannot have this guarantee, and are therefore `keyword`. - -[discrete] -===== Text indexing and multi-fields - -Elasticsearch can index text using datatypes: - -* *`text`* Text indexing allows for full text search, or searching arbitrary words that - are part of the field. - See {ref}/text.html[Text datatype] in the {es} Reference Guide. -* *`keyword`* Keyword indexing offers faster exact match filtering, - prefix search (like autocomplete), - and makes aggregations (like {kib} visualizations) possible. - See the {es} Reference Guide for more information on - {ref}/query-dsl-term-query.html[exact match filtering], - {ref}/query-dsl-prefix-query.html[prefix search], or - {ref}/search-aggregations.html[aggregations]. - -[discrete] -===== Default Elasticsearch convention for indexing text fields - -Unless your index mapping or index template specifies otherwise -(as the <> does), -Elasticsearch indexes a text field as `text` at the canonical field name, -and indexes a second time as `keyword`, nested in a multi-field. - -Default Elasticsearch convention: - -* Canonical field: `myfield` is `text` -* Multi-field: `myfield.keyword` is `keyword` - -[discrete] -===== ECS convention for indexing text fields - -ECS flips the above convention around. - -For monitoring use cases, `keyword` indexing is needed almost exclusively, with -full text search needed on very few fields. -Moreover, indexing for full text search on lots of fields, where it's not expected -to be used is wasteful of resources. - -Given these two premises, ECS defaults -all text indexing to `keyword` datatype (with very few exceptions). -Any use case that requires full text search indexing on additional fields -can add a {ref}/multi-fields.html[multi-field] -for full text search. Doing so does not conflict with ECS, -as the canonical field name will remain `keyword` indexed. - -So the ECS multi-field convention for text is: - -* Canonical field: `myfield` is `keyword` -* Multi-field: `myfield.text` is `text` - -**Exceptions** - -The only exceptions to this convention are fields `message` and `error.message`, -which are indexed for full text search only, with no multi-field. -These two fields don't follow the new convention because they are deemed too big -of a breaking change with these two widely used fields in Beats. - -Any future field that will be indexed for full text search in ECS will however -follow the multi-field convention where `text` indexing is nested in the multi-field. diff --git a/docs/using-ecs/guidelines/implementation.asciidoc b/docs/using-ecs/guidelines/implementation.asciidoc deleted file mode 100644 index 7ea0d1c152..0000000000 --- a/docs/using-ecs/guidelines/implementation.asciidoc +++ /dev/null @@ -1,230 +0,0 @@ -[[ecs-principles-implementation]] -==== Implementation patterns - -Normalizing data provides a more consistent view of events from various data sources. -Following these conventions will help to better describe, discover, identify, and categorize events. - -[discrete] -===== Base fields - -The group of individual fields residing outside any field set at the top-level of ECS -are known as base fields. - -ECS events follow these conventions with the base fields: - -@timestamp:: -All events must populate <> with the event's original timestamp. - -message:: -Most events should populate <>. - -ecs.version:: -The referenced <> used to develop the data mapping or ingest pipeline. -This value helps detect when mappings update or fall behind. -It can also help explain why a particular data source isn't populating the same fields as another. - -tags and labels:: -The <> and <> fields add simple metadata as `keyword` values. - -[discrete] -===== Host - -In ECS, the `host` is the computing instance where the event happened. A `host` can be a physical device, virtual machine, container, or cloud instance. - -The <> field set contains common attributes for different computing instances. -Certain host types have more fields to capture specific details, like -`cloud.*` or `container.*`. - -[discrete] -===== Agent and observer - -An agent is software that collects, observes, measures, or detects the event. -The <> fields capture details about which agent entity captured the event, -including the agent's version. Examples of agents are Beats and Elastic Agent. - -An `observer` is an external monitoring or intermediary device, like a firewall, APM server, or web proxy. -These devices monitor and detect network, security, application events. Capture the details for these device -types in the <> field set. - -[discrete] -===== Timestamps - -ECS requires the `@timestamp` field on every event. Some events also contain extra timestamps to capture. - -@timestamp:: -All events must populate <> with when the event originated. - -event.created:: -The timestamp of when an agent or pipeline saw the event. - -event.ingested:: -The timestamp of when an event arrived in the central data store, like Elasticsearch. - -These three timestamps should typically follow a chronological order: - -[source,sh] ----- -@timestamp < event.created < event.ingested ----- - -event.start:: -This timestamp marks the beginning of the event activity. For example, in a network session, <> -is the timestamp of the first observed packet in the flow. - -event.end:: -This timestamp marks the end of the activity. In a network flow, <> is the timestamp of the last observed packet -in the flow. - -event.duration:: -The difference of `event.end` and `event.start`: - -[source,sh] ----- -event.duration = event.end - event.start ----- - -[discrete] -===== Origin - -Specific `event.*` fields exist to capture where an event originated. - -event.provider:: -Contains the name of the software or operating subsystem that generated the event. - -event.module:: -If the ingest agent or pipeline has a concept of modules or plugins, populate <> with the module or plugin name. - -event.dataset:: -Used to define different types of logs or metrics from an event source. The recommended -convention is `.`. For Apache web server access logs, the -<> value will be `apache.access`. - -[discrete] -===== Categorization - -The event categorization fields group similar events using allowed values for four fields: - -* `event.kind` -* `event.category` -* `event.type` -* `event.outcome` - -<> covers more details on using these four fields together to categorize events. - -[discrete] -===== Enriching events - -A monitoring agent or ingest pipeline can add more details to the original event. -ECS has many fields to hold these enrichment details. - -[discrete] -===== Lookups - -GeoIP:: -Add information about the geographical location of an IPv4 or IPv6 address. Often used to populate the `geo.*` -fields nested under network transaction fields like `source.*`, `destination.*`, `client.*`, and `server.*`. - -[source,json] ----- -{ - "source": { - "address": "8.8.8.8", - "ip": "8.8.8.8", - "geo": { - "continent_name": "North America", - "country_name": "United States", - "country_iso_code": "US", - "location": { "lat": 37.751, "lon": -97.822 } - } - } -} ----- - -Autonomous system number:: -Autonomous System Number (ASN) database lookups determine the ASN associated with an IP address. - -[discrete] -===== Parsing - -User-agent:: -Break the user-agent into individual fields. - -[source,json] ----- -{ - "user_agent": { - "user_agent": { - "name": "Chrome", - "original": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36", - "version": "51.0.2704.103", - "os": { - "name": "Mac OS X", - "version": "10.10.5", - "full": "Mac OS X 10.10.5", - "platform": "darwin", - "type": "macos" - }, - "device" : { - "name" : "Mac" - } - } - } -} ----- - -URL:: -A URL can also break down into its discrete parts. - -[source,json] ----- -{ - "original" : "http://myusername:mypassword@www.example.com:80/foo.gif?key1=val1&key2=val2#fragment", - "url" : { - "path" : "/foo.gif", - "fragment" : "fragment", - "extension" : "gif", - "password" : "mypassword", - "original" : "http://myusername:mypassword@www.example.com:80/foo.gif?key1=val1&key2=val2#fragment", - "scheme" : "http", - "port" : 80, - "user_info" : "myusername:mypassword", - "domain" : "www.example.com", - "query" : "key1=val1&key2=val2", - "username" : "myusername" - } -} ----- - -Domain names:: -Extract the registered domain (also known as the effective top-level domain plus one), -sub-domain, and effective top-level domain from a fully-qualified domain name (FQDN). - -[source,json] ----- -{ - "fqdn": "www.example.ac.uk", - "url": { - "subdomain": "www", - "registered_domain": "example.ac.uk", - "top_level_domain": "ac.uk", - "domain": "www.example.ac.uk" -} ----- - -[discrete] -===== Related fields - -Many events have similar content populating different fields: IP addresses, file hashes, hostnames. -Pivot between these events using the <> fields. - -For example, IP addresses found under the `host.*`, `source.*`, `destination.*`, `client.*`, and -`server.*` fields sets and the `network.forwarded_ip` field. By adding all IP addresses in an event to -the `related.ip` field, there is now a single field to search for a given IP regardless of what field it -appeared: - - -[source,sh] ----- -related.ip: ["10.42.42.42"] ----- diff --git a/docs/using-ecs/guidelines/mapping-network-events.asciidoc b/docs/using-ecs/guidelines/mapping-network-events.asciidoc deleted file mode 100644 index d1df81f478..0000000000 --- a/docs/using-ecs/guidelines/mapping-network-events.asciidoc +++ /dev/null @@ -1,269 +0,0 @@ -[[ecs-mapping-network-events]] -==== Mapping network events - -Network events capture the details of one device communicating with another. The initiator is referred to as the source, and the recipient as the destination. Depending on the data source, a network event can contain details of addresses, protocols, headers, and device roles. - -This guide describes the different field sets available for network-related events in ECS and provides direction on the ECS best practices for mapping to them. - -[discrete] -===== Source and destination baseline - -When an event contains details about the sending and receiving hosts, the baseline for capturing these values will be the <> and <> fields. - -Some events may also indicate each host's role in the exchange: client or server. When this information is available, the <> and <> fields should be used _in addition to_ the `source` and `destination` fields. The fields and values mapped under `source`/`destination` should be copied under `client`/`server`. - -[discrete] -===== Network event mapping example - -Below is a DNS network event. The source device (`192.168.86.222`) makes a DNS query, acting as the client and the DNS server is the destination (`192.168.86.1`). - -Note this event contains additional details that would populate additional fields (such as the <>) if this was a complete mapping example. These additional fields are omitted here to focus on the network details. - -[source,json] ----- -{ - "ts":1599775747.53056, - "uid":"CYqFPH3nOAa0kPxA0d", - "id.orig_h":"192.168.86.222", - "id.orig_p":54162, - "id.resp_h":"192.168.86.1", - "id.resp_p":53, - "proto":"udp", - "trans_id":28899, - "rtt":0.02272200584411621, - "query":"example.com", - "qclass":1, - "qclass_name":"C_INTERNET", - "qtype":1, - "qtype_name":"A", - "rcode":0, - "rcode_name":"NOERROR", - "AA":false, - "TC":false, - "RD":true, - "RA":true, - "Z":0, - "answers":["93.184.216.34"], - "TTLs":[21209.0], - "rejected":false -} ----- - -[discrete] -===== Source and destination fields - -First, the `source.*` and `destination.*` field sets are populated: - -[source,json] ----- - "source": { - "ip": "192.168.86.222", - "port": 54162 - } ----- - -[source,json] ----- - "destination": { - "ip": "192.168.86.1", - "port": 53 - } ----- - -[discrete] -===== Client and server fields - -Looking back at the original event, it shows the source device is the DNS client and the destination device is the DNS server. The values mapped under `source` and `destination` are copied and mapped under `client` and `server`, respectively: - -[source,json] ----- - "client": { - "ip": "192.168.86.222", - "port": 54162 - } ----- - -[source,json] ----- - "server": { - "ip": "192.168.86.1", - "port": 53 - } ----- - -Mapping both pairs of field sets gives query visibility of the same network transaction in two ways. - -* `source.ip:192.168.86.222` returns all events sourced from `192.168.86.222`, regardless its role in a transaction -* `client.ip:192.168.86.222` returns all events with host `192.168.86.222` acting as a client - -The same applies for the `destination` and `server` fields: - -* `destination.ip:192.168.86.1` returns all events destined to `192.168.86.1` -* `server.ip:192.168.86.1` returns all events with `192.168.86.1` acting as the server - -It's important to note that while the values for the `source` and `destination` fields may reverse between events in a single network transaction, the values for `client` and `server` typically will not. The following two tables demonstrate how two DNS transactions involving two clients and one server would map to `source.ip`/`destination.ip` vs. `client.ip`/`server.ip`: - -[options="header"] -.Source/Destination -|===== -| source.ip | destination.ip | event - -// =============================================================== - -| 192.168.86.222 -| 192.168.86.1 -| DNS query request 1 - -// =============================================================== - -| 192.168.86.1 -| 192.168.86.222 -| DNS answer response 1 - -// =============================================================== - -| 192.168.86.42 -| 192.168.86.1 -| DNS answer request 2 - -// =============================================================== - -| 192.168.86.1 -| 192.168.86.42 -| DNS answer request 2 - -|===== - -[options="header"] -.Client/Server -|===== -| client.ip | server.ip | event - -// =============================================================== - -| 192.168.86.222 -| 192.168.86.1 -| DNS query request 1 - -// =============================================================== - -| 192.168.86.222 -| 192.168.86.1 -| DNS answer response 1 - -// =============================================================== - -| 192.168.86.42 -| 192.168.86.1 -| DNS query request 2 - -// =============================================================== - -| 192.168.86.42 -| 192.168.86.1 -| DNS answer response 2 - -|===== - -[discrete] -==== Related fields - -The `related.ip` field captures all the IPs present in the event in a single array: - -[source,json] ----- - "related": { - "ip": [ - "192.168.86.222", - "192.168.86.1", - "93.184.216.34" - ] - } ----- - -The <> are meant to facilitate pivoting. Since these IP addresses can appear in many different fields (`source.ip`, `destination.ip`, `client.ip`, `server.ip`, etc.), you can search for the IP trivially no matter what field it appears using a single query, e.g. `related.ip:192.168.86.222`. - -Network events are not only limited to using `related.ip`. If hostnames or other host identifiers were present in the event, `related.hosts` should be populated too. - -[discrete] -===== Categorization using event fields - -When considering the <>, the `category` and `type` fields are populated using their respective allowed values which best classify the source network event. - -[source,json] ----- - "event": { - "category": [ - "network" - ], - "type": [ - "connection", - "protocol" - ], - "kind": "event" - } ----- - -Most <>/<> ECS pairings are complete on their own. However, the pairing of `event.category:network` and `event.type:protocol` is an exception. When these two fields/value pairs both used to categorize an event, the `network.protocol` field should also be populated: - -[source,json] ----- - "network": { - "protocol": "dns", - "type": "ipv4", - "transport": "udp" - } ----- - -[discrete] -===== Result - -Putting everything together covered so far, we have a final ECS-mapped event: - -[source,json] ----- -{ - "event": { - "category": [ - "network" - ], - "type": [ - "connection", - "protocol" - ], - "kind": "event" - }, - "network": { - "protocol": "dns", - "type": "ipv4", - "transport": "udp" - }, - "source": { - "ip": "192.168.86.222", - "port": 54162 - }, - "destination": { - "ip": "192.168.86.1", - "port": 53 - }, - "client": { - "ip": "192.168.86.222", - "port": 64734 - }, - "server": { - "ip": "192.168.86.1", - "port": 53 - }, - "related": { - "ip": [ - "192.168.86.222", - "192.168.86.1", - "93.184.216.34" - ] - }, - "dns": { ... }, <1> - "zeek": { "ts":1599775747.53056, ... } <2> -} ----- -<1> Again, not diving into the DNS fields here but included for completeness. -<2> Original fields can optionally be kept around as custom fields. diff --git a/docs/using-ecs/images/ecs-getting-started-dashboard.png b/docs/using-ecs/images/ecs-getting-started-dashboard.png deleted file mode 100644 index 5d10c1db520bb6b0fbb9aa25a77d6264e40dc7f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297021 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�)puMApLmP(V3YQ8;l&h9(aXMz$7 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�QpAXm(m3sH>}M(5*ag&&@VM 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

-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%0Ad@ zz(?1Gh>l<7+NJbvf75-x9W(dSQ03?dW13*FIw5rTr|A^$WYCu@*AF^qJVe)u?fx_0 zz1ZoKy%bo>f?rh}?rUJ){aGg+G3R-Wxous1 zXihO~R*Mtoh8EVnNZ38;6w|OfEl@;qe^Nu@)Wx=hNRY=l-G8iU*^ME!N zgZ3hgbibw1l5=MB#Kw`5>5R@KOR>G!E0-O6g`gL}j98rKwnPQ4##g^$*^4l)?-v_fTQto$0V93#> z9u4?6m-4YQ4bNR_a(PuTv> z69~^oznKs%O`+haFYqbe-X^wPX~9dBR-w>#369EQo|e6se_cSaw^6i(g+fj88#BIv zBkOjobJWG_GAHDx(i{c~!6iRkChT^E)kDQYzt%?m?8EP|*0>Qr_g^y%p(ULlsEYpR zUXVp9yuU%jys0FO&8;Hd-bNDxlr&<mo*DW~T&-UOC%CPv1ZRAz_M5U?$B*QfGavAH26Zaw> zy4&z(qep}_Nh+u0IEmWR=)YVZ@shD2MBKO{60~(sZfQz%uGXVd=ISBmu6lJp)5_ll zpwOWX7KqVw$Jf?}D?K^X1g)Vox;}THlOL%Rx5DE-hd-;6Sz9f%W zP|k}SOvK+3)|SHM74@@REKzZp7v0hG%J=H6ha3(w3|)aiJCpfyr}tu*uH63J%`S9` z29b<_l3Dh=Pg?D44PF%wsx|2UaHVx+$3*idBthWS=W+GaiIZvIH?PUNw=_C!JEmZc zRFISNvR=#gJT7RqXw`ozEAd--{YIIU`7l3cz#sfSVxQ!0zKN}@M=Bl0v9g*yAcW>t z?nxr=0uuRje`&P7zWYYB|zeP?W1zrzKGsKBG-W~B7f1<0a%lIV3`Lsf{m$N5+tiWA-FF3!n+3i-gl%lDj zA*-le9k;l+xQKnnrtbu|aN{?1x2&)#i+Ygzm@%&!nSc$0y^$o+{x%Rzc-T6lMOcnr zR%SV9=_MAEkSFZcTYX#-=CgnL>0Gil-LB71 z3i#vcOluepw@^TA3eVpR=okV9E);@vFnqgDh5qU8i(lvE=3g<9>l z1BKWLd(6D+-hxB8{b#!?NC^wQ?>Ss6cvOQPhS=s+{;8ZBOzj*SeQKot+5^5)R(uTHvQulnAX=FC|yTYH{n`>tYn`ljIR z3+Q*xwRF^{>{JicpRqbI5?n16(RFsr14k*q$#?qU{kUK=LtB-9O#}G^&nXVu(4g^k zR1qyG#iew#hea4vFKA+7GSA}6bAMxmkZg?IBICjja|8J8{UmNy+aq15rtu1Q$R=qx zeik1jmokRPG$8D@Y`Coi>^A_}Z>BBH4kBF!v4P$S;!8T6LuLI9`UICNSAxFb$`!sl zX}kK08I1Ru`qb+R-F<4Tx7rq90k7RseHEVkO5dmOReCycIU;A5@SW|LEBH3x1tg3g zd0Q>tT@3UxyrZqHW^b?NJk-ZJ${%CfN}jO@Le_ohw6e0gZenVRiH@}LQsJv#^RN0(*Omhp2hR0ecDJ#S!pF(%Au|2=0Vo+V9dfXjSX;!;OwKNK zV!l2LnrA7`gXjWx45Me~%*_qmO2bZDqE5@Nj17kiQ1 zxbWV#HCEqWTIN#gzh<%-uw><3`C!6Dmn?}!Q&cH;80|E>Me&qm(tP4z5$5M2VafWi z_0pt@pW2?n`=3Atk|?KWS{a_49jvz_VVH!Zn$rthunSpPSyuPcgb|=JY5d1M5jJTj zEBP7Y4LYQ?{UIx=1{oQ=Rs)Fv#TOY0OgZ*bpxymHQytuFruP6vzo)!Y$ze~F>D0?Q zQj#?*%{u)3dyy}MC_7X{B;v!z#;T`DFZbZD71Msl?wJ-n7Y^;PWW{b#$fE8P27~GD z?d8N`v63rH_InAJb9Pb>joLI7`q&-)(uJk$WqV?az;@DVI!zI9M(hYK-Tu}4yOvU5 zg(`sg1E!-+!R_5MGPj9roRr497X!4sgN%>yk)=x#P>B;)>7+d>pRfl-dI!W5Ks~Rt z)p+Xuj)h=xoE`dW4&qPzOUtKKIqX2)zi%Ivdfoe7#6Q-;EspvGp6>tJw8VS#!>M!c zbd>Qbp|qioJaxZC&|cts0l#p}pE2{|iz{g_LR(bseG@XcNyEr->=xr(k8JwE8~(Ta z?4MV+3aQ^$emi=JoJbat^_cF%r>t$Q`3ClcYiz8`_+COMfH!`11x{x4t3`zJbV zlVuq|GYit7YtW_}RTgeXOZ=^pH%MXj5C8P|zkY|-K3enhijQLU6#%z))3MI&ys=-p zc;}vvJyK!1{lX?b_{u<$l;0!{TskOvbkC%Kvuu+X#UHdUeU6p&`z^x}sUp2qy#s6H& zK(LFL=Y5l3To7zHaP_JMw_|Vc82~GqYrLj&@bLQ2g|f`->;+_|!a}chy^f8|2NoDn zr7lG{YOiG2o}>Y!tWMj?8UtWcz$lOC7srk<2t$Gl2VLbD1=eCjIEgL!+zj)hwjrL7 z)(7$)re1>M-X;yxTY2c8PsH7BStD}~lD6g<^YS;SVmQ8M2S_4iOE+t`?nA-) zCBAj$!^0k9y|VbWl4+xQn0)OPTI1NUV{HQ-c6(Lq&zU>oQHFn0z9p+YjKG(sRD;Kr zMypBzA#s)*J7u@_O@@;gDySGRBmPrtaoULlU2v3N+p5pCsEiwfmZn?x2fDkRy^!~= zPi$j-{o}_}_jmbWv4V=^l@h_zQ~11;-dFpu%{SZqD}od5(R&rK5)Fq-?BTdM+0X30 zBNcC|>L9#C?Z=FJwAR6LK)VIt1lnLh(z!bTALKM{b-)38y3!l7<7zw)1S}x;`@0QU zj*h3l=fbgDGISww!8b%n10MMa!nhf@RIcMVu58*$RudKdatP?s@|G9p4%3!$pK!@f z`1u$-_w}Ne9mNN@2%d5)noqxLCKdYQjr6rEdvpe`S$EWk@BDdPOlp9-x_UD~UiA@5 z>kULQrGW+T-F3rL84*a2-x{f)OYLTeK*Z%4|5?mz~%3JSrpPMa0FDRH#c z7ar}+#P|VlalkQ*QGa+8nAWQ+1qa{0b*EH$6fcFx_LeH*MxwfC6F=4=>Z6KKsL7 zxPDMm3&5VzQc68X^bLrJeJa$YM)2Lq_mh6#tS&#ED`uJLz(sAkk&j4awy^YaC=5cxf2#Aia-h|w1eun`{jCx zoiK!kWfK|cmTy%XG;D-1w=Q4`=#Pn{lODt%wP#~Y@d%>4SIZ@E0JfhnQ&Tn9TV7AV z4Q0#XYxK22OGf7O%Ju*1BmVTg|Jgr08a{ZW%isNxg!D#!O7d#)l!Lyr@Je< zwR4S%PSTe8tuy`cUGE+Yjs)4Jm_f_|^531|zipab;VOM5&(foupO28g=KAG@9iQpQ zc$Fk|Q9dTkyjRkwlhJnn+E@89{SvcJ`oQ`P?_qLMU$%El_PETU2SH~8GH*Ny9VB7=E9bX-kFwc{&$Xy86aiBmb(Qi-&3@7&y+QE@PBsIYz({#7Q&Pz$Q&pkl7zyC;;vm zUa058K}4S6ZE`JYNs**2=H!SjuIK*M#Nz@w$xFRZcfFzP^5f1Bi{9`C2tE#B9+L6) zw62T}V9KoAW_&R@`wB2;N4%&MV%XZqhpVUu7OzvXVS#AQl2p!h%`oWQF6W7GsdU37gE7V{kHOd4%EMp+B zNQ0i5vJo^czQZBu()0MBf{_LuU6#=l$?^01XZbyHN9V`3vROVNkQ-Y|r;rxm`_kb} zug>It`g97w>}~sse|}5>nz7(K-nqm_FRP;7q@S-4wf42IXZ<+6Oi*!tK~IYH(Rq33 zlQkoOE^W(n6&Ltos{Q2M{3w_9$M6)V++&%vi+E?rXYz_1%wD%8*D87uW^4E$_@UK$ zZ4hYY@pl62$hlpZi+|O}gJyto#U6BspbnQN}OX2w9mev~tr#Zk(1cv2ih#Q&(||2QhH zenJIh{v?YQ6h{Y`+DwMyy7fS6`B|yKzN(L)TDzQ=({kTx9KtL{DsWfg9F{^00g-^!=`w*pX`Qwb#N z#(XJ0QvX=JobZeJyD>zj$l%}5$;E~4id0e_10@-|Y@fA)>kv{_Q!1{c;~y;u4>UifWk;ULMm z^1QeRsq@f8m>lONI3MgiRc$nxxGb4wbBp$tlQt0ENq^vU~A$Olry(7&qAz* zWGQ=PyOF$kDV>NU*tEOjd#5p#pxk3Z?zjG6r}O{U zo=zJ9Iq$wfX=!Ph??qsQeJ1`Q>STr4yMm{Q6GUR}b$M!2U<>7bvSz94-5RwFLYm#P zTC0e7#kmH{;8RtW5SCze(Ir4lEu;Pg4j~XS4TSj2_1lgQc!khpK~2MD1F;lEWjpl2)J=c83ek$1$5XL$;xO0^;WMWJ4 z(a}}n3<2c#*_LjmSU*90NtRJ@ZSV;`tSS~QM80Lzs_OAq4LvrR$ zuAw;JW()~hsENGyY_SV;vdt^BEv$i>RMzCj>(G@}N?wfm$~8RS9lX$uC9iA~XX7hx z&e#3RdnBtc@W7hEw!~oWRAo_RH})Vj*>tfRA?L)cH3*DOK|fLG5UB%=c)azhuKK}U z;P}qc)H5X?M7_}8>$>pqqZWMmnp)PF#mtBx4Uie--L>`cslwDrxC}i-d4c$gMR5tM zvje8y>+|R&_aPW3)T3=Rp!cxWyj*cW*Qgmr9)Vv{%$Gi&0tzLU@n+rg8LH5F-p;ru z?*k98D95@9!x>?sr?8@GkKNRMRDXL7mDXps&b3HVu$7L@>cr<$Rqxuj47zywFKdL z89BkKtV6!s^S84PG6V4iV?)2S00%Y@V9$v|44G8FbK;63bp(4bro?g0hWzG!)?(XT z+hHPi_ArQn;n|8&AvWjjQlS@)S#{GU{9NJ_S1+9c%@6D~MX-2WxyKO^0G~8~D^+sc zlO<-c*dWjAi>-9M8fcq(d-;mBxY*dQ-rKam-c-drX_>uWY&vjVVcb?HEM4)GR4Qbz zKShnL0R1z_tQe+nSm^O|hW9-JCjXrr8+`VUXy6j1IO|8m?M0LmN_Sdg}u}OM7 z9vwAjVDVb||9Qsm=tQ z@lXN4E^+1OdUI?H=dblGTCbIE&b$Wxnw_`#4w$iJ@ic}*Mx0Nb2S?RzY1ku$UV2p6 zYuMo0DcW?q;^tkOUXOjKNPX^{E@?;#L_(n^O?y`(d|hnWSN#7sZ~4!|_eAEwwW_Fq zQa>^M9oA^tZaq(nmVNp1i$z;(j$^g4l@w)f;Ns@yX6j-8H+riBB8+C`RP|u9_w{FU zyk;hg?hhq8sUImqH2~^n4htXe54tOU*u$hbxLs4VBHSLvzu(;*59Ax>!{&>p=|z73 zfPrK;YpLJ77$5kk_QS)v1KF!|0N}Wo(q6X^1wpPw0|YuY4pIZM2sq^Xy*k2sa1>sx zChi7V2Vo=g(mlHWULyE^`@cPa0x-bs(%DIL(*33$(d1!1q5tz5{X@#|m)pS!qn1TS zeskwhtike!es2@M8CWtVz!mqZ>Lx&3fGUX+ude*Vhx<={-M8PQaV|6EGxl?wI#d03@xyye)_n?Gi2*y(`7GqS2#3}iSgwQGq z9P+FE{0tAi8$=9f<@c|UcxID7z}oPaY=WuVee!=|TmKG4{~a@}`dw@(*g5F|JoL^> z0t(>OOg3F!b|3PzWvc;}OvO)R*k0NFNfY6Rri<#(-CICeXWpdYun&E{Jo3N*WAHcL zFQWkCZs+gVw-UqK5WYLqholK^zdmq%jOD5cte4!}3wslb_pL-k)QuDT&m-l3_{4dlI9N%e?!!xNX3a-b>bGo$mmXp6FnwKqag=WX zS5o2%F5W7~E{0*N&4Rc!f9f$PZ{?aVT&yfLFINFi=wvWZ6nJ>0q~z8!9)@K5X1ru> zG3G6-_`4eN%8C&h39DKEne9;sWzjnmCH6jQAbpa^Qz~e*jE;)`l!6`*$$9)(ASzqS zbn2D*Ua^{VwKO+Kp8O<>WtU`;@w1U9+fMAHUj7&Bq&#Z%d{f(xpQA@hAwd_Z;ToKB zo@z8>bc=emOX=JfujE|>u~rTmFUMKc&*L31qHI1pJ4Ox(ukUFt1=77TsCh&<)nFvJ z825w+`7Aa$9+pi@%)_S&+qBj^QerYpF0f#U)BQ2YeLMT5c~WR-cO2WmgsI?@RE%v> zK@-~{?viXOJ;2-6AH@q3MJ}fngv{G=@s>|m$6_hoVA>5OzfL~qK z{xVe{4&(XgXN^4d0x@Q^ea{(XBjv1tQ(U zK)M>Iirl8j8mrY`KXiBbXnZxE&kFLD5jOYi?7_AQnX3bBdrx1`CcN5Obf$?=lebn{ zche;^@>ju@7sM@)xddocL3@Fk#=`a~*bs%bI|u}^t{>U+TtmI`etYjQx4KDdpPOSz zQGN2HM<^XyGcgq}>GbaH+hhFt1t~he0`BH+CY5_9ZF0#PPcwY0FVWrrC4`4D&6Be7RaJ7MFQ^gRuRk~{59Vj7W!oG*$2&l8UTS=AOPP3L zP~}`~D7A$jg7{8YP%vSQM_LS1*-1PC_uQJlK_R4l=y|i{^X$^iWL2&0qRo4$$^Yai9&8HETyU}M$Hn@t z<+Xjv^_*NkVxM%>UmLeE{nOxv?DjKAlr7qXH>=9Qlt%P0ZuY&_KFx7zpEt{F*0MBl z)~oq7`1s_hQ%2uR9^{TJKF^sQr#0JmFS`YfJwU4NMNU0sqbsEi)PO#*=4QJOP%{x= zQ?teULv?lo`mq_f^9I>y!F7!I%S%F4Z*=JlJ;|;@10Ii=Xi31_r zRwBf!?39v|T<3x=S@9cLwksDC|*Jm){8QgbnWnZ=$v{j0O2Duu~wKk|hQ zqB?+i5=rYGH!%6@@^7PB~?-k=`V=4@Yen7elS3J~B>_hh$mb2Y2oS*C_akFDON2Cjtu`xeFL=fUn& zDyo8xmxW|bSZ$*aN&|F_v$>w0ZuV&9Q*9WXaUq=?wN4wc5Lirur$T?=3lq68$(62l`$Xg z5T_>UXL(sa9^=oAg|;?}Fx&S4#7a~moMTrIee!se++dy@4{FH}Tfc3PEF zI7REG4jo-bA(sQ#31#=9=PW-P^*+1V_%-_6%^p8d5$k;#NsxT4xRRNh`DE5uhfU88 z!JtUWAjeuE7+c;ZR%ZKDQ+-&sE~+U~Gj|O|^k%8};}2aiDaIA>g8Mb4lHJ zx7&QJM;1P3|J80(WeO(-%r;D!=WT{j>|$Wiv_1X-a2{MM+7#_`L)O+r*cQ`ORZ(ng z9laoarZLQBn#x5x(^EyqYFOXG%7tvJMX#9ygRRd;SVMriZ>fYA^N$W^Jh@*o?wT5z z`ra|Pj^nKL34V?*;iL?8#tt<<5$WX*h|aj2<20QWeYY$Fz(nc$&qi@2MGXBiY{yG* z)dGO)@qF;PhLRV#;o>b&uK6zC!{%cP!p`2&Z0P$%CtRw+XAgheU)^A z6+^CWok=uC)$MpmmIx)?-Vp`6WUD6z(l0`Yx_*Fp!NiH|}1s;diMLD_Z1d+ceKvA`nu?goy@6$Bm)j6lYvXYcHmVcl|J-;iT#B z&>)jQf$ter=mM;l@UJ%};;(OOIu$JegjXWBPF{-N5z5;dB>%T#z@2Z;@u-X4ye8}Y zxj+i7C#q(UmEBhySB)%uJvpJPCcoa+mu>ucNzEJ)NJGT8*hBYgFWvnEk%?a{c$~M+ z0_BVKQ=*zVFPUT*dNDvGZCMz1L0GTmTV*-%`83U)z|#%yrR)g*He)})5wlUD7uFEO^Et>xe*+;wi2?C!v9KEkCS@$B$64KwFa}_!rvz@{v%o zncK0Fz!=`5Cw5XN-bHEJXnp|`EIb3lt3lL@;-{?I?-rT8#$v-anTKGZ2C9(Oq7UAO z2suYj0Nuv>U?ypGO%mYzh0xG91x~eN#_lU!7QC)7VW^M-T{iSv;YRp$2=I%$@;sN}%!9(}e&Bp}-qIY7 z%%8jLY@G*j-&C2{d=N#&ZwC>SE0|z`uYAG zTK*@WJm11RjituzqwJkl<+J8({M_ozj^|y{Z||DJD4gzPbdxG3o5I-zw3h-q7W@}$ z;4zM$udfLJH_T#yCz-iGP!FLAb2_##3T3n=8VcoAX2cui*bXP!0)^jWaQ!}?+Iz%z zCgchH4TUC9U8H4asqLTzg0vX4tJ7ZnRT;j6 zcw(z?wrJ?RDOwk9;)RxuH1osW$s2?R!iGWN4|6f!+T5yT6g60J`m60|R~1p)7mls8 zhe#xj9NVWq`Dy=EBeS6}ykn%%NW5U9q9OrdnPMv&%0}2Hst=Zk-X0NMJQp2rG;}w! z3^4K?=Bjn_3smWZ(aaLid)BW)XVak`m^bAp-7DJ;3ls;f*5bTZN-s1B7s#gcF0Cx#t&1Ver*n%AkA8Kwo8&N9ouKHO z<4~0MZJzynjYk$hC8`=6jvJ2b~VforGmzxMU~d#UTMm`)+43^ezV^F0X4SB92;0M6Gep>2_lclQCYLE0QOhuBaD(2WB@ z0*GW)zhEt8#F<`60QrREJKDdG&t*P3(V%Xz(~-#X>o9fv5zuc~>0Ojm?b=V;THMai zjXJu%t~;)<%BPExt#$#plt;?}0%y7^fvKXR7NvmpXJVR|9-JX`CYzP&0muC~t6fBL z1-#P1-jnZ0Tz`0b)RBcDK%O8B_Q&`*4~x%r-Mu5HcfyL)6_-Te&ILy4Jm@_8N#OzD z-lt{}fsFjx6C@d)#ij>0lkPjbf5^7o?%=ofGhWAFY2!$4h#GV^Wu)Z-b~oc#iA4s~ zYba$yj!L`O5h8qfB#jY7NF&<#OAR9`ieAW)OS(*k)j739?IH z>XdZ7au}AG-f=R(9=sIve{VKR#U&j9{57N(uc3Z_^@0)C!|J^~aqq3j zHnc^12vAbJaHxwa1`sj;MTq8InfPTH6&;-^0ymuL7;tPUQG3AW3YbgDfw`E7%O*re z=VR0NzWGY?+C)Ds5SirP(t_zrKb};va8_QR7*t$LA-LQzL1j6X7(A&c3&RVK0Dz+# zvf#c1D2mRM;P|)X_UcuP`rhyM1NUR0L{I46fa?mG+eL?GlabeEHNs;o*0-u69YpFl z0=HKa-X1IfQqg{#>u4z8eBaekm9BI+=#qQd4Pc|=6pbKp+P^qBa_4`2yNL}#O&vdK z5b{puFnFy37%q*a*^kJM=vofnFX2lyKf(tKK7D$gwGe5S=yM;CFyzihCse}Zwr!J! zm;$Kw@%?bbKFPe+bJT$BT>+l+VhdB&+-<2}Sxl#GPiw6<0=5rkea#`nVz8IjOAE3U z^TV6&vU7HsNXjBt+h_4&j$xD7@lI9dohvlJzir?UzbcexV*&(G6#yPP%|A>&-E|8Z zgdKC3-UAPB$fRp8gbk^=IQzU7mi2z#eGCr0TWf>2U!rE91xfG59)YKG9}2WqaQ!|6 z#p~g7_12EhwzKO%aF9wkF=?$A%7dLL=4X6new=DBJz$l1AH{!`Za=nK9MH6hgWhYO-2mx))rJ!S-a`SIWI8)ERnofd~3~z z0+gxH^8vHv;ovZJfPdZR<(l^RL>+t3=+YN;w}9Le=2?7ed40XJebJ>iX5oYZ*|itp zA{`wLg`#RA-+AozrTc4+jnn@P9{2Xq%CQnoiV0kX1N_~_cfpX9+sn|NR4HCQBe5$r z%A9+LUoFLcY0Q>;7~zkO-Omo%3sg&6@NMx~g$?bALlV;Efbec_F=5Mn?Mbfnx+%7K z{Viz++H6(|`4NNlR!afV18r-6j!~~>?fdGxvbGNK0^?b?Z;7Z?S65e(5sNm?^2dpP z;o$>rGfC^x-TjgD?-^;ji_HS{LC%%k%ZA?jRyVb1k_DidaCuH1X)a7PYPvuYw#gG_ z&m?#C4PT{SAlQd}2bBhK39Wn}Awo(l+r0co!!? zBq++Un2Lp`(_EW1nRh!t*| z&!uq4XpG~;>|dc2*O+}N#?Yj>-#gJr3%{k#p+$LF!gsBA{L=7Wp0-*S6m9b@i*5nDgRck*R_qT`$2@4O9{wR zuv<#$aCZRZW&@zgo}dr4G&6HuTe0@mZ>uJ35pxvbmM*?8R$1`FCnLFdYQD=7H=7D% ztlK|a!-AvO%X0TpI779pLUp(dYQ|tsHTi2~c`%k#zMCCKH`aH@1aUJ5gZ& zpp3k|QPzjWGT3bPv|WA0n%J+@MtaM4nFFOLT{_CJSf>#&G3>vf*8W@ew|pS&J7q=3 z5!4$QGvtbYZV@ZO%iC@uQdr}(W#>=jmCj&+ zydZAoYkC8vc3P2bzjB$=N{y#-3a6|K5xM(nQ)frx%^iLZTU~o8=ct8Md71VIix?^I zC{&o!M((K^l#Z=Cv?#{hEg}XO{cm>5s{flQ{Dr^2f9Xo23#YNA2%US3*eR=GmVvWa z6S1Y6H_mL=@c+z?b=Z+0BSku1%;w>#SVsH#OewD*sM)AyJUPzgDQ2%{G;^;`PA7NR zf9=cQ=`OrP>qNuZ&iHEvjkeR<#igro<}i8vAyJ51FgK{8+Y1_;(a!>$m=X^9a2EbN}AtN$*t* z%xrC`?b7RZr?hdcm2nwPOu4c^yYIw~b(-3xrqQ~$Cx>m9X%voN${i{ykjcJV%~#f9 zz1!`N;(=g0YiIOv&1dV4=0~(*d#fb8bc+DiasPgGb7M=4Ha_Wy{p*a=psgJ$Z*L)^ z%I%2t(C2eJYl7rVyAZ6+uRchLbCYb`gC1vleC}i>F6tA?s17wyGR}oeiFGE8g??3e_2U-GqiYt)sBuaGvky?j@6TVxgmSIB#i&@#ZD#nlEX+7fb3-- zP_y^BC3Exu$z0~QeQ<;&dnYho^^@&5>AMT6Q22Po5_HcNn`<+8+fmKDWAn-E(f^ho z`_Fyg|JI@h6c8_=_Y3oe*$|OC=Z+R!xV+J2hOhDr$*=krXW|Wt$K@rwKLp?V9vJ=r zbaK{~K#fg8_9Y!>_az