diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts index dfe0828e88bad..5d65909dde50d 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts @@ -41,4 +41,16 @@ describe('APM Transaction Duration Transform Generator', () => { expect(transform.source.query).toMatchSnapshot(); }); + + it('uses the provided index params as source index', async () => { + const index = 'my-custom-apm-index*'; + const anSLO = createSLO({ + indicator: createAPMTransactionDurationIndicator({ + index, + }), + }); + const transform = generator.getTransformParams(anSLO); + + expect(transform.source.index).toEqual(index); + }); }); diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts index 6cba9c32d40ac..23ee248a1372f 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts @@ -16,8 +16,7 @@ import { import { getSLOTransformTemplate } from '../../../assets/transform_templates/slo_transform_template'; import { SLO, APMTransactionDurationIndicator } from '../../../domain/models'; import { TransformGenerator } from '.'; - -const APM_SOURCE_INDEX = 'metrics-apm*'; +import { DEFAULT_APM_INDEX } from './constants'; export class ApmTransactionDurationTransformGenerator extends TransformGenerator { public getTransformParams(slo: SLO): TransformPutTransformRequest { @@ -74,7 +73,7 @@ export class ApmTransactionDurationTransformGenerator extends TransformGenerator } return { - index: APM_SOURCE_INDEX, + index: indicator.params.index ?? DEFAULT_APM_INDEX, runtime_mappings: this.buildCommonRuntimeMappings(slo), query: { bool: { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts index e44f4be531c32..0960fe7c073ca 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts @@ -50,4 +50,16 @@ describe('APM Transaction Error Rate Transform Generator', () => { expect(transform.source.query).toMatchSnapshot(); }); + + it('uses the provided index params as source index', async () => { + const index = 'my-custom-apm-index*'; + const anSLO = createSLO({ + indicator: createAPMTransactionErrorRateIndicator({ + index, + }), + }); + const transform = generator.getTransformParams(anSLO); + + expect(transform.source.index).toEqual(index); + }); }); diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts index a68eb490ebde1..f0df8dd54209f 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts @@ -16,8 +16,8 @@ import { getSLOTransformId, } from '../../../assets/constants'; import { APMTransactionErrorRateIndicator, SLO } from '../../../domain/models'; +import { DEFAULT_APM_INDEX } from './constants'; -const APM_SOURCE_INDEX = 'metrics-apm*'; const ALLOWED_STATUS_CODES = ['2xx', '3xx', '4xx', '5xx']; const DEFAULT_GOOD_STATUS_CODES = ['2xx', '3xx', '4xx']; @@ -76,7 +76,7 @@ export class ApmTransactionErrorRateTransformGenerator extends TransformGenerato } return { - index: APM_SOURCE_INDEX, + index: indicator.params.index ?? DEFAULT_APM_INDEX, runtime_mappings: this.buildCommonRuntimeMappings(slo), query: { bool: { diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/constants.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/constants.ts new file mode 100644 index 0000000000000..0bd3f7f31edcc --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/constants.ts @@ -0,0 +1,8 @@ +/* + * 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. + */ + +export const DEFAULT_APM_INDEX = 'metrics-apm*'; diff --git a/x-pack/plugins/observability/server/types/schema/indicators.ts b/x-pack/plugins/observability/server/types/schema/indicators.ts index ef7b2d59fcf74..a430ee421a346 100644 --- a/x-pack/plugins/observability/server/types/schema/indicators.ts +++ b/x-pack/plugins/observability/server/types/schema/indicators.ts @@ -11,13 +11,18 @@ import { allOrAnyString, dateRangeSchema } from './common'; const apmTransactionDurationIndicatorTypeSchema = t.literal('sli.apm.transaction_duration'); const apmTransactionDurationIndicatorSchema = t.type({ type: apmTransactionDurationIndicatorTypeSchema, - params: t.type({ - environment: allOrAnyString, - service: allOrAnyString, - transaction_type: allOrAnyString, - transaction_name: allOrAnyString, - 'threshold.us': t.number, - }), + params: t.intersection([ + t.type({ + environment: allOrAnyString, + service: allOrAnyString, + transaction_type: allOrAnyString, + transaction_name: allOrAnyString, + 'threshold.us': t.number, + }), + t.partial({ + index: t.string, + }), + ]), }); const apmTransactionErrorRateIndicatorTypeSchema = t.literal('sli.apm.transaction_error_rate'); @@ -34,6 +39,7 @@ const apmTransactionErrorRateIndicatorSchema = t.type({ good_status_codes: t.array( t.union([t.literal('2xx'), t.literal('3xx'), t.literal('4xx'), t.literal('5xx')]) ), + index: t.string, }), ]), });