Commit Graph

4446 Commits

Author SHA1 Message Date
Michael Crosby
e6ae9cc64f Shim pluggable logging
Closes #603

This adds logging facilities at the shim level to provide minimal I/O
overhead and pluggable logging options.  Log handling is done within the
shim so that all I/O, cpu, and memory can be charged to the container.

A sample logging driver setting up logging for a container the systemd
journal looks like this:

```go
package main

import (
	"bufio"
	"context"
	"fmt"
	"io"
	"sync"

	"github.com/containerd/containerd/runtime/v2/logging"
	"github.com/coreos/go-systemd/journal"
)

func main() {
	logging.Run(log)
}

func log(ctx context.Context, config *logging.Config, ready func() error) error {
	// construct any log metadata for the container
	vars := map[string]string{
		"SYSLOG_IDENTIFIER": fmt.Sprintf("%s:%s", config.Namespace, config.ID),
	}
	var wg sync.WaitGroup
	wg.Add(2)
	// forward both stdout and stderr to the journal
	go copy(&wg, config.Stdout, journal.PriInfo, vars)
	go copy(&wg, config.Stderr, journal.PriErr, vars)

	// signal that we are ready and setup for the container to be started
	if err := ready(); err != nil {
		return err
	}
	wg.Wait()
	return nil
}

func copy(wg *sync.WaitGroup, r io.Reader, pri journal.Priority, vars map[string]string) {
	defer wg.Done()
	s := bufio.NewScanner(r)
	for s.Scan() {
		if s.Err() != nil {
			return
		}
		journal.Send(s.Text(), pri, vars)
	}
}
```

A `logging` package has been created to assist log developers create
logging plugins for containerd.

This uses a URI based approach for logging drivers that can be expanded
in the future.

Supported URI scheme's are:

* binary
* fifo
* file

You can pass the log url via ctr on the command line:

```bash
> ctr run --rm --runtime io.containerd.runc.v2 --log-uri binary://shim-journald docker.io/library/redis:alpine redis
```

```bash
> journalctl -f -t default:redis

-- Logs begin at Tue 2018-12-11 16:29:51 EST. --
Mar 08 16:08:22 deathstar default:redis[120760]: 1:C 08 Mar 2019 21:08:22.703 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.704 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.704 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted.
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.704 # Current maximum open files is 1024. maxclients has been reduced to 992 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.705 * Running mode=standalone, port=6379.
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.705 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.705 # Server initialized
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.705 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.705 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
Mar 08 16:08:22 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:22.705 * Ready to accept connections
Mar 08 16:08:50 deathstar default:redis[120760]: 1:signal-handler (1552079330) Received SIGINT scheduling shutdown...
Mar 08 16:08:50 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:50.405 # User requested shutdown...
Mar 08 16:08:50 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:50.406 * Saving the final RDB snapshot before exiting.
Mar 08 16:08:50 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:50.452 * DB saved on disk
Mar 08 16:08:50 deathstar default:redis[120760]: 1:M 08 Mar 2019 21:08:50.453 # Redis is now ready to exit, bye bye...
```

The following client side Opts are added:

```go
// LogURI provides the raw logging URI
func LogURI(uri *url.URL) Creator { }
// BinaryIO forwards contianer STDOUT|STDERR directly to a logging binary
func BinaryIO(binary string, args map[string]string) Creator {}
```

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2019-03-12 12:18:28 -04:00
Derek McGowan
aa328dfc55
Merge pull request #3041 from thaJeztah/bump_da_bolt
Update go.etcd.io/bbolt to v1.3.2
2019-03-07 09:28:26 -08:00
Phil Estes
5fdcef55a2
Merge pull request #3075 from ehotinger/with-new-snapshot
Allow WithNewSnapshot and WithNewSnapshotView to take in snapshotter opts
2019-03-07 11:15:18 -05:00
Michael Crosby
cfba7ef8e2
Merge pull request #3064 from dmcgowan/update-gc-content-references
Add content gc ref labels from containers, images, and snapshots
2019-03-07 09:52:53 -06:00
Eric Hotinger
34f3772956 Allow WithNewSnapshot and WithNewSnapshotView to take in snapshotter options.
Signed-off-by: Eric Hotinger <ehotinger@gmail.com>
2019-03-06 13:22:37 -08:00
Phil Estes
04b2e5bbf7
Merge pull request #3072 from crosbymichael/v2opts
Fix runtime v2 option handling
2019-03-06 14:27:02 -05:00
Michael Crosby
aaae81189a Update checkpoint opts with runtime handling
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2019-03-06 12:42:45 -05:00
Michael Crosby
160737d2c8 Fix no pivot and keyring opts
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2019-03-06 12:37:36 -05:00
Phil Estes
bfbd1d09c9
Merge pull request #3070 from darfux/update-build-doc
BUILDING.md: update testing section
2019-03-06 08:53:38 -05:00
Li Yuxuan
4d2a26d751 BUILDING.md: update testing section
The integration-parallel has been removed by
4df7075a74.
Update Makefile targets in BUILDING.md.

