Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { type Nullable, TelemetryChannel, TelemetryCounter } from './types';
import * as collections from './collections_helpers';
import { CachedSubject, retryOnError$ } from './rxjs_helpers';
import { SenderUtils } from './sender_helpers';
import { copyLicenseFields, newTelemetryLogger } from './helpers';
import { copyLicenseFields, newTelemetryLogger, withErrorMessage } from './helpers';
import { type TelemetryLogger } from './telemetry_logger';

export const DEFAULT_QUEUE_CONFIG: QueueConfig = {
Expand Down Expand Up @@ -113,7 +113,7 @@ export class AsyncTelemetryEventsSender implements IAsyncTelemetryEventsSender {
this.logger.warn('Failure! Unable to send events to channel', {
events: result.events,
channel: result.channel,
error: result.message,
error_message: result.message,
} as LogMeta);
this.senderUtils?.incrementCounter(
TelemetryCounter.DOCS_LOST,
Expand All @@ -133,7 +133,7 @@ export class AsyncTelemetryEventsSender implements IAsyncTelemetryEventsSender {
}
},
error: (error) => {
this.logger.warn('Unexpected error sending events to channel', { error });
this.logger.warn('Unexpected error sending events to channel', withErrorMessage(error));
},
complete: () => {
this.logger.debug('Shutting down');
Expand Down Expand Up @@ -379,7 +379,7 @@ export class AsyncTelemetryEventsSender implements IAsyncTelemetryEventsSender {
channel
);

this.logger.warn('Runtime error', { error });
this.logger.warn('Runtime error', withErrorMessage(error));
throw newFailure(`Error posting events: ${error}`, channel, events.length);
});
} catch (err: unknown) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import {
} from './health_diagnostic_circuit_breakers.types';
import { type HealthDiagnosticQuery, QueryType } from './health_diagnostic_service.types';
import type { TelemetryLogger } from '../telemetry_logger';
import { newTelemetryLogger } from '../helpers';
import { newTelemetryLogger, withErrorMessage } from '../helpers';

