|
@@ -0,0 +1,24 @@
|
|
|
+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")
|
|
|
+ }
|
|
|
+}
|