Signed-off-by: Li Yuxuan <liyuxuan04@baidu.com>
2019-03-06 18:56:14 +08:00
Michael Crosby
e70a530aa3
Merge pull request #3069 from fuweid/me-debug-mode-push
ctr/commands/images/push: don't show progress if it is debug mode
2019-03-05 11:10:51 -06:00
Wei Fu
6424a36032 ctr/commands/images/push: don't show progress if it is debug mode
If user sets debug mode, the command push should only show the debug log
information. If the stdout is with flush by the progress status, it is
hard to see the debug log.

Signed-off-by: Wei Fu <fuweid89@gmail.com>
2019-03-05 22:21:55 +08:00
Derek McGowan
7cfb99ab9d
Add content gc ref labels from containers, images, and snapshots
Currently the objects which can retain content from labels
are limited. This limitation has required clients to work
around this and and in some cases add outside reference
counting (e.g. buildkit keeping content for snapshots).
Updated the logic to treat content and snapshot labels equally
and simplified the code in the process.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2019-03-04 14:51:07 -08:00
Michael Crosby
30b6f460b9
Merge pull request #3063 from zhsj/fix-mipsx
Use unix.SignalNum in ParseSignal on unix platform
2019-03-04 11:31:16 -06:00
Michael Crosby
63328c1d2a
Merge pull request #3054 from jterry75/stderr_with_tty_windows
Fix issue with NewFIFOSetInDir with Terminal true
2019-03-04 11:08:06 -06:00
Shengjing Zhu
f0d5dd3c82 Use unix.SignalNum in ParseSignal on unix platform
This removes the signalMap on unix platform, since
the signalMap on different architectures is not same,
especially it's wrong on mipsx.

golang.org/x/sys/unix now has a SignalNum func to convert
signal name to a number, thus there's no need to keep
this redundant map.

Windows platform still needs to have a signalMap, since
golang.org/x/sys/windows doesn't have corresponding
functions.

Address: #3061

Signed-off-by: Shengjing Zhu <zhsj@debian.org>
2019-03-03 22:10:58 +08:00
Shengjing Zhu
1745951bad Vendor golang.org/x/sys d455e41777fca6e8a5a79e34a14b8368bc11d9ba
Signed-off-by: Shengjing Zhu <zhsj@debian.org>
2019-03-03 21:35:46 +08:00
Derek McGowan
5840ecc3d8
Merge pull request #3056 from ehotinger/ehotinger/snapshotter-docs
Update the snapshotter docs to refer to the snapshots package
2019-02-28 17:27:00 -08:00
Eric Hotinger
e13a4b67e8 Update the snapshotter docs to refer to the snapshots package for
WithLabels.

Signed-off-by: Eric Hotinger <ehotinger@gmail.com>
2019-02-28 15:03:37 -08:00
Justin Terry (VM)
277147135d Fix issue with NewFIFOSetInDir with Terminal true
Signed-off-by: Justin Terry (VM) <juterry@microsoft.com>
2019-02-28 10:35:26 -08:00
Derek McGowan
c24a74354c
Merge pull request #3050 from jterry75/fix_cpu_cap
Fix a bug in shim log on Windows that can cause 100% CPU utilization
2019-02-27 17:32:38 -08:00
Justin Terry (VM)
828f6eb842 Fix a bug in shim log on Windows that can cause 100% CPU utilization
With the change to unified shims (ie: 1 shim per multiple tasks) the shimLog
on Windows for the 2nd-Nth worload containers will not have an associated
named pipe listener.

Due to a subtle bug in errors.Wrap passing a nil error we would unblock the
disconnected listener and return 0 byte successfull reads which would cause go
to continually read and cap the CPU.

Signed-off-by: Justin Terry (VM) <juterry@microsoft.com>
2019-02-27 16:51:52 -08:00
Akihiro Suda
e72ad44427
Merge pull request #3048 from crosbymichael/bump-cgroups
Bump cgroups to dbea6f2bd41658b84b00417ceefa416b97
2019-02-27 17:37:47 +09:00
Michael Crosby
d2bec5422a Bump cgroups to dbea6f2bd41658b84b00417ceefa416b97
This fixes issues for systemd 420 and non-existant cgroups.

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2019-02-26 15:48:10 -05:00
Phil Estes
8f44ad0b31
Merge pull request #3037 from zhsj/add-name-in-man
docs: Add NAME section in all manpages
2019-02-22 11:37:19 -05:00
Shengjing Zhu
fb80483711 docs: Add NAME section in all manpages
As described in https://lintian.debian.org/tags/manpage-has-bad-whatis-entry.html
each manual page should start with a "NAME" section.