export class CircuitBreakingQueryExecutorImpl implements CircuitBreakingQueryExecutor {
private readonly logger: TelemetryLogger;
Expand Down Expand Up @@ -160,7 +160,7 @@ export class CircuitBreakingQueryExecutorImpl implements CircuitBreakingQueryExe

finalize(() => {
this.client.closePointInTime({ id: pitId }).catch((error) => {
this.logger.warn('>> closePointInTime error', { error });
this.logger.warn('>> closePointInTime error', withErrorMessage(error));
});
})
);
Expand Down Expand Up @@ -252,7 +252,10 @@ export class CircuitBreakingQueryExecutorImpl implements CircuitBreakingQueryExe
return indices.filter((indexName) => indexName !== '');
})
.catch((error) => {
this.logger.info('Error while checking ILM status, assuming serverless', { error });
this.logger.info(
'Error while checking ILM status, assuming serverless',
withErrorMessage(error)
);
return [query.index];
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ describe('Security Solution - Health Diagnostic Queries - HealthDiagnosticServic

expect(result).toEqual([]);
expect(mockLogger.warn).toHaveBeenCalledWith(
'Error getting health diagnostic queries: Artifact not found',
'Error getting health diagnostic queries',
expect.any(Object)
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import {
TELEMETRY_HEALTH_DIAGNOSTIC_QUERY_STATS_EVENT,
} from '../event_based/events';
import { artifactService } from '../artifact';
import { newTelemetryLogger } from '../helpers';
import { newTelemetryLogger, withErrorMessage } from '../helpers';
import { telemetryConfiguration } from '../configuration';
import { RssGrowthCircuitBreaker } from './circuit_breakers/rss_growth_circuit_breaker';
import { TimeoutCircuitBreaker } from './circuit_breakers/timeout_circuit_breaker';
Expand Down Expand Up @@ -165,7 +165,7 @@ export class HealthDiagnosticServiceImpl implements HealthDiagnosticService {
message: error.message,
reason: error instanceof ValidationError ? error.result : undefined,
};
this.logger.error('Error running query', { error });
this.logger.error('Error running query', withErrorMessage(error));
resolve({
...queryStats,
failure,
Expand Down Expand Up @@ -296,7 +296,7 @@ export class HealthDiagnosticServiceImpl implements HealthDiagnosticService {
try {
this.analytics.reportEvent(eventTypeOpts.eventType, eventData as object);
} catch (error) {
this.logger.warn('Error sending EBT', { error });
this.logger.warn('Error sending EBT', withErrorMessage(error));
}
}

Expand All @@ -312,7 +312,12 @@ export class HealthDiagnosticServiceImpl implements HealthDiagnosticService {

return enabled && isDueForExecution(lastExecutedAt, now, scheduleCron);
} catch (error) {
this.logger.warn('Error processing health query', { error, name: query.name });
this.logger.warn(
'Error processing health query',
withErrorMessage(error, {
name: query.name,
} as LogMeta)
);
return false;
}
});
Expand All @@ -323,7 +328,7 @@ export class HealthDiagnosticServiceImpl implements HealthDiagnosticService {
const artifact = await artifactService.getArtifact(QUERY_ARTIFACT_ID);
return parseDiagnosticQueries(artifact.data);
} catch (error) {
this.logger.warn(`Error getting health diagnostic queries: ${error.message}`, { error });
this.logger.warn('Error getting health diagnostic queries', withErrorMessage(error));
return [];
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,14 @@ export function unflatten<T extends AnyObject = AnyObject>(object: AnyObject): T
}, {}) as T;
}

export function withErrorMessage(error?: Error, meta?: LogMeta): LogMeta {
return {
error,
error_message: error?.message,
...(meta ?? {}),
} as LogMeta;
}

function _set(object: AnyObject, key: string, value: unknown) {
if (key.startsWith('.') || key.endsWith('.') || contiguousDotRegex.test(key)) {
// Preserve original keys with dots used in non-path representations (e.g. '.kibana_field_name')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ import {
ruleExceptionListItemToTelemetryEvent,
setClusterInfo,
newTelemetryLogger,
withErrorMessage,
} from './helpers';
import { Fetcher } from '../../endpoint/routes/resolver/tree/utils/fetch';
import type { TreeOptions, TreeResponse } from '../../endpoint/routes/resolver/tree/utils/fetch';
Expand Down Expand Up @@ -631,8 +632,8 @@ export class TelemetryReceiver implements ITelemetryReceiver {

this.logger.debug('Diagnostic alerts to return', { numOfHits } as LogMeta);
fetchMore = numOfHits > 0 && numOfHits < telemetryConfiguration.telemetry_max_buffer_size;
} catch (e) {
this.logger.warn('Error fetching alerts', { error_message: e.message } as LogMeta);
} catch (error) {
this.logger.warn('Error fetching alerts', withErrorMessage(error));
fetchMore = false;
}

Expand Down Expand Up @@ -1017,10 +1018,10 @@ export class TelemetryReceiver implements ITelemetryReceiver {

yield alerts;
}
} catch (e) {
} catch (error) {
// to keep backward compatibility with the previous implementation, silent return
// once we start using `paginate` this error should be managed downstream
this.logger.warn('Error fetching alerts', { error_message: e.message } as LogMeta);
this.logger.warn('Error fetching alerts', withErrorMessage(error));
return;
} finally {
await this.closePointInTime(pitId);
Expand All @@ -1044,10 +1045,12 @@ export class TelemetryReceiver implements ITelemetryReceiver {
try {
await this.esClient().closePointInTime({ id: pitId });
} catch (error) {
this.logger.warn('Error trying to close point in time', {
pit: pitId,
error_message: error.message,
} as LogMeta);
this.logger.warn(
'Error trying to close point in time',
withErrorMessage(error, {
pit: pitId,
} as LogMeta)
);
}
}

Expand Down Expand Up @@ -1287,8 +1290,8 @@ export class TelemetryReceiver implements ITelemetryReceiver {
})) as { license: ESLicense };

return ret.license;
} catch (err) {
this.logger.warn('failed retrieving license', { error_message: err.message } as LogMeta);
} catch (error) {
this.logger.warn('failed retrieving license', withErrorMessage(error));
return undefined;
}
}
Expand Down Expand Up @@ -1378,9 +1381,9 @@ export class TelemetryReceiver implements ITelemetryReceiver {

yield data;
} while (esQuery.search_after !== undefined);
} catch (e) {
this.logger.warn('Error running paginated query', { error_message: e.message } as LogMeta);
throw e;
} catch (error) {
this.logger.warn('Error running paginated query', withErrorMessage(error));
throw error;
} finally {
await this.closePointInTime(pit.id);
}
Expand Down Expand Up @@ -1439,7 +1442,7 @@ export class TelemetryReceiver implements ITelemetryReceiver {
})
)
.catch((error) => {
this.logger.warn('Error fetching indices', { error_message: error } as LogMeta);
this.logger.warn('Error fetching indices', withErrorMessage(error));
throw error;
});
}
Expand Down Expand Up @@ -1480,7 +1483,7 @@ export class TelemetryReceiver implements ITelemetryReceiver {
})
)
.catch((error) => {
this.logger.warn('Error fetching datastreams', { error_message: error } as LogMeta);
this.logger.warn('Error fetching datastreams', withErrorMessage(error));
throw error;
});
}
Expand Down Expand Up @@ -1545,7 +1548,7 @@ export class TelemetryReceiver implements ITelemetryReceiver {
} as IndexStats;
}
} catch (error) {
this.logger.warn('Error fetching indices stats', { error_message: error } as LogMeta);
this.logger.warn('Error fetching indices stats', withErrorMessage(error));
throw error;
}
}
Expand Down Expand Up @@ -1583,7 +1586,7 @@ export class TelemetryReceiver implements ITelemetryReceiver {
yield entry;
}
} catch (error) {
this.logger.warn('Error fetching ilm stats', { error_message: error } as LogMeta);
this.logger.warn('Error fetching ilm stats', withErrorMessage(error));
throw error;
}
}
Expand Down Expand Up @@ -1632,7 +1635,7 @@ export class TelemetryReceiver implements ITelemetryReceiver {
})
)
.catch((error) => {
this.logger.warn('Error fetching index templates', { error_message: error } as LogMeta);
this.logger.warn('Error fetching index templates', withErrorMessage(error));
throw error;
});
}
Expand Down Expand Up @@ -1688,9 +1691,7 @@ export class TelemetryReceiver implements ITelemetryReceiver {
} as IlmPolicy;
}
} catch (error) {
this.logger.warn('Error fetching ilm policies', {
error_message: error.message,
} as LogMeta);
this.logger.warn('Error fetching ilm policies', withErrorMessage(error));
throw error;
}
}
Expand Down Expand Up @@ -1761,9 +1762,7 @@ export class TelemetryReceiver implements ITelemetryReceiver {
});
})
.catch((error) => {
this.logger.warn('Error fetching ingest pipelines stats', {
error_message: error,
} as LogMeta);
this.logger.warn('Error fetching ingest pipelines stats', withErrorMessage(error));
throw error;
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ import type { ExperimentalFeatures } from '../../../common';
import type { ITelemetryReceiver } from './receiver';
import { copyAllowlistedFields, filterList } from './filterlists';
import { createTelemetryTaskConfigs } from './tasks';
import { copyLicenseFields, createUsageCounterLabel, newTelemetryLogger } from './helpers';
import {
copyLicenseFields,
createUsageCounterLabel,
newTelemetryLogger,
withErrorMessage,
} from './helpers';
import { type TelemetryLogger } from './telemetry_logger';
import type { TelemetryChannel, TelemetryEvent } from './types';
import type { SecurityTelemetryTaskConfig } from './task';
Expand Down Expand Up @@ -284,7 +289,7 @@ export class TelemetryEventsSender implements ITelemetryEventsSender {

return false;
} catch (error) {
this.logger.warn('Error pinging telemetry services', { error });
this.logger.warn('Error pinging telemetry services', withErrorMessage(error));

return false;
}
Expand Down Expand Up @@ -347,8 +352,8 @@ export class TelemetryEventsSender implements ITelemetryEventsSender {
licenseInfo?.uid,
axiosInstance
);
} catch (err) {
this.logger.warn(`Error sending telemetry events data: ${err}`);
} catch (error) {
this.logger.warn('Error sending telemetry events data', withErrorMessage(error));
this.queue = [];
}
this.isSending = false;
Expand Down Expand Up @@ -394,8 +399,8 @@ export class TelemetryEventsSender implements ITelemetryEventsSender {
licenseInfo?.uid,
axiosInstance
);
} catch (err) {
this.logger.warn(`Error sending telemetry events data: ${err}`);
} catch (error) {
this.logger.warn('Error sending telemetry events data', withErrorMessage(error));
}
}

