From ed420d6d7fdef625584aa8a455d9bf4dce8223d7 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Sun, 12 Jun 2016 19:53:08 -0400 Subject: [PATCH 1/4] fix double log pump on container restart --- router/pump.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/router/pump.go b/router/pump.go index 62f7e4b7..91c735d6 100644 --- a/router/pump.go +++ b/router/pump.go @@ -117,7 +117,7 @@ func (p *LogsPump) Run() error { for event := range events { debug("pump.Run() event:", normalID(event.ID), event.Status) switch event.Status { - case "start", "restart": + case "start": go p.pumpLogs(event, true) case "rename": go p.rename(event) @@ -220,7 +220,7 @@ func (p *LogsPump) Route(route *Route, logstream chan *Message) { select { case event := <-updates: switch event.Status { - case "start", "restart": + case "start": if route.MatchContainer( normalID(event.pump.container.ID), normalName(event.pump.container.Name)) { From b83c3803566649b97763fd7245bc74bfebdbd05b Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Sun, 12 Jun 2016 22:17:00 -0400 Subject: [PATCH 2/4] add env.var switch to turn off backlogs --- README.md | 14 +++++++++++++- logspout.go | 3 +++ router/pump.go | 9 ++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 54c63527..d8fd382c 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,19 @@ To see what data is used for syslog messages, see the [syslog adapter](http://gi You can tell logspout to ignore specific containers by setting an environment variable when starting your container, like so:- - $ docker run -d -e 'LOGSPOUT=ignore' image + $ docker run -d -e 'LOGSPOUT=ignore' image + +#### Suppressing backlog tail +You can tell logspout to only display log entries since container "start" or "restart" event by setting a `BACKLOG=false` environment variable (equivalent to `docker logs --tail=0`): + + $ docker run -d --name="logspout" \ + -e 'BACKLOG=false' \ + --volume=/var/run/docker.sock:/var/run/docker.sock \ + gliderlabs/logspout + +The default behaviour is to output all logs since creation of the container (equivalent to `docker logs --tail=all` or simply `docker logs`). + +> NOTE: Use of this option **may** cause the first few lines of log output to be missed following a container being started, if the container starts outputting logs before logspout has a chance to see them. If consistent capture of *every* line of logs is critical to your application, you might want to test thorougly and/or avoid this option (at the expense of getting the entire backlog for every restarting container). This does not affect containers that are removed and recreated. #### Inspect log streams using curl diff --git a/logspout.go b/logspout.go index 4094e5ab..e8708808 100644 --- a/logspout.go +++ b/logspout.go @@ -32,6 +32,9 @@ func main() { if getopt("DEBUG", "") != "" { fmt.Printf("debug:%s ", getopt("DEBUG", "")) } + if getopt("BACKLOG", "") != "" { + fmt.Printf("backlog:%s ", getopt("BACKLOG", "")) + } fmt.Printf("persist:%s\n", getopt("ROUTESPATH", "/mnt/routes")) var jobs []string diff --git a/router/pump.go b/router/pump.go index 91c735d6..7c2ceb62 100644 --- a/router/pump.go +++ b/router/pump.go @@ -36,6 +36,13 @@ func debug(v ...interface{}) { } } +func backlog() bool { + if os.Getenv("BACKLOG") == "false" { + return false + } + return true +} + func assert(err error, context string) { if err != nil { log.Fatal(context+": ", err) @@ -118,7 +125,7 @@ func (p *LogsPump) Run() error { debug("pump.Run() event:", normalID(event.ID), event.Status) switch event.Status { case "start": - go p.pumpLogs(event, true) + go p.pumpLogs(event, backlog()) case "rename": go p.rename(event) case "die": From e0ad590e78cdfc5de64db79242be3bf6b8efd85e Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Mon, 13 Jun 2016 01:45:35 -0400 Subject: [PATCH 3/4] version bump --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 66f43cd7..e5e9810c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v3.2-dev +v3.3-dev From 085b8331ce6b2492375c9a43368f6bbe22311004 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Thu, 8 Sep 2016 17:27:32 -0400 Subject: [PATCH 4/4] rebase the backlog fix, undo the double pump fix since it's implemented elsewhere --- router/pump.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/router/pump.go b/router/pump.go index 5fd466a3..23d13b9b 100644 --- a/router/pump.go +++ b/router/pump.go @@ -137,7 +137,7 @@ func (p *LogsPump) Run() error { for event := range events { debug("pump.Run() event:", normalID(event.ID), event.Status) switch event.Status { - case "start": + case "start", "restart": go p.pumpLogs(event, backlog()) case "rename": go p.rename(event) @@ -271,7 +271,7 @@ func (p *LogsPump) Route(route *Route, logstream chan *Message) { select { case event := <-updates: switch event.Status { - case "start": + case "start", "restart": if route.MatchContainer( normalID(event.pump.container.ID), normalName(event.pump.container.Name)) {