MM-22786 enterprise metrics for logging (#15313)

Adds metrics for logging engine which are collected by Prometheus.
- current queue level(s)
- rate of logging records emitted
- rate of logging errors
Этот коммит содержится в:
Doug Lauder
2020-09-01 10:29:29 -04:00
коммит произвёл GitHub
родитель 22297a9bf4
Коммит 05f1f35a00
20 изменённых файлов: 367 добавлений и 79 удалений

Просмотреть файл

@@ -28,7 +28,7 @@ type LogLevel struct {
}
type LogTarget struct {
Type string // one of "console", "file", "tcp", "syslog".
Type string // one of "console", "file", "tcp", "syslog", "none".
Format string // one of "json", "plain"
Levels []LogLevel
Options json.RawMessage
@@ -38,7 +38,7 @@ type LogTarget struct {
type LogTargetCfg map[string]*LogTarget
type LogrCleanup func() error
func newLogr(targets LogTargetCfg) (*logr.Logger, error) {
func newLogr() *logr.Logger {
lgr := &logr.Logr{}
lgr.OnExit = func(int) {}
lgr.OnPanic = func(interface{}) {}
@@ -46,12 +46,12 @@ func newLogr(targets LogTargetCfg) (*logr.Logger, error) {
lgr.OnQueueFull = onQueueFull
lgr.OnTargetQueueFull = onTargetQueueFull
err := logrAddTargets(lgr, targets)
logger := lgr.NewLogger()
return &logger, err
return &logger
}
func logrAddTargets(lgr *logr.Logr, targets LogTargetCfg) error {
func logrAddTargets(logger *logr.Logger, targets LogTargetCfg) error {
lgr := logger.Logr()
var errs error
for name, t := range targets {
target, err := NewLogrTarget(name, t)
@@ -59,7 +59,9 @@ func logrAddTargets(lgr *logr.Logr, targets LogTargetCfg) error {
errs = multierror.Append(err)
continue
}
lgr.AddTarget(target)
if target != nil {
lgr.AddTarget(target)
}
}
return errs
}
@@ -90,6 +92,8 @@ func NewLogrTarget(name string, t *LogTarget) (logr.Target, error) {
return newSyslogTarget(name, t, filter, formatter)
case "tcp":
return newTCPTarget(name, t, filter, formatter)
case "none":
return nil, nil
}
return nil, fmt.Errorf("invalid type '%s' for target %s", t.Type, name)
}
@@ -201,6 +205,10 @@ func checkFileWritable(filename string) error {
}
func isLevelEnabled(logger *logr.Logger, level logr.Level) bool {
if logger == nil || logger.Logr() == nil {
return false
}
status := logger.Logr().IsLevelEnabled(level)
return status.Enabled
}