Expand Down Expand Up @@ -496,7 +501,7 @@ export class TelemetryEventsSender implements ITelemetryEventsSender {
});
this.logger.debug('Events sent!. Response', { status: resp.status } as LogMeta);
} catch (error) {
this.logger.warn('Error sending events', { error });
this.logger.warn('Error sending events', withErrorMessage(error));
const errorStatus = error?.response?.status;
if (errorStatus !== undefined && errorStatus !== null) {
this.telemetryUsageCounter?.incrementCounter({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import type { ITelemetryReceiver } from './receiver';
import type { ITelemetryEventsSender } from './sender';
import type { ITaskMetricsService } from './task_metrics.types';
import { stateSchemaByVersion, emptyState, type LatestTaskStateSchema } from './task_state';
import { newTelemetryLogger } from './helpers';
import { newTelemetryLogger, withErrorMessage } from './helpers';
import { type TelemetryLogger } from './telemetry_logger';

export interface SecurityTelemetryTaskConfig {
Expand Down Expand Up @@ -136,7 +136,7 @@ export class SecurityTelemetryTask {
params: { version: this.config.version },
});
} catch (error) {
this.logger.error('Error scheduling task', { error });
this.logger.error('Error scheduling task', withErrorMessage(error));
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import type { TaskExecutionPeriod } from '../task';
import type { ITaskMetricsService } from '../task_metrics.types';
import { artifactService } from '../artifact';
import { telemetryConfiguration } from '../configuration';
import { newTelemetryLogger } from '../helpers';
import { newTelemetryLogger, withErrorMessage } from '../helpers';

export function createTelemetryConfigurationTaskConfig() {
const taskName = 'Security Solution Telemetry Configuration Task';
Expand Down Expand Up @@ -143,7 +143,7 @@ export function createTelemetryConfigurationTaskConfig() {
log.debug('Updated TelemetryConfiguration');
return 0;
} catch (error) {
log.warn('Failed to set telemetry configuration', { error });
log.warn('Failed to set telemetry configuration', withErrorMessage(error));
telemetryConfiguration.resetAllToDefault();
await taskMetricsService.end(trace, error);
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
newTelemetryLogger,
createUsageCounterLabel,
safeValue,
withErrorMessage,
} from '../helpers';
import type { ITelemetryEventsSender } from '../sender';
import type { ITelemetryReceiver } from '../receiver';
Expand Down Expand Up @@ -146,8 +147,9 @@ export function createTelemetryCustomResponseActionRulesTaskConfig(maxTelemetryB
} as LogMeta);

return totalCount;
} catch (err) {
await taskMetricsService.end(trace, err);
} catch (error) {
log.warn('Error running custom response actions rule task', withErrorMessage(error));
await taskMetricsService.end(trace, error);
return 0;
}
},
Expand Down
Loading