From eaf721588b86c9d2080278fdec4bfa6a70c88cb0 Mon Sep 17 00:00:00 2001 From: Gero Posmyk-Leinemann Date: Wed, 31 Aug 2022 19:06:01 +0000 Subject: [PATCH] [server] Don't raise alerts on unspecific errors --- .../server/src/workspace/workspace-starter.ts | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/components/server/src/workspace/workspace-starter.ts b/components/server/src/workspace/workspace-starter.ts index 9be5b092ebbfd7..d51302b86eedec 100644 --- a/components/server/src/workspace/workspace-starter.ts +++ b/components/server/src/workspace/workspace-starter.ts @@ -129,6 +129,7 @@ import { CachingBillingServiceClientProvider } from "@gitpod/usage-api/lib/usage import { Timestamp } from "google-protobuf/google/protobuf/timestamp_pb"; import { BillingMode } from "@gitpod/gitpod-protocol/lib/billing-mode"; import { System } from "@gitpod/usage-api/lib/usage/v1/billing_pb"; +import { LogContext } from "@gitpod/gitpod-protocol/lib/util/logging"; export interface StartWorkspaceOptions { rethrow?: boolean; @@ -304,6 +305,7 @@ export class WorkspaceStarter { } options = options || {}; + let instanceId: string | undefined = undefined; try { await this.checkBlockedRepository(user, workspace.contextURL); @@ -371,6 +373,7 @@ export class WorkspaceStarter { ), ); span.log({ newInstance: instance.id }); + instanceId = instance.id; const forceRebuild = !!workspace.context.forceImageBuild; @@ -427,12 +430,7 @@ export class WorkspaceStarter { forceRebuild, ); } catch (e) { - let failedReason: FailedInstanceStartReason = "other"; - if (e instanceof StartInstanceError) { - failedReason = e.reason; - } - increaseFailedInstanceStartCounter(failedReason); - TraceContext.setError({ span }, e); + this.logAndTraceStartWorkspaceError({ span }, { userId: user.id, instanceId }, e); throw e; } finally { span.finish(); @@ -594,16 +592,7 @@ export class WorkspaceStarter { if (rethrow) { throw err; } else { - TraceContext.setError({ span }, err); - let reason: FailedInstanceStartReason | undefined = undefined; - if (err instanceof StartInstanceError) { - reason = err.reason; - increaseFailedInstanceStartCounter(err.reason); - } - log.error({ userId: user.id, instanceId: instance.id }, "error starting instance", err, { - failedInstanceStartReason: reason, - }); - span.setTag("failedInstanceStartReason", reason); + this.logAndTraceStartWorkspaceError({ span }, { userId: user.id, instanceId: instance.id }, err); } return { instanceID: instance.id }; @@ -612,6 +601,20 @@ export class WorkspaceStarter { } } + protected logAndTraceStartWorkspaceError(ctx: TraceContext, logCtx: LogContext, err: any) { + TraceContext.setError(ctx, err); + + let reason: FailedInstanceStartReason | undefined = undefined; + if (err instanceof StartInstanceError) { + reason = err.reason; + increaseFailedInstanceStartCounter(reason); + } + log.error(logCtx, "error starting instance", err, { + failedInstanceStartReason: reason, + }); + ctx.span?.setTag("failedInstanceStartReason", reason); + } + protected async createMetadata(workspace: Workspace): Promise { let metadata = new WorkspaceMetadata(); metadata.setOwner(workspace.ownerId); @@ -1275,12 +1278,13 @@ export class WorkspaceStarter { TraceContext.setError({ span }, err); const looksLikeUserError = (msg: string): boolean => { - return msg.startsWith("build failed:") || msg.startsWith("headless task failed:"); + return msg.startsWith("build failed:") || msg.includes("headless task failed:"); }; if (looksLikeUserError(message)) { - log.debug( + log.info( { instanceId: instance.id, userId: user.id, workspaceId: workspace.id }, `workspace image build failed: ${message}`, + { looksLikeUserError: true }, ); } else { log.error(