Skip to content

Commit d5fe8e5

Browse files
younesmlnkibanamachineMiriamAparicio
authored
[APM] Add kibana config for limiting the number of services in a service group (#131929)
* [APM] Add kibana config for the limit of number of services in a service group * change kibana config label & description * Allow only positive numbers for service group limit * Add apm prefix to the kibana config * fix a missing renaming * revert back to using a constant when getting the list of service groups * Parallelize uiSettings with setupRequest * (Fix) Parallelizing getting the value from uiSettings with setupRequest * delete uiSettingsClient usage from lookupServices * Use kibana advanced config for limiting the number of services Co-authored-by: Kibana Machine <[email protected]> Co-authored-by: Miriam <[email protected]>
1 parent 7f70f91 commit d5fe8e5

File tree

10 files changed

+82
-21
lines changed

10 files changed

+82
-21
lines changed

x-pack/plugins/apm/server/routes/service_groups/lookup_services.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,19 @@ import {
1414
} from '../../../common/elasticsearch_fieldnames';
1515
import { ProcessorEvent } from '../../../common/processor_event';
1616
import { Setup } from '../../lib/helpers/setup_request';
17-
import { MAX_NUMBER_OF_SERVICE_GROUPS } from '../../../common/service_groups';
1817

1918
export async function lookupServices({
2019
setup,
2120
kuery,
2221
start,
2322
end,
23+
maxNumberOfServices,
2424
}: {
2525
setup: Setup;
2626
kuery: string;
2727
start: number;
2828
end: number;
29+
maxNumberOfServices: number;
2930
}) {
3031
const { apmEventClient } = setup;
3132

@@ -49,7 +50,7 @@ export async function lookupServices({
4950
services: {
5051
terms: {
5152
field: SERVICE_NAME,
52-
size: MAX_NUMBER_OF_SERVICE_GROUPS,
53+
size: maxNumberOfServices,
5354
},
5455
aggs: {
5556
environments: {

x-pack/plugins/apm/server/routes/service_groups/route.ts

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
import * as t from 'io-ts';
9+
import { apmServiceGroupMaxNumberOfServices } from '@kbn/observability-plugin/common';
910
import { setupRequest } from '../../lib/helpers/setup_request';
1011
import { createApmServerRoute } from '../apm_routes/create_apm_server_route';
1112
import { kueryRt, rangeRt } from '../default_api_types';
@@ -28,8 +29,12 @@ const serviceGroupsRoute = createApmServerRoute({
2829
resources
2930
): Promise<{ serviceGroups: SavedServiceGroup[] }> => {
3031
const { context } = resources;
31-
const savedObjectsClient = (await context.core).savedObjects.client;
32-
const serviceGroups = await getServiceGroups({ savedObjectsClient });
32+
const {
33+
savedObjects: { client: savedObjectsClient },
34+
} = await context.core;
35+
const serviceGroups = await getServiceGroups({
36+
savedObjectsClient,
37+
});
3338
return { serviceGroups };
3439
},
3540
});
@@ -46,7 +51,9 @@ const serviceGroupRoute = createApmServerRoute({
4651
},
4752
handler: async (resources): Promise<{ serviceGroup: SavedServiceGroup }> => {
4853
const { context, params } = resources;
49-
const savedObjectsClient = (await context.core).savedObjects.client;
54+
const {
55+
savedObjects: { client: savedObjectsClient },
56+
} = await context.core;
5057
const serviceGroup = await getServiceGroup({
5158
savedObjectsClient,
5259
serviceGroupId: params.query.serviceGroup,
@@ -75,13 +82,21 @@ const serviceGroupSaveRoute = createApmServerRoute({
7582
handler: async (resources): Promise<void> => {
7683
const { context, params } = resources;
7784
const { start, end, serviceGroupId } = params.query;
78-
const savedObjectsClient = (await context.core).savedObjects.client;
79-
const setup = await setupRequest(resources);
85+
const {
86+
savedObjects: { client: savedObjectsClient },
87+
uiSettings: { client: uiSettingsClient },
88+
} = await context.core;
89+
const [setup, maxNumberOfServices] = await Promise.all([
90+
setupRequest(resources),
91+
uiSettingsClient.get<number>(apmServiceGroupMaxNumberOfServices),
92+
]);
93+
8094
const items = await lookupServices({
8195
setup,
8296
kuery: params.body.kuery,
8397
start,
8498
end,
99+
maxNumberOfServices,
85100
});
86101
const serviceNames = items.map(({ serviceName }): string => serviceName);
87102
const serviceGroup: ServiceGroup = {
@@ -126,14 +141,21 @@ const serviceGroupServicesRoute = createApmServerRoute({
126141
handler: async (
127142
resources
128143
): Promise<{ items: Awaited<ReturnType<typeof lookupServices>> }> => {
129-
const { params } = resources;
144+
const { params, context } = resources;
130145
const { kuery = '', start, end } = params.query;
131-
const setup = await setupRequest(resources);
146+
const {
147+
uiSettings: { client: uiSettingsClient },
148+
} = await context.core;
149+
const [setup, maxNumberOfServices] = await Promise.all([
150+
setupRequest(resources),
151+
uiSettingsClient.get<number>(apmServiceGroupMaxNumberOfServices),
152+
]);
132153
const items = await lookupServices({
133154
setup,
134155
kuery,
135156
start,
136157
end,
158+
maxNumberOfServices,
137159
});
138160
return { items };
139161
},

x-pack/plugins/apm/server/routes/service_map/get_service_map.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,17 @@ async function getConnectionData({
9090
});
9191
}
9292

93-
async function getServicesData(options: IEnvOptions) {
94-
const { environment, setup, searchAggregatedTransactions, start, end } =
95-
options;
96-
93+
async function getServicesData(
94+
options: IEnvOptions & { maxNumberOfServices: number }
95+
) {
96+
const {
97+
environment,
98+
setup,
99+
searchAggregatedTransactions,
100+
start,
101+
end,
102+
maxNumberOfServices,
103+
} = options;
97104
const params = {
98105
apm: {
99106
events: [
@@ -117,7 +124,7 @@ async function getServicesData(options: IEnvOptions) {
117124
services: {
118125
terms: {
119126
field: SERVICE_NAME,
120-
size: 500,
127+
size: maxNumberOfServices,
121128
},
122129
aggs: {
123130
agent_name: {
@@ -156,7 +163,9 @@ async function getServicesData(options: IEnvOptions) {
156163
export type ConnectionsResponse = Awaited<ReturnType<typeof getConnectionData>>;
157164
export type ServicesResponse = Awaited<ReturnType<typeof getServicesData>>;
158165

159-
export function getServiceMap(options: IEnvOptions) {
166+
export function getServiceMap(
167+
options: IEnvOptions & { maxNumberOfServices: number }
168+
) {
160169
return withApmSpan('get_service_map', async () => {
161170
const { logger } = options;
162171
const anomaliesPromise = getServiceAnomalies(

x-pack/plugins/apm/server/routes/service_map/route.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import Boom from '@hapi/boom';
99
import * as t from 'io-ts';
10+
import { apmServiceGroupMaxNumberOfServices } from '@kbn/observability-plugin/common';
1011
import { isActivePlatinumLicense } from '../../../common/license_check';
1112
import { invalidLicenseMessage } from '../../../common/service_map';
1213
import { notifyFeatureUsage } from '../../feature';
@@ -109,15 +110,19 @@ const serviceMapRoute = createApmServerRoute({
109110
},
110111
} = params;
111112

112-
const savedObjectsClient = (await context.core).savedObjects.client;
113-
const [setup, serviceGroup] = await Promise.all([
113+
const {
114+
savedObjects: { client: savedObjectsClient },
115+
uiSettings: { client: uiSettingsClient },
116+
} = await context.core;
117+
const [setup, serviceGroup, maxNumberOfServices] = await Promise.all([
114118
setupRequest(resources),
115119
serviceGroupId
116120
? getServiceGroup({
117121
savedObjectsClient,
118122
serviceGroupId,
119123
})
120124
: Promise.resolve(null),
125+
uiSettingsClient.get<number>(apmServiceGroupMaxNumberOfServices),
121126
]);
122127

123128
const serviceNames = [
@@ -140,6 +145,7 @@ const serviceMapRoute = createApmServerRoute({
140145
logger,
141146
start,
142147
end,
148+
maxNumberOfServices,
143149
});
144150
},
145151
});

x-pack/plugins/apm/server/routes/services/get_services/get_sorted_and_filtered_services.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@ export async function getSortedAndFilteredServices({
2222
environment,
2323
logger,
2424
serviceGroup,
25+
maxNumberOfServices,
2526
}: {
2627
setup: Setup;
2728
start: number;
2829
end: number;
2930
environment: Environment;
3031
logger: Logger;
3132
serviceGroup: ServiceGroup | null;
33+
maxNumberOfServices: number;
3234
}) {
3335
const { apmEventClient } = setup;
3436

@@ -48,7 +50,7 @@ export async function getSortedAndFilteredServices({
4850
],
4951
},
5052
body: {
51-
size: 500,
53+
size: maxNumberOfServices,
5254
field: SERVICE_NAME,
5355
},
5456
}

x-pack/plugins/apm/server/routes/services/route.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
} from '@kbn/ml-plugin/server';
1717
import { ScopedAnnotationsClient } from '@kbn/observability-plugin/server';
1818
import { Annotation } from '@kbn/observability-plugin/common/annotations';
19+
import { apmServiceGroupMaxNumberOfServices } from '@kbn/observability-plugin/common';
1920
import { latencyAggregationTypeRt } from '../../../common/latency_aggregation_types';
2021
import { ProfilingValueType } from '../../../common/profiling';
2122
import { getSearchAggregatedTransactions } from '../../lib/helpers/transactions';
@@ -1220,14 +1221,17 @@ const sortedAndFilteredServicesRoute = createApmServerRoute({
12201221
};
12211222
}
12221223

1223-
const savedObjectsClient = (await resources.context.core).savedObjects
1224-
.client;
1224+
const {
1225+
savedObjects: { client: savedObjectsClient },
1226+
uiSettings: { client: uiSettingsClient },
1227+
} = await resources.context.core;
12251228

1226-
const [setup, serviceGroup] = await Promise.all([
1229+
const [setup, serviceGroup, maxNumberOfServices] = await Promise.all([
12271230
setupRequest(resources),
12281231
serviceGroupId
12291232
? getServiceGroup({ savedObjectsClient, serviceGroupId })
12301233
: Promise.resolve(null),
1234+
uiSettingsClient.get<number>(apmServiceGroupMaxNumberOfServices),
12311235
]);
12321236
return {
12331237
services: await getSortedAndFilteredServices({
@@ -1237,6 +1241,7 @@ const sortedAndFilteredServicesRoute = createApmServerRoute({
12371241
environment,
12381242
logger: resources.logger,
12391243
serviceGroup,
1244+
maxNumberOfServices,
12401245
}),
12411246
};
12421247
},

x-pack/plugins/observability/common/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export {
1717
defaultApmServiceEnvironment,
1818
apmServiceInventoryOptimizedSorting,
1919
apmProgressiveLoading,
20+
apmServiceGroupMaxNumberOfServices,
2021
apmTraceExplorerTab,
2122
apmOperationsTab,
2223
} from './ui_settings_keys';

x-pack/plugins/observability/common/ui_settings_keys.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,7 @@ export const apmProgressiveLoading = 'observability:apmProgressiveLoading';
1515
export const enableServiceGroups = 'observability:enableServiceGroups';
1616
export const apmServiceInventoryOptimizedSorting =
1717
'observability:apmServiceInventoryOptimizedSorting';
18+
export const apmServiceGroupMaxNumberOfServices =
19+
'observability:apmServiceGroupMaxNumberOfServices';
1820
export const apmTraceExplorerTab = 'observability:apmTraceExplorerTab';
1921
export const apmOperationsTab = 'observability:apmOperationsTab';

x-pack/plugins/observability/public/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export {
3030
enableInfrastructureView,
3131
enableServiceGroups,
3232
enableNewSyntheticsView,
33+
apmServiceGroupMaxNumberOfServices,
3334
} from '../common/ui_settings_keys';
3435
export { uptimeOverviewLocatorID } from '../common';
3536

x-pack/plugins/observability/server/ui_settings.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
enableServiceGroups,
2020
apmServiceInventoryOptimizedSorting,
2121
enableNewSyntheticsView,
22+
apmServiceGroupMaxNumberOfServices,
2223
apmTraceExplorerTab,
2324
apmOperationsTab,
2425
} from '../common/ui_settings_keys';
@@ -189,6 +190,17 @@ export const uiSettings: Record<string, UiSettingsParams<boolean | number | stri
189190
requiresPageReload: false,
190191
type: 'boolean',
191192
},
193+
[apmServiceGroupMaxNumberOfServices]: {
194+
category: [observabilityFeatureId],
195+
name: i18n.translate('xpack.observability.serviceGroupMaxServicesUiSettingName', {
196+
defaultMessage: 'Maximum services in a service group',
197+
}),
198+
value: 500,
199+
description: i18n.translate('xpack.observability.serviceGroupMaxServicesUiSettingDescription', {
200+
defaultMessage: 'Limit the number of services in a given service group',
201+
}),
202+
schema: schema.number({ min: 1 }),
203+
},
192204
[apmTraceExplorerTab]: {
193205
category: [observabilityFeatureId],
194206
name: i18n.translate('xpack.observability.apmTraceExplorerTab', {

0 commit comments

Comments
 (0)