mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
fb5a9ec741
Logging to daemon logs every time there's an error with a log driver can be problematic since daemon logs can grow rapidly, potentially exhausting disk space. Instead, it's preferable to limit the rate at which log driver errors are allowed to be written. By default, this limit is 333 entries per second max. Signed-off-by: Angel Velazquez <angelcar@amazon.com>
24 lines
925 B
Go
24 lines
925 B
Go
package logger
|
|
|
|
import (
|
|
"github.com/sirupsen/logrus"
|
|
"golang.org/x/time/rate"
|
|
)
|
|
|
|
// Rates based on journald defaults of 10,000 messages in 30s.
|
|
// reference: https://www.freedesktop.org/software/systemd/man/journald.conf.html#RateLimitIntervalSec=
|
|
var logErrorLimiter = rate.NewLimiter(333, 333)
|
|
|
|
// logDriverError logs errors produced by log drivers to the daemon logs. It also increments the logWritesFailedCount
|
|
// metric.
|
|
// Logging to the daemon logs is limited to 333 operations per second at most. If this limit is exceeded, the
|
|
// logWritesFailedCount is still counted, but logging to the daemon logs is omitted in order to prevent disk saturation.
|
|
func logDriverError(loggerName, msgLine string, logErr error) {
|
|
logWritesFailedCount.Inc(1)
|
|
if logErrorLimiter.Allow() {
|
|
logrus.WithError(logErr).
|
|
WithField("driver", loggerName).
|
|
WithField("message", msgLine).
|
|
Errorf("Error writing log message")
|
|
}
|
|
}
|