-
Notifications
You must be signed in to change notification settings - Fork 8.2k
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
Migrate /diagnostics and /service_nodes to be deployment agnostic #199645
Changes from 11 commits
30d377a
11c847e
fefc157
3f29f99
b2d307a
dd0a870
9e7b6fe
11ce02a
8f8ef6c
ec4c5cc
b9a4a03
2bd7dae
28c1ba6
7a56f8c
50d8fba
2e2d110
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,20 +7,18 @@ | |
|
||
import expect from '@kbn/expect'; | ||
import { apm, timerange } from '@kbn/apm-synthtrace-client'; | ||
import { FtrProviderContext } from '../../common/ftr_provider_context'; | ||
import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; | ||
import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; | ||
|
||
export default function ApiTest({ getService }: FtrProviderContext) { | ||
const registry = getService('registry'); | ||
const apmApiClient = getService('apmApiClient'); | ||
export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) { | ||
const apmApiClient = getService('apmApi'); | ||
const es = getService('es'); | ||
const apmSynthtraceEsClient = getService('apmSynthtraceEsClient'); | ||
const synthtraceKibanaClient = getService('synthtraceKibanaClient'); | ||
const synthtrace = getService('synthtrace'); | ||
|
||
const start = new Date('2021-01-01T00:00:00.000Z').getTime(); | ||
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1; | ||
|
||
// FLAKY: https://github.com/elastic/kibana/issues/177245 | ||
registry.when('Diagnostics: Data streams', { config: 'basic', archives: [] }, () => { | ||
describe('Diagnostics: Data streams', () => { | ||
describe('When there is no data', () => { | ||
before(async () => { | ||
// delete APM data streams | ||
|
@@ -45,9 +43,13 @@ export default function ApiTest({ getService }: FtrProviderContext) { | |
}); | ||
|
||
describe('When data is ingested', () => { | ||
let apmSynthtraceEsClient: ApmSynthtraceEsClient; | ||
|
||
before(async () => { | ||
const latestVersion = await synthtraceKibanaClient.fetchLatestApmPackageVersion(); | ||
await synthtraceKibanaClient.installApmPackage(latestVersion); | ||
apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient(); | ||
const apmSynthtraceKibanaClient = synthtrace.apmSynthtraceKibanaClient; | ||
const latestVersion = await apmSynthtraceKibanaClient.fetchLatestApmPackageVersion(); | ||
await apmSynthtraceKibanaClient.installApmPackage(latestVersion); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for review. Those were remainings from the old test and I didn't notice that apm packge is installed in |
||
|
||
const instance = apm | ||
.service({ name: 'synth-go', environment: 'production', agentName: 'go' }) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; | ||
|
||
export default function ({ loadTestFile }: DeploymentAgnosticFtrProviderContext) { | ||
describe('diagnostics', () => { | ||
loadTestFile(require.resolve('./apm_events.spec.ts')); | ||
loadTestFile(require.resolve('./data_streams.spec.ts')); | ||
loadTestFile(require.resolve('./index_pattern_settings.spec.ts')); | ||
loadTestFile(require.resolve('./index_templates.spec.ts')); | ||
loadTestFile(require.resolve('./indices.spec.ts')); | ||
loadTestFile(require.resolve('./privileges.spec.ts')); | ||
}); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import expect from '@kbn/expect'; | ||
import { apm, timerange } from '@kbn/apm-synthtrace-client'; | ||
import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; | ||
import { uniq } from 'lodash'; | ||
import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; | ||
|
||
export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) { | ||
const apmApiClient = getService('apmApi'); | ||
const synthtrace = getService('synthtrace'); | ||
|
||
const start = new Date('2021-01-01T00:00:00.000Z').getTime(); | ||
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1; | ||
|
||
describe('Diagnostics: Index pattern settings', () => { | ||
describe('When data is ingested', () => { | ||
let apmSynthtraceEsClient: ApmSynthtraceEsClient; | ||
|
||
before(async () => { | ||
apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient(); | ||
const apmSynthtraceKibanaClient = synthtrace.apmSynthtraceKibanaClient; | ||
const latestVersion = await apmSynthtraceKibanaClient.fetchLatestApmPackageVersion(); | ||
await apmSynthtraceKibanaClient.installApmPackage(latestVersion); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here |
||
|
||
const instance = apm | ||
.service({ name: 'synth-go', environment: 'production', agentName: 'go' }) | ||
.instance('instance-a'); | ||
await apmSynthtraceEsClient.index( | ||
timerange(start, end) | ||
.interval('1m') | ||
.rate(30) | ||
.generator((timestamp) => | ||
instance | ||
.transaction({ transactionName: 'GET /users' }) | ||
.timestamp(timestamp) | ||
.duration(100) | ||
.success() | ||
) | ||
); | ||
}); | ||
|
||
after(() => apmSynthtraceEsClient.clean()); | ||
|
||
it('returns APM index templates', async () => { | ||
const apmIndexTemplatesPatterns = ['apm', 'otel']; | ||
|
||
const { status, body } = await apmApiClient.adminUser({ | ||
endpoint: 'GET /internal/apm/diagnostics', | ||
}); | ||
expect(status).to.be(200); | ||
|
||
const uniqueTemplateNames = uniq( | ||
body.indexTemplatesByIndexPattern.flatMap(({ indexTemplates }) => { | ||
return indexTemplates?.map(({ templateName }) => templateName); | ||
}) | ||
); | ||
|
||
const apmTemplateNames = uniqueTemplateNames.filter((templateName) => | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We filter out only |
||
apmIndexTemplatesPatterns.some((pattern) => templateName.includes(pattern)) | ||
); | ||
|
||
expect(apmTemplateNames).to.eql([ | ||
'logs-apm.error@template', | ||
'logs-apm.app@template', | ||
'logs-otel@template', | ||
'metrics-apm.service_transaction.1m@template', | ||
'metrics-apm.transaction.10m@template', | ||
'metrics-apm.service_summary.10m@template', | ||
'metrics-apm.internal@template', | ||
'metrics-apm.service_destination.1m@template', | ||
'metrics-apm.service_summary.60m@template', | ||
'metrics-apm.service_summary.1m@template', | ||
'metrics-apm.transaction.1m@template', | ||
'metrics-apm.service_destination.60m@template', | ||
'metrics-apm.service_transaction.60m@template', | ||
'metrics-apm.service_destination.10m@template', | ||
'metrics-apm.service_transaction.10m@template', | ||
'metrics-apm.transaction.60m@template', | ||
'metrics-apm.app@template', | ||
'metrics-otel@template', | ||
'metrics-service_transaction.10m.otel@template', | ||
'metrics-transaction.10m.otel@template', | ||
'metrics-service_summary.1m.otel@template', | ||
'metrics-service_transaction.60m.otel@template', | ||
'metrics-service_summary.60m.otel@template', | ||
'metrics-service_summary.10m.otel@template', | ||
'metrics-transaction.1m.otel@template', | ||
'metrics-transaction.60m.otel@template', | ||
'metrics-service_transaction.1m.otel@template', | ||
'traces-apm.rum@template', | ||
'traces-apm@template', | ||
'traces-apm.sampled@template', | ||
'traces-otel@template', | ||
]); | ||
}); | ||
}); | ||
}); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,44 +7,25 @@ | |
|
||
import expect from '@kbn/expect'; | ||
import { apm, timerange } from '@kbn/apm-synthtrace-client'; | ||
import { getApmIndexTemplateNames } from '@kbn/apm-plugin/server/routes/diagnostics/helpers/get_apm_index_template_names'; | ||
import { FtrProviderContext } from '../../common/ftr_provider_context'; | ||
import type { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; | ||
import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; | ||
|
||
export default function ApiTest({ getService }: FtrProviderContext) { | ||
const registry = getService('registry'); | ||
const apmApiClient = getService('apmApiClient'); | ||
const es = getService('es'); | ||
const apmSynthtraceEsClient = getService('apmSynthtraceEsClient'); | ||
const synthtraceKibanaClient = getService('synthtraceKibanaClient'); | ||
export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) { | ||
const apmApiClient = getService('apmApi'); | ||
const synthtrace = getService('synthtrace'); | ||
|
||
const start = new Date('2021-01-01T00:00:00.000Z').getTime(); | ||
const end = new Date('2021-01-01T00:15:00.000Z').getTime() - 1; | ||
|
||
registry.when.skip('Diagnostics: Index Templates', { config: 'basic', archives: [] }, () => { | ||
describe('When there is no data', () => { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When default index templates are deleted, they get recreated automatically. Introduced here: elastic/elasticsearch#97546 This means we can't perform check against empty response anymore. |
||
before(async () => { | ||
// delete APM index templates | ||
await es.indices.deleteIndexTemplate({ | ||
name: Object.values(getApmIndexTemplateNames()).flat(), | ||
}); | ||
}); | ||
|
||
it('verifies that none of the default APM index templates exists`', async () => { | ||
const { status, body } = await apmApiClient.adminUser({ | ||
endpoint: 'GET /internal/apm/diagnostics', | ||
}); | ||
expect(status).to.be(200); | ||
const noApmIndexTemplateExists = body.apmIndexTemplates.every( | ||
({ exists }) => exists === false | ||
); | ||
expect(noApmIndexTemplateExists).to.eql(true); | ||
}); | ||
}); | ||
|
||
describe('Diagnostics: Index Templates', () => { | ||
describe('When data is ingested', () => { | ||
let apmSynthtraceEsClient: ApmSynthtraceEsClient; | ||
|
||
before(async () => { | ||
const latestVersion = await synthtraceKibanaClient.fetchLatestApmPackageVersion(); | ||
await synthtraceKibanaClient.installApmPackage(latestVersion); | ||
apmSynthtraceEsClient = await synthtrace.createApmSynthtraceEsClient(); | ||
const apmSynthtraceKibanaClient = synthtrace.apmSynthtraceKibanaClient; | ||
const latestVersion = await apmSynthtraceKibanaClient.fetchLatestApmPackageVersion(); | ||
await apmSynthtraceKibanaClient.installApmPackage(latestVersion); | ||
|
||
const instance = apm | ||
.service({ name: 'synth-go', environment: 'production', agentName: 'go' }) | ||
|
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.
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 updated all
/apm/*
tests by adding type-only imports.