Merge pull request #27707 from FrenchBen/aws-logstream

Aws logstream
This commit is contained in:
Sebastiaan van Stijn 2016-11-03 16:16:02 -07:00 committed by GitHub
commit f424b1d884
2 changed files with 39 additions and 1 deletions

View File

@ -19,6 +19,7 @@ import (
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
"github.com/docker/docker/daemon/logger"
"github.com/docker/docker/daemon/logger/loggerutils"
"github.com/docker/docker/dockerversion"
)
@ -28,6 +29,7 @@ const (
regionEnvKey = "AWS_REGION"
logGroupKey = "awslogs-group"
logStreamKey = "awslogs-stream"
tagKey = "tag"
batchPublishFrequency = 5 * time.Second
// See: http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html
@ -88,7 +90,11 @@ func init() {
// the EC2 Instance Metadata Service.
func New(ctx logger.Context) (logger.Logger, error) {
logGroupName := ctx.Config[logGroupKey]
logStreamName := ctx.ContainerID
logStreamName, err := loggerutils.ParseLogTag(ctx, "{{.FullID}}")
if err != nil {
return nil, err
}
if ctx.Config[logStreamKey] != "" {
logStreamName = ctx.Config[logStreamKey]
}
@ -350,6 +356,7 @@ func ValidateLogOpt(cfg map[string]string) error {
case logGroupKey:
case logStreamKey:
case regionKey:
case tagKey:
default:
return fmt.Errorf("unknown log opt '%s' for %s log driver", key, name)
}

View File

@ -15,6 +15,7 @@ import (
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
"github.com/docker/docker/daemon/logger"
"github.com/docker/docker/daemon/logger/loggerutils"
"github.com/docker/docker/dockerversion"
)
@ -691,3 +692,33 @@ func TestCollectBatchWithDuplicateTimestamps(t *testing.T) {
}
}
}
func TestCreateTagSuccess(t *testing.T) {
mockClient := newMockClient()
ctx := logger.Context{
ContainerName: "/test-container",
ContainerID: "container-abcdefghijklmnopqrstuvwxyz01234567890",
Config: map[string]string{"tag": "{{.Name}}/{{.FullID}}"},
}
logStreamName, e := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate)
if e != nil {
t.Errorf("Error generating tag: %q", e)
}
stream := &logStream{
client: mockClient,
logGroupName: groupName,
logStreamName: logStreamName,
}
mockClient.createLogStreamResult <- &createLogStreamResult{}
err := stream.create()
if err != nil {
t.Errorf("Received unexpected err: %v\n", err)
}
argument := <-mockClient.createLogStreamArgument
if *argument.LogStreamName != "test-container/container-abcdefghijklmnopqrstuvwxyz01234567890" {
t.Errorf("Expected LogStreamName to be %s", "test-container/container-abcdefghijklmnopqrstuvwxyz01234567890")
}
}