-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[dot-kibana-split] Adapt usages of core.savedObjects.getKibanaIndex
to use the correct index
#155155
[dot-kibana-split] Adapt usages of core.savedObjects.getKibanaIndex
to use the correct index
#155155
Conversation
core.savedObjects.getKibanaIndex
to use the correct index
7d87a8e
to
a3a2c2d
Compare
…split-get-kibana-index-api-change
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Self review
/** | ||
* Returns the (alias to the) index that the specified saved object type is stored in. | ||
* | ||
* @param type The SO type to retrieve the index/alias for. | ||
*/ | ||
getIndexForType: (type: string) => string; | ||
/** | ||
* Returns the (alias to the) index that the specified saved object type is stored in. | ||
* | ||
* @remark if multiple types are living in the same index, duplicates will be removed. | ||
* @param types The SO types to retrieve the index/alias for. | ||
*/ | ||
getIndicesForTypes: (types: string[]) => string[]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TSDoc was added fairly quickly, please tell me if we want to rephrase stuff in here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT plurals here would be nice:
/**
* Returns the (aliases to the) indices that the specified saved object types are stored in.
*
* @remark an index that matches multiple types will only be returned once, aka duplicates will be removed.
* @param types The SO types to retrieve the indices/aliases for.
*/
const indices = await getIndexForTypes(['dashboard', 'visualization', 'search']); | ||
return { | ||
index: kibanaIndex, | ||
index: indices[0], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I couldn't change the shape of the collector's data, so index
has to stay a single string. In practice it's fine, given all the types counted here are in a single index.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IIUC, the getKibanaSavedObjectCounts()
will aggregate data from all SO indices under the hood.
Then, from the stats perspective, it is fine if we still report them as being part of the .kibana
index. Correct?
Ping @afharo for awareness
@@ -98,7 +98,7 @@ export class UsageCollectionPlugin implements Plugin<UsageCollectionSetup> { | |||
|
|||
public setup(core: CoreSetup): UsageCollectionSetup { | |||
const config = this.initializerContext.config.get<ConfigType>(); | |||
const kibanaIndex = core.savedObjects.getKibanaIndex(); | |||
const kibanaIndex = core.savedObjects.getDefaultIndex(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only used to generate the stats shape, so using the default index here is fine.
@@ -61,13 +61,11 @@ export class Plugin implements CorePlugin<IEventLogService, IEventLogClientServi | |||
} | |||
|
|||
setup(core: CoreSetup): IEventLogService { | |||
const kibanaIndex = core.savedObjects.getKibanaIndex(); | |||
|
|||
const kibanaIndex = core.savedObjects.getDefaultIndex(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only used for stats shape too, using the default index here is fine
Pinging @elastic/kibana-core (Team:Core) |
core.savedObjects.getKibanaIndex
to use the correct indexcore.savedObjects.getKibanaIndex
to use the correct index
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ML changes LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Security changes LGTM!
@@ -138,7 +137,12 @@ export class KibanaUsageCollectionPlugin implements Plugin { | |||
registerUsageCountersUsageCollector(usageCollection); | |||
|
|||
registerOpsStatsCollector(usageCollection, metric$); | |||
registerKibanaUsageCollector(usageCollection, kibanaIndex); | |||
|
|||
const getIndexForTypes = (types: string[]) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT we could rename this to getIndicesForTypes
, for consistency.
@@ -43,7 +43,7 @@ export async function getKibanaSavedObjectCounts( | |||
|
|||
export function registerKibanaUsageCollector( | |||
usageCollection: UsageCollectionSetup, | |||
kibanaIndex: string | |||
getIndexForTypes: (types: string[]) => Promise<string[]> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT same as the other comment, we could rename to getIndicesForTypes
.
@@ -23,6 +23,7 @@ import { type RawPackageInfo, Env } from '@kbn/config'; | |||
import { ByteSizeValue } from '@kbn/config-schema'; | |||
import { REPO_ROOT } from '@kbn/repo-info'; | |||
import { getEnvOptions } from '@kbn/config-mocks'; | |||
import { SavedObjectsType, MAIN_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT SavedObjectsType
can be imported as a type
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with a few NITs
💚 Build Succeeded
Metrics [docs]Unknown metric groupsAPI count
ESLint disabled line counts
References to deprecated APIs
Total ESLint disabled count
History
To update your PR or re-run it, just comment with: |
## Description Fix #104081 This PR move some of the SO types from the `.kibana` index into the following ones: - `.kibana_alerting_cases` - `.kibana_analytics` - `.kibana_security_solution` - `.kibana_ingest` This split/reallocation will occur during the `8.8.0` Kibana upgrade (*meaning: from any version older than `8.8.0` to any version greater or equal to `8.8.0`*) **This PR main changes are:** - implement the changes required in the SO migration algorithm to support this reallocation - update the FTR tools (looking at you esArchiver) to support these new indices - update hardcoded references to `.kibana` and usage of the `core.savedObjects.getKibanaIndex()` to use new APIs to target the correct index/indices - update FTR datasets, tests and utility accordingly ## To reviewers **Overall estimated risk of regressions: low** But, still, please take the time to review changes in your code. The parts of the production code that were the most impacted are the telemetry collectors, as most of them were performing direct requests against the `.kibana` index, so we had to adapt them. Most other contributor-owned changes are in FTR tests and datasets. If you think a type is misplaced (either we missed some types that should be moved to a specific index, or some types were moved and shouldn't have been) please tell us, and we'll fix the reallocation either in this PR or in a follow-up. ## .Kibana split The following new indices are introduced by this PR, with the following SO types being moved to it. (any SO type not listed here will be staying in its current index) Note: The complete **_type => index_** breakdown is available in [this spreadsheet](https://docs.google.com/spreadsheets/d/1b_MG_E_aBksZ4Vkd9cVayij1oBpdhvH4XC8NVlChiio/edit#gid=145920788). #### `.kibana_alerting_cases` - action - action_task_params - alert - api_key_pending_invalidation - cases - cases-comments - cases-configure - cases-connector-mappings - cases-telemetry - cases-user-actions - connector_token - rules-settings - maintenance-window #### `.kibana_security_solution` - csp-rule-template - endpoint:user-artifact - endpoint:user-artifact-manifest - exception-list - exception-list-agnostic - osquery-manager-usage-metric - osquery-pack - osquery-pack-asset - osquery-saved-query - security-rule - security-solution-signals-migration - siem-detection-engine-rule-actions - siem-ui-timeline - siem-ui-timeline-note - siem-ui-timeline-pinned-event #### `.kibana_analytics` - canvas-element - canvas-workpad-template - canvas-workpad - dashboard - graph-workspace - index-pattern - kql-telemetry - lens - lens-ui-telemetry - map - search - search-session - search-telemetry - visualization #### `.kibana_ingest` - epm-packages - epm-packages-assets - fleet-fleet-server-host - fleet-message-signing-keys - fleet-preconfiguration-deletion-record - fleet-proxy - ingest_manager_settings - ingest-agent-policies - ingest-download-sources - ingest-outputs - ingest-package-policies ## Tasks / PRs ### Sub-PRs **Implementation** - 🟣 #154846 - 🟣 #154892 - 🟣 #154882 - 🟣 #154884 - 🟣 #155155 **Individual index split** - 🟣 #154897 - 🟣 #155129 - 🟣 #155140 - 🟣 #155130 ### Improvements / follow-ups - 👷🏼 Extract logic into [runV2Migration](#154151 (comment)) @gsoldevila - Make `getCurrentIndexTypesMap` resillient to intermittent failures #154151 (comment) - 🚧 Build a more structured [MigratorSynchronizer](#154151 (comment)) - 🟣 #155035 - 🟣 #155116 - 🟣 #155366 ## Reallocation tweaks Tweaks to the reallocation can be done after the initial merge, as long as it's done before the public release of 8.8 - `url` should get back to `.kibana` (see [comment](#154888 (comment))) ## Release Note For performance purposes, Kibana is now using more system indices to store its internal data. The following system indices will be created when upgrading to `8.8.0`: - `.kibana_alerting_cases` - `.kibana_analytics` - `.kibana_security_solution` - `.kibana_ingest` --------- Co-authored-by: pgayvallet <[email protected]> Co-authored-by: Christos Nasikas <[email protected]> Co-authored-by: kibanamachine <[email protected]> Co-authored-by: Georgii Gorbachev <[email protected]>
this PR is targeting the
dot-kibana-split
feature branch and notmain
Summary
Part of #154888
In #154888, we're going to split the
.kibana
savedObject index into multiple ones. For this reason, calls tocore.savedObjects.getKibanaIndex
will not necessarily return the correct value (e.g types that were moved out of this index)This PR introduces the following SO APIs:
getDefaultIndex
getIndexForType
getIndicesForTypes
getAllIndices
And adapt plugins code to replace usages of
core.savedObjects.getKibanaIndex
with the proper alternative