mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
# Backport This will backport the following commits from `main` to `8.6`: - [[Fleet] publish `agents_per_version` telemetry as separate docs (#147615)](https://github.com/elastic/kibana/pull/147615) <!--- Backport version: 8.9.7 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Julia Bardi","email":"90178898+juliaElastic@users.noreply.github.com"},"sourceCommit":{"committedDate":"2022-12-15T15:15:10Z","message":"[Fleet] publish `agents_per_version` telemetry as separate docs (#147615)\n\n## Summary\r\n\r\nCloses https://github.com/elastic/kibana/issues/147543\r\n\r\nSending `agents_per_version` telemetry as separate docs with a new type\r\n`fleet_agents`.\r\nThis docs then can be indexed to a new index in telemetry.\r\n\r\nE.g. having 2 versions of agents enrolled to kibana, will result in 2\r\ndocuments sent\r\n```\r\n{ \"agents_per_version\": {\"version\":\"8.2.0\",\"count\":2000}}\r\n{ \"agents_per_version\": {\"version\":\"8.6.0\",\"count\":1}}\r\n\r\n```\r\n\r\nthe new data is visible in staging, under `ebt-kibana-server` index\r\npattern, I'll add a new indexer to have proper data types:\r\nhttps://telemetry-v2-staging.elastic.dev/s/kibana-core/app/r/s/QbN5e\r\n<img width=\"605\" alt=\"image\"\r\nsrc=\"https://user-images.githubusercontent.com/90178898/207886931-6d3e7922-9b18-45f5-8002-ff109b62310b.png\">","sha":"9273d2d373b6c54777dbf141dad4c2459984ac0c","branchLabelMapping":{"^v8.7.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","Team:Fleet","v8.6.0","v8.7.0"],"number":147615,"url":"https://github.com/elastic/kibana/pull/147615","mergeCommit":{"message":"[Fleet] publish `agents_per_version` telemetry as separate docs (#147615)\n\n## Summary\r\n\r\nCloses https://github.com/elastic/kibana/issues/147543\r\n\r\nSending `agents_per_version` telemetry as separate docs with a new type\r\n`fleet_agents`.\r\nThis docs then can be indexed to a new index in telemetry.\r\n\r\nE.g. having 2 versions of agents enrolled to kibana, will result in 2\r\ndocuments sent\r\n```\r\n{ \"agents_per_version\": {\"version\":\"8.2.0\",\"count\":2000}}\r\n{ \"agents_per_version\": {\"version\":\"8.6.0\",\"count\":1}}\r\n\r\n```\r\n\r\nthe new data is visible in staging, under `ebt-kibana-server` index\r\npattern, I'll add a new indexer to have proper data types:\r\nhttps://telemetry-v2-staging.elastic.dev/s/kibana-core/app/r/s/QbN5e\r\n<img width=\"605\" alt=\"image\"\r\nsrc=\"https://user-images.githubusercontent.com/90178898/207886931-6d3e7922-9b18-45f5-8002-ff109b62310b.png\">","sha":"9273d2d373b6c54777dbf141dad4c2459984ac0c"}},"sourceBranch":"main","suggestedTargetBranches":["8.6"],"targetPullRequestStates":[{"branch":"8.6","label":"v8.6.0","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.7.0","labelRegex":"^v8.7.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/147615","number":147615,"mergeCommit":{"message":"[Fleet] publish `agents_per_version` telemetry as separate docs (#147615)\n\n## Summary\r\n\r\nCloses https://github.com/elastic/kibana/issues/147543\r\n\r\nSending `agents_per_version` telemetry as separate docs with a new type\r\n`fleet_agents`.\r\nThis docs then can be indexed to a new index in telemetry.\r\n\r\nE.g. having 2 versions of agents enrolled to kibana, will result in 2\r\ndocuments sent\r\n```\r\n{ \"agents_per_version\": {\"version\":\"8.2.0\",\"count\":2000}}\r\n{ \"agents_per_version\": {\"version\":\"8.6.0\",\"count\":1}}\r\n\r\n```\r\n\r\nthe new data is visible in staging, under `ebt-kibana-server` index\r\npattern, I'll add a new indexer to have proper data types:\r\nhttps://telemetry-v2-staging.elastic.dev/s/kibana-core/app/r/s/QbN5e\r\n<img width=\"605\" alt=\"image\"\r\nsrc=\"https://user-images.githubusercontent.com/90178898/207886931-6d3e7922-9b18-45f5-8002-ff109b62310b.png\">","sha":"9273d2d373b6c54777dbf141dad4c2459984ac0c"}}]}] BACKPORT--> Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com>
This commit is contained in:
parent
2f08d7ddaa
commit
65a1706be4
3 changed files with 61 additions and 18 deletions
|
@ -28,6 +28,22 @@ export interface Usage {
|
|||
fleet_server: FleetServerUsage;
|
||||
}
|
||||
|
||||
export interface FleetUsage extends Usage {
|
||||
fleet_server_config: { policies: Array<{ input_config: any }> };
|
||||
agent_policies: { count: number; output_types: string[] };
|
||||
agents_per_version: Array<{
|
||||
version: string;
|
||||
count: number;
|
||||
}>;
|
||||
agent_checkin_status: {
|
||||
error: number;
|
||||
degraded: number;
|
||||
};
|
||||
agents_per_policy: number[];
|
||||
agent_logs_top_errors: string[];
|
||||
fleet_server_logs_top_errors: string[];
|
||||
}
|
||||
|
||||
export const fetchFleetUsage = async (
|
||||
core: CoreSetup,
|
||||
config: FleetConfigType,
|
||||
|
|
|
@ -13,17 +13,18 @@ import { throwUnrecoverableError } from '@kbn/task-manager-plugin/server';
|
|||
import type { CoreSetup } from '@kbn/core/server';
|
||||
import { withSpan } from '@kbn/apm-utils';
|
||||
|
||||
import type { Usage } from '../../collectors/register';
|
||||
import type { FleetUsage } from '../../collectors/register';
|
||||
|
||||
import { appContextService } from '../app_context';
|
||||
|
||||
import { fleetUsagesSchema } from './fleet_usages_schema';
|
||||
import { fleetAgentsSchema, fleetUsagesSchema } from './fleet_usages_schema';
|
||||
|
||||
const EVENT_TYPE = 'fleet_usage';
|
||||
const FLEET_USAGES_EVENT_TYPE = 'fleet_usage';
|
||||
const FLEET_AGENTS_EVENT_TYPE = 'fleet_agents';
|
||||
|
||||
export class FleetUsageSender {
|
||||
private taskManager?: TaskManagerStartContract;
|
||||
private taskVersion = '1.0.0';
|
||||
private taskVersion = '1.1.0';
|
||||
private taskType = 'Fleet-Usage-Sender';
|
||||
private wasStarted: boolean = false;
|
||||
private interval = '1h';
|
||||
|
@ -33,7 +34,7 @@ export class FleetUsageSender {
|
|||
constructor(
|
||||
taskManager: TaskManagerSetupContract,
|
||||
core: CoreSetup,
|
||||
fetchUsage: (abortController: AbortController) => Promise<Usage | undefined>
|
||||
fetchUsage: (abortController: AbortController) => Promise<FleetUsage | undefined>
|
||||
) {
|
||||
taskManager.registerTaskDefinitions({
|
||||
[this.taskType]: {
|
||||
|
@ -61,7 +62,7 @@ export class FleetUsageSender {
|
|||
private runTask = async (
|
||||
taskInstance: ConcreteTaskInstance,
|
||||
core: CoreSetup,
|
||||
fetchUsage: () => Promise<Usage | undefined>
|
||||
fetchUsage: () => Promise<FleetUsage | undefined>
|
||||
) => {
|
||||
if (!this.wasStarted) {
|
||||
appContextService.getLogger().debug('[runTask()] Aborted. Task not started yet');
|
||||
|
@ -79,8 +80,19 @@ export class FleetUsageSender {
|
|||
if (!usageData) {
|
||||
return;
|
||||
}
|
||||
appContextService.getLogger().debug(JSON.stringify(usageData));
|
||||
core.analytics.reportEvent(EVENT_TYPE, usageData);
|
||||
const { agents_per_version: agentsPerVersion, ...fleetUsageData } = usageData;
|
||||
appContextService
|
||||
.getLogger()
|
||||
.debug('Fleet usage telemetry: ' + JSON.stringify(fleetUsageData));
|
||||
|
||||
core.analytics.reportEvent(FLEET_USAGES_EVENT_TYPE, fleetUsageData);
|
||||
|
||||
appContextService
|
||||
.getLogger()
|
||||
.debug('Agents per version telemetry: ' + JSON.stringify(agentsPerVersion));
|
||||
agentsPerVersion.forEach((byVersion) => {
|
||||
core.analytics.reportEvent(FLEET_AGENTS_EVENT_TYPE, { agents_per_version: byVersion });
|
||||
});
|
||||
} catch (error) {
|
||||
appContextService
|
||||
.getLogger()
|
||||
|
@ -125,8 +137,13 @@ export class FleetUsageSender {
|
|||
*/
|
||||
private registerTelemetryEventType(core: CoreSetup): void {
|
||||
core.analytics.registerEventType({
|
||||
eventType: EVENT_TYPE,
|
||||
eventType: FLEET_USAGES_EVENT_TYPE,
|
||||
schema: fleetUsagesSchema,
|
||||
});
|
||||
|
||||
core.analytics.registerEventType({
|
||||
eventType: FLEET_AGENTS_EVENT_TYPE,
|
||||
schema: fleetAgentsSchema,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,25 @@
|
|||
|
||||
import type { RootSchema } from '@kbn/analytics-client';
|
||||
|
||||
export const fleetAgentsSchema: RootSchema<any> = {
|
||||
agents_per_version: {
|
||||
properties: {
|
||||
version: {
|
||||
type: 'keyword',
|
||||
_meta: {
|
||||
description: 'Agent version enrolled to this kibana',
|
||||
},
|
||||
},
|
||||
count: {
|
||||
type: 'long',
|
||||
_meta: {
|
||||
description: 'Number of agents enrolled that use this version',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const fleetUsagesSchema: RootSchema<any> = {
|
||||
agents_enabled: { type: 'boolean', _meta: { description: 'agents enabled' } },
|
||||
agents: {
|
||||
|
@ -106,15 +125,6 @@ export const fleetUsagesSchema: RootSchema<any> = {
|
|||
},
|
||||
},
|
||||
},
|
||||
agents_per_version: {
|
||||
type: 'array',
|
||||
items: {
|
||||
properties: {
|
||||
version: { type: 'keyword' },
|
||||
count: { type: 'long' },
|
||||
},
|
||||
},
|
||||
},
|
||||
agents_per_policy: {
|
||||
type: 'array',
|
||||
items: {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue