[Uptime] Fix uptime telemetry expensive query calls (#124281)

This commit is contained in:
Shahzad 2022-02-03 18:13:20 +01:00 committed by GitHub
parent 21710dfb77
commit d091e17d16
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 43 additions and 13 deletions

View file

@ -109,6 +109,8 @@ class ApiService {
body: JSON.stringify(data),
});
this.addInspectorRequest?.({ data: response, status: FETCH_STATUS.SUCCESS, loading: false });
if (decodeType) {
const decoded = decodeType.decode(response);
if (isRight(decoded)) {

View file

@ -11,6 +11,7 @@ import { CollectorFetchContext, UsageCollectionSetup } from 'src/plugins/usage_c
import { PageViewParams, UptimeTelemetry, Usage } from './types';
import { savedObjectsAdapter } from '../../saved_objects/saved_objects';
import { UptimeESClient, createUptimeESClient } from '../../lib';
import { createEsQuery } from '../../../../common/utils/es_search';
interface UptimeTelemetryCollector {
[key: number]: UptimeTelemetry;
@ -215,7 +216,7 @@ export class KibanaTelemetryAdapter {
savedObjectsClient: SavedObjectsClientContract
) {
const dynamicSettings = await savedObjectsAdapter.getUptimeDynamicSettings(savedObjectsClient);
const params = {
const params = createEsQuery({
index: dynamicSettings.heartbeatIndices,
body: {
query: {
@ -229,6 +230,11 @@ export class KibanaTelemetryAdapter {
},
},
},
{
exists: {
field: 'summary',
},
},
],
},
},
@ -271,9 +277,9 @@ export class KibanaTelemetryAdapter {
},
},
},
};
});
const { body: result } = await callCluster.search(params);
const { body: result } = await callCluster.search(params, 'telemetryLog');
const numberOfUniqueMonitors: number = result?.aggregations?.unique_monitors?.value ?? 0;
const numberOfUniqueLocations: number = result?.aggregations?.unique_locations?.value ?? 0;
@ -318,6 +324,11 @@ export class KibanaTelemetryAdapter {
},
},
},
{
exists: {
field: 'summary',
},
},
{
term: {
'monitor.fleet_managed': true,
@ -356,7 +367,7 @@ export class KibanaTelemetryAdapter {
},
};
const { body: result } = await callCluster.search(params);
const { body: result } = await callCluster.search(params, 'telemetryLogFleet');
const numberOfUniqueMonitors: number = result?.aggregations?.unique_monitors?.value ?? 0;
const monitorNameStats = result?.aggregations?.monitor_name;

View file

@ -12,6 +12,7 @@ export interface PageViewParams {
autoRefreshEnabled: boolean;
autorefreshInterval: number;
refreshTelemetryHistory?: boolean;
refreshEsData?: boolean;
}
export interface Stats {

View file

@ -21,18 +21,25 @@ export const createLogPageViewRoute: UMRestApiRouteFactory = () => ({
dateEnd: schema.string(),
autoRefreshEnabled: schema.boolean(),
autorefreshInterval: schema.number(),
refreshEsData: schema.maybe(schema.boolean()),
refreshTelemetryHistory: schema.maybe(schema.boolean()),
}),
},
handler: async ({ savedObjectsClient, uptimeEsClient, request }): Promise<any> => {
const pageView = request.body as PageViewParams;
if (pageView.refreshTelemetryHistory) {
// this is primarily only used for API testing
KibanaTelemetryAdapter.clearLocalTelemetry();
}
await KibanaTelemetryAdapter.countNoOfUniqueMonitorAndLocations(
uptimeEsClient,
savedObjectsClient
);
if (pageView.refreshEsData) {
// this is primarily only used for API testing
await KibanaTelemetryAdapter.countNoOfUniqueMonitorAndLocations(
uptimeEsClient,
savedObjectsClient
);
}
await KibanaTelemetryAdapter.countNoOfUniqueFleetManagedMonitors(uptimeEsClient);
return KibanaTelemetryAdapter.countPageView(pageView as PageViewParams);
},

View file

@ -14,8 +14,7 @@ export default function ({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const es = getService('es');
// FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/111240
describe.skip('telemetry collectors heartbeat', () => {
describe('telemetry collectors heartbeat', () => {
before('generating data', async () => {
await getService('esArchiver').load('x-pack/test/functional/es_archives/uptime/blank');
@ -69,7 +68,7 @@ export default function ({ getService }: FtrProviderContext) {
'downMonitorId',
1,
1,
1,
10 * 1000,
{
observer,
monitor: {
@ -79,7 +78,15 @@ export default function ({ getService }: FtrProviderContext) {
'down'
);
await makeChecksWithStatus(es, 'mixMonitorId', 1, 1, 1, { observer: observer2 }, 'down');
await makeChecksWithStatus(
es,
'mixMonitorId',
1,
1,
30 * 1000,
{ observer: observer2 },
'down'
);
await es.indices.refresh();
});
@ -103,6 +110,7 @@ export default function ({ getService }: FtrProviderContext) {
dateEnd: 'now/d',
autoRefreshEnabled: true,
refreshTelemetryHistory: true,
refreshEsData: true,
})
.expect(200);
@ -111,7 +119,7 @@ export default function ({ getService }: FtrProviderContext) {
monitor_page: 1,
no_of_unique_monitors: 4,
settings_page: 0,
monitor_frequency: [120, 0.001, 60, 60],
monitor_frequency: [10, 30, 60, 60],
monitor_name_stats: { min_length: 7, max_length: 22, avg_length: 12 },
no_of_unique_observer_locations: 3,
observer_location_name_stats: { min_length: 2, max_length: 7, avg_length: 4.8 },

View file

@ -175,6 +175,7 @@ export default function ({ getService }: FtrProviderContext) {
dateEnd: 'now/d',
autoRefreshEnabled: true,
refreshTelemetryHistory: true,
refreshEsData: true,
})
.expect(200);