Skip to content

Commit 2764d67

Browse files
committed
added logentries driver
Signed-off-by: Carlos Alexandro Becker <[email protected]>
1 parent 2fd674a commit 2764d67

File tree

4 files changed

+138
-0
lines changed

4 files changed

+138
-0
lines changed

daemon/logdrivers_linux.go

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
_ "github.com/docker/docker/daemon/logger/gelf"
1010
_ "github.com/docker/docker/daemon/logger/journald"
1111
_ "github.com/docker/docker/daemon/logger/jsonfilelog"
12+
_ "github.com/docker/docker/daemon/logger/logentries"
1213
_ "github.com/docker/docker/daemon/logger/splunk"
1314
_ "github.com/docker/docker/daemon/logger/syslog"
1415
)

daemon/logdrivers_windows.go

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
_ "github.com/docker/docker/daemon/logger/awslogs"
77
_ "github.com/docker/docker/daemon/logger/etwlogs"
88
_ "github.com/docker/docker/daemon/logger/jsonfilelog"
9+
_ "github.com/docker/docker/daemon/logger/logentries"
910
_ "github.com/docker/docker/daemon/logger/splunk"
1011
_ "github.com/docker/docker/daemon/logger/syslog"
1112
)
+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
// Package logentries provides the log driver for forwarding server logs
2+
// to logentries endpoints.
3+
package logentries
4+
5+
import (
6+
"fmt"
7+
8+
"github.com/Sirupsen/logrus"
9+
"github.com/bsphere/le_go"
10+
"github.com/docker/docker/daemon/logger"
11+
)
12+
13+
type logentries struct {
14+
tag string
15+
containerID string
16+
containerName string
17+
writer *le_go.Logger
18+
extra map[string]string
19+
}
20+
21+
const (
22+
name = "logentries"
23+
token = "logentries-token"
24+
)
25+
26+
func init() {
27+
if err := logger.RegisterLogDriver(name, New); err != nil {
28+
logrus.Fatal(err)
29+
}
30+
if err := logger.RegisterLogOptValidator(name, ValidateLogOpt); err != nil {
31+
logrus.Fatal(err)
32+
}
33+
}
34+
35+
// New creates a logentries logger using the configuration passed in on
36+
// the context. The supported context configuration variable is
37+
// logentries-token.
38+
func New(ctx logger.Context) (logger.Logger, error) {
39+
logrus.WithField("container", ctx.ContainerID).
40+
WithField("token", ctx.Config[token]).
41+
Debug("logging driver logentries configured")
42+
43+
log, err := le_go.Connect(ctx.Config[token])
44+
if err != nil {
45+
return nil, err
46+
}
47+
return &logentries{
48+
containerID: ctx.ContainerID,
49+
containerName: ctx.ContainerName,
50+
writer: log,
51+
}, nil
52+
}
53+
54+
func (f *logentries) Log(msg *logger.Message) error {
55+
data := map[string]string{
56+
"container_id": f.containerID,
57+
"container_name": f.containerName,
58+
"source": msg.Source,
59+
"log": string(msg.Line),
60+
}
61+
for k, v := range f.extra {
62+
data[k] = v
63+
}
64+
f.writer.Println(f.tag, msg.Timestamp, data)
65+
return nil
66+
}
67+
68+
func (f *logentries) Close() error {
69+
return f.writer.Close()
70+
}
71+
72+
func (f *logentries) Name() string {
73+
return name
74+
}
75+
76+
// ValidateLogOpt looks for logentries specific log option logentries-address.
77+
func ValidateLogOpt(cfg map[string]string) error {
78+
for key := range cfg {
79+
switch key {
80+
case "env":
81+
case "labels":
82+
case "tag":
83+
case key:
84+
default:
85+
return fmt.Errorf("unknown log opt '%s' for logentries log driver", key)
86+
}
87+
}
88+
89+
if cfg[token] == "" {
90+
return fmt.Errorf("Missing logentries token")
91+
}
92+
93+
return nil
94+
}

docs/admin/logging/logentries.md

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<!--[metadata]>
2+
+++
3+
aliases = ["/engine/reference/logging/logentries/"]
4+
title = "Logentries logging driver"
5+
description = "Describes how to use the Logentries logging driver."
6+
keywords = ["logentries, docker, logging, driver"]
7+
[menu.main]
8+
parent = "smn_logging"
9+
weight = 2
10+
+++
11+
<![end-metadata]-->
12+
13+
# Logentries logging driver
14+
15+
The `logentries` logging driver sends container logs to the Logentries server.
16+
17+
## Usage
18+
19+
You can configure the default logging driver by passing the `--log-driver`
20+
option to the Docker daemon:
21+
22+
docker daemon --log-driver=logentries
23+
24+
You can set the logging driver for a specific container by using the
25+
`--log-driver` option to `docker run`:
26+
27+
docker run --log-driver=logentries ...
28+
29+
## Logentries options
30+
31+
You can use the `--log-opt NAME=VALUE` flag to specify these additional
32+
Logentries logging driver options:
33+
34+
| Option | Required | Description |
35+
|-----------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
36+
| `logentries-token` | required | Logentries token. |
37+
38+
An example usage would be somethig like:
39+
40+
docker run --log-driver=logentries \
41+
--log-opt logentries-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \
42+
your/application

0 commit comments

Comments
 (0)