Browse code

added logentries driver

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

Carlos Alexandro Becker authored on 2016/05/12 23:18:08
Showing 4 changed files
... ...
@@ -9,6 +9,7 @@ import (
9 9
 	_ "github.com/docker/docker/daemon/logger/gelf"
10 10
 	_ "github.com/docker/docker/daemon/logger/journald"
11 11
 	_ "github.com/docker/docker/daemon/logger/jsonfilelog"
12
+	_ "github.com/docker/docker/daemon/logger/logentries"
12 13
 	_ "github.com/docker/docker/daemon/logger/splunk"
13 14
 	_ "github.com/docker/docker/daemon/logger/syslog"
14 15
 )
... ...
@@ -6,6 +6,7 @@ import (
6 6
 	_ "github.com/docker/docker/daemon/logger/awslogs"
7 7
 	_ "github.com/docker/docker/daemon/logger/etwlogs"
8 8
 	_ "github.com/docker/docker/daemon/logger/jsonfilelog"
9
+	_ "github.com/docker/docker/daemon/logger/logentries"
9 10
 	_ "github.com/docker/docker/daemon/logger/splunk"
10 11
 	_ "github.com/docker/docker/daemon/logger/syslog"
11 12
 )
12 13
new file mode 100644
... ...
@@ -0,0 +1,94 @@
0
+// Package logentries provides the log driver for forwarding server logs
1
+// to logentries endpoints.
2
+package logentries
3
+
4
+import (
5
+	"fmt"
6
+
7
+	"github.com/Sirupsen/logrus"
8
+	"github.com/bsphere/le_go"
9
+	"github.com/docker/docker/daemon/logger"
10
+)
11
+
12
+type logentries struct {
13
+	tag           string
14
+	containerID   string
15
+	containerName string
16
+	writer        *le_go.Logger
17
+	extra         map[string]string
18
+}
19
+
20
+const (
21
+	name  = "logentries"
22
+	token = "logentries-token"
23
+)
24
+
25
+func init() {
26
+	if err := logger.RegisterLogDriver(name, New); err != nil {
27
+		logrus.Fatal(err)
28
+	}
29
+	if err := logger.RegisterLogOptValidator(name, ValidateLogOpt); err != nil {
30
+		logrus.Fatal(err)
31
+	}
32
+}
33
+
34
+// New creates a logentries logger using the configuration passed in on
35
+// the context. The supported context configuration variable is
36
+// logentries-token.
37
+func New(ctx logger.Context) (logger.Logger, error) {
38
+	logrus.WithField("container", ctx.ContainerID).
39
+		WithField("token", ctx.Config[token]).
40
+		Debug("logging driver logentries configured")
41
+
42
+	log, err := le_go.Connect(ctx.Config[token])
43
+	if err != nil {
44
+		return nil, err
45
+	}
46
+	return &logentries{
47
+		containerID:   ctx.ContainerID,
48
+		containerName: ctx.ContainerName,
49
+		writer:        log,
50
+	}, nil
51
+}
52
+
53
+func (f *logentries) Log(msg *logger.Message) error {
54
+	data := map[string]string{
55
+		"container_id":   f.containerID,
56
+		"container_name": f.containerName,
57
+		"source":         msg.Source,
58
+		"log":            string(msg.Line),
59
+	}
60
+	for k, v := range f.extra {
61
+		data[k] = v
62
+	}
63
+	f.writer.Println(f.tag, msg.Timestamp, data)
64
+	return nil
65
+}
66
+
67
+func (f *logentries) Close() error {
68
+	return f.writer.Close()
69
+}
70
+
71
+func (f *logentries) Name() string {
72
+	return name
73
+}
74
+
75
+// ValidateLogOpt looks for logentries specific log option logentries-address.
76
+func ValidateLogOpt(cfg map[string]string) error {
77
+	for key := range cfg {
78
+		switch key {
79
+		case "env":
80
+		case "labels":
81
+		case "tag":
82
+		case key:
83
+		default:
84
+			return fmt.Errorf("unknown log opt '%s' for logentries log driver", key)
85
+		}
86
+	}
87
+
88
+	if cfg[token] == "" {
89
+		return fmt.Errorf("Missing logentries token")
90
+	}
91
+
92
+	return nil
93
+}
0 94
new file mode 100644
... ...
@@ -0,0 +1,42 @@
0
+<!--[metadata]>
1
+aliases = ["/engine/reference/logging/logentries/"]
2
+title = "Logentries logging driver"
3
+description = "Describes how to use the Logentries logging driver."
4
+keywords = ["logentries, docker, logging, driver"]
5
+[menu.main]
6
+parent = "smn_logging"
7
+weight = 2
8
+<![end-metadata]-->
9
+
10
+# Logentries logging driver
11
+
12
+The `logentries` logging driver sends container logs to the Logentries server.
13
+
14
+## Usage
15
+
16
+You can configure the default logging driver by passing the `--log-driver`
17
+option to the Docker daemon:
18
+
19
+    docker daemon --log-driver=logentries
20
+
21
+You can set the logging driver for a specific container by using the
22
+`--log-driver` option to `docker run`:
23
+
24
+    docker run --log-driver=logentries ...
25
+
26
+## Logentries options
27
+
28
+You can use the `--log-opt NAME=VALUE` flag to specify these additional
29
+Logentries logging driver options:
30
+
31
+| Option                      | Required | Description                                                                                                                                                                                                        |
32
+|-----------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
33
+| `logentries-token`              | required | Logentries token.                                                                                                                                                                                 |
34
+
35
+An example usage would be somethig like:
36
+
37
+    docker run --log-driver=logentries \
38
+        --log-opt logentries-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
39
+        your/application