Skip to content

[9.4] [Entity Analytics] Graph filters - correlate entities with events using euid filters (#261420)#262950

Merged
kibanamachine merged 2 commits intoelastic:9.4from
kibanamachine:backport/9.4/pr-261420
Apr 14, 2026
Merged

[9.4] [Entity Analytics] Graph filters - correlate entities with events using euid filters (#261420)#262950
kibanamachine merged 2 commits intoelastic:9.4from
kibanamachine:backport/9.4/pr-261420

Conversation

@kibanamachine
Copy link
Copy Markdown
Contributor

Backport

This will backport the following commits from main to 9.4:

Questions ?

Please refer to the Backport tool documentation

…ng euid filters (elastic#261420)

## Summary

Closes elastic#261357.

After migrating Graph Visualization from Entity Store v1 to v2 (EUID
format), filters in the graph stopped correctly correlating entities
with events. The root cause: EUID node IDs (e.g.
user:admin@example.com@okta) don't match raw ECS field values in
documents (e.g. user.email = admin@example.com), which broke filter and
pinning operations.

This PR fixes the correlation by:

- Making source fields dynamic and entity-type-aware: Instead of
hardcoded field arrays, source fields are now derived at runtime from
Entity Store definitions via euid.getEuidSourceFields(), grouped by
entity type. The server embeds these fields into each graph node's
sourceFields so the frontend can build correct raw-value filters.
- Fixing the ES|QL sourceFields construction: sourceFields are now
computed with CASE expressions keyed by entity type prefix, and the
.target. namespace is stripped from keys before sending to the frontend.

Also, the PR adapts pinning entities replacing the old approach
(extracting pinned IDs from search filters) with a dedicated pinnedEuids
state in the FilterStore. When a user toggles an entity filter, the
entity's EUID is pinned/unpinned.

### Checklist

- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [x] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [x] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
- [x] Review the [backport
guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)
and apply applicable `backport:*` labels.

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard
to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified
risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...

---------

Co-authored-by: macroscopeapp[bot] <170038800+macroscopeapp[bot]@users.noreply.github.com>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Alberto Blázquez <alberto.blazquez@elastic.co>
Co-authored-by: Alberto Blázquez <albertoblaz@users.noreply.github.com>
(cherry picked from commit 6a78b64)
@elasticmachine
Copy link
Copy Markdown
Contributor

elasticmachine commented Apr 14, 2026

💔 Build Failed

Failed CI Steps

Test Failures

  • [job] [logs] Jest Tests #1 / SearchBar add filter
  • [job] [logs] FTR Configs #130 / discover/esql_4 discover esql controls when unlinking a ES|QL panel with controls and explorting it in discover should retain the controls and their state
  • [job] [logs] Scout: [ security / entity_store ] plugin / local-stateful-classic - Entity Store History Snapshot - history snapshot: copies latest to history index and resets behaviors on latest
  • [job] [logs] Scout: [ security / entity_store ] plugin / local-stateful-classic - Entity Store Logs Extraction with pagination (max 5 docs per page) - Should extract properly extract host with pagination
  • [job] [logs] Scout: [ security / entity_store ] plugin / local-stateful-classic - Entity Store Logs Extraction with pagination (max 5 docs per page) - Should extract properly extract host with pagination

Metrics [docs]

Public APIs missing comments

Total count of every public API that lacks a comment. Target amount is 0. Run node scripts/build_api_docs --plugin [yourplugin] --stats comments for more detailed information.

id before after diff
@kbn/cloud-security-posture-common 223 226 +3

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
securitySolution 11.7MB 11.7MB +1.7KB

Public APIs missing exports

Total count of every type that is part of your API that should be exported but is not. This will cause broken links in the API documentation system. Target amount is 0. Run node scripts/build_api_docs --plugin [yourplugin] --stats exports for more detailed information.

id before after diff
entityStore 11 23 +12
Unknown metric groups

API count

id before after diff
@kbn/cloud-security-posture-common 230 233 +3

History

cc @kfirpeled

@kibanamachine kibanamachine merged commit d74cfd4 into elastic:9.4 Apr 14, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport This PR is a backport of another PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants