From 81bc8504d69f792a7f917e5fba575f6ccfff0e85 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 09:08:57 +0000 Subject: [PATCH] Send errors in API calls and bulker flushes to APM (#3053) (#3055) * Send errors in API calls to APM * Capture errors in bulker transactions * Add changelog (cherry picked from commit 2e7e33bf864ab36e47d80357a7de5370eaaf7bd3) Co-authored-by: Josh Dover <1813008+joshdover@users.noreply.github.com> --- .../fragments/1698163014-apm-errors.yaml | 32 +++++++++++++++++++ internal/pkg/api/error.go | 6 ++++ internal/pkg/bulk/engine.go | 1 + 3 files changed, 39 insertions(+) create mode 100644 changelog/fragments/1698163014-apm-errors.yaml diff --git a/changelog/fragments/1698163014-apm-errors.yaml b/changelog/fragments/1698163014-apm-errors.yaml new file mode 100644 index 000000000..94031306e --- /dev/null +++ b/changelog/fragments/1698163014-apm-errors.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Send errors in API calls and bulker flushes to APM + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; a word indicating the component this changeset affects. +component: + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +pr: https://github.com/elastic/fleet-server/pull/3053 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/internal/pkg/api/error.go b/internal/pkg/api/error.go index 7aa01e618..0207326ed 100644 --- a/internal/pkg/api/error.go +++ b/internal/pkg/api/error.go @@ -20,6 +20,7 @@ import ( "github.com/elastic/fleet-server/v7/internal/pkg/file/uploader" "github.com/elastic/fleet-server/v7/internal/pkg/limit" "github.com/elastic/fleet-server/v7/internal/pkg/logger" + "go.elastic.co/apm/v2" "github.com/rs/zerolog" "github.com/rs/zerolog/hlog" @@ -513,6 +514,11 @@ func ErrorResp(w http.ResponseWriter, r *http.Request, err error) { e = e.Int64(ECSEventDuration, time.Since(ts).Nanoseconds()) } e.Msg("HTTP request error") + + if (resp.StatusCode >= 500) { + apm.CaptureError(r.Context(), err).Send() + } + if rerr := resp.Write(w); rerr != nil { zlog.Error().Err(rerr).Msg("fail writing error response") } diff --git a/internal/pkg/bulk/engine.go b/internal/pkg/bulk/engine.go index 47dc5fbc1..d2a2da559 100644 --- a/internal/pkg/bulk/engine.go +++ b/internal/pkg/bulk/engine.go @@ -318,6 +318,7 @@ func (b *Bulker) flushQueue(ctx context.Context, w *semaphore.Weighted, queue qu if err != nil { failQueue(queue, err) + apm.CaptureError(ctx, err).Send() } log.Trace().