Skip to content

Commit

Permalink
added telemetry with most common error from agent logs
Browse files Browse the repository at this point in the history
  • Loading branch information
juliaElastic committed Nov 23, 2022
1 parent e00e26e commit 5cb4a12
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 0 deletions.
89 changes: 89 additions & 0 deletions x-pack/plugins/fleet/server/collectors/agent_logs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* 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 type { ElasticsearchClient } from '@kbn/core-elasticsearch-server';

import { appContextService } from '../services';

export interface AgentLogsData {
agent_logs_top_errors: string[];
fleet_server_logs_top_errors: string[];
}

const DEFAULT_LOGS_DATA = {
agent_logs_top_errors: [],
fleet_server_logs_top_errors: [],
};

export async function getAgentLogsTopErrors(
esClient?: ElasticsearchClient
): Promise<AgentLogsData> {
if (!esClient) {
return DEFAULT_LOGS_DATA;
}
try {
const queryTopMessages = (index: string) =>
esClient.search({
index,
size: 0,
query: {
bool: {
filter: [
{
term: {
'log.level': 'error',
},
},
{
range: {
'@timestamp': {
gte: 'now-1h',
},
},
},
],
},
},
aggs: {
message_sample: {
sampler: {
shard_size: 200,
},
aggs: {
categories: {
categorize_text: {
field: 'message',
size: 10,
},
},
},
},
},
});

const transformBuckets = (resp: any) =>
((resp?.aggregations?.message_sample as any)?.categories?.buckets ?? [])
.slice(0, 3)
.map((bucket: any) => bucket.key);

const agentResponse = await queryTopMessages('logs-elastic_agent-*');

const fleetServerResponse = await queryTopMessages('logs-elastic_agent.fleet_server-*');

return {
agent_logs_top_errors: transformBuckets(agentResponse),
fleet_server_logs_top_errors: transformBuckets(fleetServerResponse),
};
} catch (error) {
if (error.statusCode === 404) {
appContextService.getLogger().debug('Index pattern logs-elastic_agent* does not exist yet.');
} else {
throw error;
}
return DEFAULT_LOGS_DATA;
}
}
2 changes: 2 additions & 0 deletions x-pack/plugins/fleet/server/collectors/register.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import type { PackageUsage } from './package_collectors';
import { getFleetServerUsage, getFleetServerConfig } from './fleet_server_collector';
import type { FleetServerUsage } from './fleet_server_collector';
import { getAgentPoliciesUsage } from './agent_policies';
import { getAgentLogsTopErrors } from './agent_logs';

export interface Usage {
agents_enabled: boolean;
Expand All @@ -44,6 +45,7 @@ export const fetchFleetUsage = async (
...(await getAgentData(esClient, abortController)),
fleet_server_config: await getFleetServerConfig(soClient),
agent_policies: await getAgentPoliciesUsage(esClient, abortController),
...(await getAgentLogsTopErrors(esClient)),
};
return usage;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,18 @@ export const fleetUsagesSchema: RootSchema<any> = {
},
},
},
agent_logs_top_errors: {
type: 'array',
items: {
type: 'text',
_meta: { description: 'Top messages from agent error logs' },
},
},
fleet_server_logs_top_errors: {
type: 'array',
items: {
type: 'text',
_meta: { description: 'Top messages from fleet server error logs' },
},
},
};

0 comments on commit 5cb4a12

Please sign in to comment.