mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-09-18 23:36:09 +00:00
logging: reduce grpc logging noise (#3329)
* Normalize gRPC logs to print at warn level only * Fix grpcLogger level enablement --------- Signed-off-by: Daniel Weiße <dw@edgeless.systems>
This commit is contained in:
parent
6e6ea1a9d5
commit
c11631ec11
@ -46,11 +46,7 @@ func main() {
|
|||||||
verbosity := flag.Int("v", 0, logger.CmdLineVerbosityDescription)
|
verbosity := flag.Int("v", 0, logger.CmdLineVerbosityDescription)
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
log := logger.NewJSONLogger(logger.VerbosityFromInt(*verbosity)).WithGroup("bootstrapper")
|
log := logger.NewJSONLogger(logger.VerbosityFromInt(*verbosity)).WithGroup("bootstrapper")
|
||||||
logger.ReplaceGRPCLogger(
|
logger.ReplaceGRPCLogger(logger.GRPCLogger(log))
|
||||||
slog.New(
|
|
||||||
logger.NewLevelHandler(logger.VerbosityFromInt(*verbosity), log.Handler()),
|
|
||||||
).WithGroup("gRPC"),
|
|
||||||
)
|
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
@ -109,7 +109,7 @@ func New(
|
|||||||
grpcServer := grpc.NewServer(
|
grpcServer := grpc.NewServer(
|
||||||
grpc.Creds(atlscredentials.New(issuer, nil)),
|
grpc.Creds(atlscredentials.New(issuer, nil)),
|
||||||
grpc.KeepaliveParams(keepalive.ServerParameters{Time: 15 * time.Second}),
|
grpc.KeepaliveParams(keepalive.ServerParameters{Time: 15 * time.Second}),
|
||||||
logger.GetServerUnaryInterceptor(log.WithGroup("gRPC")),
|
logger.GetServerUnaryInterceptor(logger.GRPCLogger(log)),
|
||||||
)
|
)
|
||||||
initproto.RegisterAPIServer(grpcServer, server)
|
initproto.RegisterAPIServer(grpcServer, server)
|
||||||
|
|
||||||
|
@ -157,8 +157,8 @@ func Start(log *slog.Logger, wg *sync.WaitGroup, serv pb.DebugdServer) {
|
|||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
|
|
||||||
grpcLog := log.WithGroup("gRPC")
|
grpcLog := logger.GRPCLogger(log)
|
||||||
logger.ReplaceGRPCLogger(slog.New(logger.NewLevelHandler(slog.LevelWarn, grpcLog.Handler())))
|
logger.ReplaceGRPCLogger(grpcLog)
|
||||||
|
|
||||||
grpcServer := grpc.NewServer(
|
grpcServer := grpc.NewServer(
|
||||||
logger.GetServerStreamInterceptor(grpcLog),
|
logger.GetServerStreamInterceptor(grpcLog),
|
||||||
|
@ -59,7 +59,7 @@ func New(issuer atls.Issuer, factory kmsFactory, log *slog.Logger) *RecoveryServ
|
|||||||
|
|
||||||
grpcServer := grpc.NewServer(
|
grpcServer := grpc.NewServer(
|
||||||
grpc.Creds(atlscredentials.New(issuer, nil)),
|
grpc.Creds(atlscredentials.New(issuer, nil)),
|
||||||
logger.GetServerStreamInterceptor(log.WithGroup("gRPC")),
|
logger.GetServerStreamInterceptor(logger.GRPCLogger(log)),
|
||||||
)
|
)
|
||||||
recoverproto.RegisterAPIServer(grpcServer, server)
|
recoverproto.RegisterAPIServer(grpcServer, server)
|
||||||
|
|
||||||
|
@ -19,24 +19,28 @@ import (
|
|||||||
|
|
||||||
func replaceGRPCLogger(log *slog.Logger) {
|
func replaceGRPCLogger(log *slog.Logger) {
|
||||||
gl := &grpcLogger{
|
gl := &grpcLogger{
|
||||||
logger: log.With(slog.String("system", "grpc"), slog.Bool("grpc_log", true)),
|
logger: log,
|
||||||
verbosity: 0,
|
verbosity: 0,
|
||||||
}
|
}
|
||||||
grpclog.SetLoggerV2(gl)
|
grpclog.SetLoggerV2(gl)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *grpcLogger) log(level slog.Level, args ...interface{}) {
|
func (l *grpcLogger) log(level slog.Level, args ...interface{}) {
|
||||||
var pcs [1]uintptr
|
if l.logger.Enabled(context.Background(), level) {
|
||||||
runtime.Callers(3, pcs[:])
|
var pcs [1]uintptr
|
||||||
r := slog.NewRecord(time.Now(), level, fmt.Sprint(args...), pcs[0])
|
runtime.Callers(3, pcs[:])
|
||||||
_ = l.logger.Handler().Handle(context.Background(), r)
|
r := slog.NewRecord(time.Now(), level, fmt.Sprint(args...), pcs[0])
|
||||||
|
_ = l.logger.Handler().Handle(context.Background(), r)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *grpcLogger) logf(level slog.Level, format string, args ...interface{}) {
|
func (l *grpcLogger) logf(level slog.Level, format string, args ...interface{}) {
|
||||||
var pcs [1]uintptr
|
if l.logger.Enabled(context.Background(), level) {
|
||||||
runtime.Callers(3, pcs[:])
|
var pcs [1]uintptr
|
||||||
r := slog.NewRecord(time.Now(), level, fmt.Sprintf(format, args...), pcs[0])
|
runtime.Callers(3, pcs[:])
|
||||||
_ = l.logger.Handler().Handle(context.Background(), r)
|
r := slog.NewRecord(time.Now(), level, fmt.Sprintf(format, args...), pcs[0])
|
||||||
|
_ = l.logger.Handler().Handle(context.Background(), r)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type grpcLogger struct {
|
type grpcLogger struct {
|
||||||
|
@ -13,45 +13,45 @@ import (
|
|||||||
|
|
||||||
// LevelHandler copied from the official LevelHandler example in the slog package documentation.
|
// LevelHandler copied from the official LevelHandler example in the slog package documentation.
|
||||||
|
|
||||||
// LevelHandler wraps a Handler with an Enabled method
|
// levelHandler wraps a Handler with an Enabled method
|
||||||
// that returns false for levels below a minimum.
|
// that returns false for levels below a minimum.
|
||||||
type LevelHandler struct {
|
type levelHandler struct {
|
||||||
level slog.Leveler
|
level slog.Leveler
|
||||||
handler slog.Handler
|
handler slog.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewLevelHandler returns a LevelHandler with the given level.
|
// newLevelHandler returns a LevelHandler with the given level.
|
||||||
// All methods except Enabled delegate to h.
|
// All methods except Enabled delegate to h.
|
||||||
func NewLevelHandler(level slog.Leveler, h slog.Handler) *LevelHandler {
|
func newLevelHandler(level slog.Leveler, h slog.Handler) *levelHandler {
|
||||||
// Optimization: avoid chains of LevelHandlers.
|
// Optimization: avoid chains of LevelHandlers.
|
||||||
if lh, ok := h.(*LevelHandler); ok {
|
if lh, ok := h.(*levelHandler); ok {
|
||||||
h = lh.Handler()
|
h = lh.Handler()
|
||||||
}
|
}
|
||||||
return &LevelHandler{level, h}
|
return &levelHandler{level, h}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enabled implements Handler.Enabled by reporting whether
|
// Enabled implements Handler.Enabled by reporting whether
|
||||||
// level is at least as large as h's level.
|
// level is at least as large as h's level.
|
||||||
func (h *LevelHandler) Enabled(_ context.Context, level slog.Level) bool {
|
func (h *levelHandler) Enabled(_ context.Context, level slog.Level) bool {
|
||||||
return level >= h.level.Level()
|
return level >= h.level.Level()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle implements Handler.Handle.
|
// Handle implements Handler.Handle.
|
||||||
func (h *LevelHandler) Handle(ctx context.Context, r slog.Record) error {
|
func (h *levelHandler) Handle(ctx context.Context, r slog.Record) error {
|
||||||
return h.handler.Handle(ctx, r)
|
return h.handler.Handle(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithAttrs implements Handler.WithAttrs.
|
// WithAttrs implements Handler.WithAttrs.
|
||||||
func (h *LevelHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
func (h *levelHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
||||||
return NewLevelHandler(h.level, h.handler.WithAttrs(attrs))
|
return newLevelHandler(h.level, h.handler.WithAttrs(attrs))
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithGroup implements Handler.WithGroup.
|
// WithGroup implements Handler.WithGroup.
|
||||||
func (h *LevelHandler) WithGroup(name string) slog.Handler {
|
func (h *levelHandler) WithGroup(name string) slog.Handler {
|
||||||
return NewLevelHandler(h.level, h.handler.WithGroup(name))
|
return newLevelHandler(h.level, h.handler.WithGroup(name))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handler returns the Handler wrapped by h.
|
// Handler returns the Handler wrapped by h.
|
||||||
func (h *LevelHandler) Handler() slog.Handler {
|
func (h *levelHandler) Handler() slog.Handler {
|
||||||
return h.handler
|
return h.handler
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,11 @@ import (
|
|||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// GRPCLogger returns a logger at warn level for gRPC logging.
|
||||||
|
func GRPCLogger(l *slog.Logger) *slog.Logger {
|
||||||
|
return slog.New(newLevelHandler(slog.LevelWarn, l.Handler())).WithGroup("gRPC")
|
||||||
|
}
|
||||||
|
|
||||||
// ReplaceGRPCLogger replaces grpc's internal logger with the given logger.
|
// ReplaceGRPCLogger replaces grpc's internal logger with the given logger.
|
||||||
func ReplaceGRPCLogger(l *slog.Logger) {
|
func ReplaceGRPCLogger(l *slog.Logger) {
|
||||||
replaceGRPCLogger(l)
|
replaceGRPCLogger(l)
|
||||||
|
@ -58,10 +58,11 @@ func New(
|
|||||||
|
|
||||||
// Run starts the gRPC server on the given port, using the provided tlsConfig.
|
// Run starts the gRPC server on the given port, using the provided tlsConfig.
|
||||||
func (s *Server) Run(creds credentials.TransportCredentials, port string) error {
|
func (s *Server) Run(creds credentials.TransportCredentials, port string) error {
|
||||||
logger.ReplaceGRPCLogger(slog.New(logger.NewLevelHandler(slog.LevelWarn, s.log.Handler())).WithGroup("gRPC"))
|
grpcLog := logger.GRPCLogger(s.log)
|
||||||
|
logger.ReplaceGRPCLogger(grpcLog)
|
||||||
grpcServer := grpc.NewServer(
|
grpcServer := grpc.NewServer(
|
||||||
grpc.Creds(creds),
|
grpc.Creds(creds),
|
||||||
logger.GetServerUnaryInterceptor(s.log.WithGroup("gRPC")),
|
logger.GetServerUnaryInterceptor(grpcLog),
|
||||||
)
|
)
|
||||||
|
|
||||||
joinproto.RegisterAPIServer(grpcServer, s)
|
joinproto.RegisterAPIServer(grpcServer, s)
|
||||||
|
@ -48,9 +48,11 @@ func (s *Server) Run(port string) error {
|
|||||||
return fmt.Errorf("failed to listen on port %s: %v", port, err)
|
return fmt.Errorf("failed to listen on port %s: %v", port, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
server := grpc.NewServer(logger.GetServerUnaryInterceptor(s.log.WithGroup("gRPC")))
|
grpcLog := logger.GRPCLogger(s.log)
|
||||||
|
logger.ReplaceGRPCLogger(grpcLog)
|
||||||
|
|
||||||
|
server := grpc.NewServer(logger.GetServerUnaryInterceptor(grpcLog))
|
||||||
keyserviceproto.RegisterAPIServer(server, s)
|
keyserviceproto.RegisterAPIServer(server, s)
|
||||||
logger.ReplaceGRPCLogger(slog.New(logger.NewLevelHandler(slog.LevelWarn, s.log.Handler())).WithGroup("gRPC"))
|
|
||||||
|
|
||||||
// start the server
|
// start the server
|
||||||
s.log.Info(fmt.Sprintf("Starting Constellation key management service on %s", listener.Addr().String()))
|
s.log.Info(fmt.Sprintf("Starting Constellation key management service on %s", listener.Addr().String()))
|
||||||
|
@ -26,11 +26,7 @@ func main() {
|
|||||||
verbosity := flag.Int("v", 0, logger.CmdLineVerbosityDescription)
|
verbosity := flag.Int("v", 0, logger.CmdLineVerbosityDescription)
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
log := logger.NewJSONLogger(logger.VerbosityFromInt(*verbosity)).WithGroup("upgrade-agent")
|
log := logger.NewJSONLogger(logger.VerbosityFromInt(*verbosity)).WithGroup("upgrade-agent")
|
||||||
logger.ReplaceGRPCLogger(
|
logger.ReplaceGRPCLogger(logger.GRPCLogger(log))
|
||||||
slog.New(
|
|
||||||
logger.NewLevelHandler(logger.VerbosityFromInt(*verbosity), log.Handler()),
|
|
||||||
).WithGroup("gRPC"),
|
|
||||||
)
|
|
||||||
|
|
||||||
handler := file.NewHandler(afero.NewOsFs())
|
handler := file.NewHandler(afero.NewOsFs())
|
||||||
server, err := server.New(log, handler)
|
server, err := server.New(log, handler)
|
||||||
|
@ -54,7 +54,7 @@ func New(log *slog.Logger, fileHandler file.Handler) (*Server, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
grpcServer := grpc.NewServer(
|
grpcServer := grpc.NewServer(
|
||||||
logger.GetServerUnaryInterceptor(log.WithGroup("gRPC")),
|
logger.GetServerUnaryInterceptor(logger.GRPCLogger(log)),
|
||||||
)
|
)
|
||||||
upgradeproto.RegisterUpdateServer(grpcServer, server)
|
upgradeproto.RegisterUpdateServer(grpcServer, server)
|
||||||
|
|
||||||
|
@ -56,9 +56,10 @@ func (s *Server) Run(httpListener, grpcListener net.Listener) error {
|
|||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
var once sync.Once
|
var once sync.Once
|
||||||
|
|
||||||
logger.ReplaceGRPCLogger(slog.New(logger.NewLevelHandler(slog.LevelWarn, s.log.Handler()).WithGroup("grpc")))
|
grpcLog := logger.GRPCLogger(s.log)
|
||||||
|
logger.ReplaceGRPCLogger(grpcLog)
|
||||||
grpcServer := grpc.NewServer(
|
grpcServer := grpc.NewServer(
|
||||||
logger.GetServerUnaryInterceptor(s.log.WithGroup("gRPC")),
|
logger.GetServerUnaryInterceptor(grpcLog),
|
||||||
grpc.KeepaliveParams(keepalive.ServerParameters{Time: 15 * time.Second}),
|
grpc.KeepaliveParams(keepalive.ServerParameters{Time: 15 * time.Second}),
|
||||||
)
|
)
|
||||||
verifyproto.RegisterAPIServer(grpcServer, s)
|
verifyproto.RegisterAPIServer(grpcServer, s)
|
||||||
|
Loading…
Reference in New Issue
Block a user