feat: sentry integration (#1944)

* initial sentry variables and secrets

* feat: sentry monitoring

* fix typo

* feat(sentry version): sentry capability

* fix(sentry include): included sentry import 4 zitadel

* usage flag for sentry

* improve sentry flag

* merge main

* fix sentry config

* add sentry dsn to secret env vars

* fix test

* log sentry start

* add sentry grpc interceptor and recover

* add sentry http interceptor to asset api

* fix interceptor order

* try improve sentry recover

* fix i18n interception

* panic

Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
Christian Jakob
2021-07-05 10:58:58 +02:00
committed by GitHub
parent beb1c1604a
commit b024cda4e5
16 changed files with 218 additions and 11 deletions

View File

@@ -0,0 +1,26 @@
package middleware
import (
"context"
"github.com/getsentry/sentry-go"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"github.com/caos/zitadel/internal/api/grpc/errors"
)
func SentryHandler() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
return sendErrToSentry(ctx, req, handler)
}
}
func sendErrToSentry(ctx context.Context, req interface{}, handler grpc.UnaryHandler) (interface{}, error) {
resp, err := handler(ctx, req)
code, _, _, _ := errors.ExtractCaosError(err)
if code == codes.Unknown || code == codes.Internal {
sentry.CaptureException(err)
}
return resp, err
}

View File

@@ -3,12 +3,13 @@ package middleware
import (
"context"
"errors"
caos_errs "github.com/caos/zitadel/internal/errors"
"github.com/caos/logging"
"github.com/caos/zitadel/internal/i18n"
"github.com/rakyll/statik/fs"
"golang.org/x/text/language"
caos_errs "github.com/caos/zitadel/internal/errors"
"github.com/caos/zitadel/internal/i18n"
)
type localizers interface {
@@ -35,10 +36,8 @@ func translateError(ctx context.Context, err error, translator *i18n.Translator)
caosErr := new(caos_errs.CaosError)
if errors.As(err, &caosErr) {
caosErr.SetMessage(translator.LocalizeFromCtx(ctx, caosErr.GetMessage(), nil))
} else {
return err
}
return caosErr
return err
}
func newZitadelTranslator(defaultLanguage language.Tag) *i18n.Translator {

View File

@@ -37,6 +37,7 @@ func CreateServer(verifier *authz.TokenVerifier, authConfig authz.Config, lang l
middleware.MetricsHandler(metricTypes, grpc_api.Probes...),
middleware.ErrorHandler(),
middleware.AuthorizationInterceptor(verifier, authConfig),
middleware.SentryHandler(),
middleware.TranslationHandler(lang),
middleware.ValidationHandler(),
middleware.ServiceHandler(),