Signed-off-by: Shengjing Zhu <zhsj@debian.org>
2019-02-22 23:40:28 +08:00
Michael Crosby
dea27b1b64
Merge pull request #3036 from jhowardmsft/jjh/etw
Windows: Enable ETW logging
2019-02-21 20:12:35 -05:00
Derek McGowan
0cff074a27
Merge pull request #3040 from crosbymichael/travis-bump
Update travis to xenial worker
2019-02-21 16:21:37 -08:00
John Howard
d83e4e9b3b Vendor Microsoft/go-winio@v0.4.12
Signed-off-by: John Howard <jhoward@microsoft.com>
2019-02-21 14:16:51 -08:00
John Howard
e0d7ed12a5 Windows: Enable ETW logging
Signed-off-by: John Howard <jhoward@microsoft.com>
2019-02-21 14:16:44 -08:00
Sebastiaan van Stijn
cbc032ed34
Update go.etcd.io/bbolt to v1.3.2
Relevant changes:

- ectd-io/bbolt#139 update the freelist readIDs
- etcd-io/bbolt#140 add getFreePageIDs
- etcd-io/bbolt#141 use segregated hashmap to boost the freelist allocate and release performance

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2019-02-21 22:02:08 +01:00
Michael Crosby
07697638be
Merge pull request #3004 from crosbymichael/multi-shim
io.containerd.runc.v2 with Container Groups
2019-02-21 15:40:20 -05:00
Michael Crosby
5e84069844 Update travis to xenial worker
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2019-02-21 15:37:21 -05:00
Michael Crosby
84a24711e8 Add runc.v2 multi-shim
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2019-02-21 11:09:46 -05:00
Michael Crosby
6bcbf88f82 Move runc shim code into common package
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
2019-02-21 10:47:41 -05:00
Michael Crosby
31438b61f9
Merge pull request #3033 from tonistiigi/runtime-platforms
runtime: allow specifying supported platforms with config
2019-02-21 10:39:42 -05:00
Michael Crosby
759a889f3c
Merge pull request #3018 from Random-Liu/perm-consistency-with-docker
Unpack should set 0755 when the parent directory doesn't exist.
2019-02-21 10:37:03 -05:00
John Howard
fd6ac5d026 Vendor sirupsen/logrus@1.3.0
Signed-off-by: John Howard <jhoward@microsoft.com>
2019-02-20 20:18:14 -08:00
Tonis Tiigi
b553a12be6 runtime: allow specifying supported platforms with config
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2019-02-20 07:29:23 -08:00
Akihiro Suda
58dc0677b4
Merge pull request #3030 from veerun14/venuvvul/add-comments-fix-typos
fixing typo and added a missing comment.
2019-02-19 12:32:12 +09:00
Veeraiah Chowdary Nuvvula
f6ac73d71e fixing typo and added a missing comment.
Signed-off-by: Veeraiah Chowdary Nuvvula <venuvvul@microsoft.com>
2019-02-18 14:13:02 -08:00
Michael Crosby
ee916fe33c
Merge pull request #3025 from fuweid/bugfix_merge_label
metadata: merge snapshot labels with metadata's labels
2019-02-18 11:39:02 -05:00
Phil Estes
480bf65ae8
Merge pull request #3010 from dmcgowan/pull-add-handler-wrap
Add image handler wrapper
2019-02-18 10:14:36 -05:00
Phil Estes
06ff5ef01a
Merge pull request #3024 from jhowardmsft/jjh/signalname
Windows: Update stackdump event name
2019-02-18 10:14:12 -05:00
Wei Fu
4b3e0a8aaa metadata: merge snapshot labels with metadata's labels
fix the no-op issue.

Signed-off-by: Wei Fu <fuweid89@gmail.com>
2019-02-18 16:11:12 +08:00
John Howard
88f19a90a8 Windows: Update stackdump event name
Signed-off-by: John Howard <jhoward@microsoft.com>
2019-02-15 15:33:29 -08:00
Phil Estes
a378dbc2ab
Merge pull request #3020 from dmcgowan/update-supported-releases
Update supported versions
2019-02-14 13:57:06 -08:00
Lantao Liu
14f7e52725 Unpack should set 0755 when the parent directory doesn't exist.
Signed-off-by: Lantao Liu <lantaol@google.com>
2019-02-14 13:38:12 -08:00
Michael Crosby
a485eb74a3
Merge pull request #3021 from estesp/update-release-docs
Add website update to release process
2019-02-14 14:38:24 -05:00
Phil Estes
a6f43b549e
Add website update to release process
Update release process with step to get downloads list updated on
containerd.io website

Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com>
2019-02-14 14:01:00 -05:00