From 793dd1b2574fb59bb554a404e1dab3714acedf75 Mon Sep 17 00:00:00 2001 From: David Scott Date: Fri, 6 Jul 2018 11:30:33 +0100 Subject: [PATCH] Add pkg/kmsg This very simple program reads from `/dev/kmsg` and logs the output. Signed-off-by: David Scott --- docs/logging.md | 2 -- pkg/kmsg/Dockerfile | 14 ++++++++++++++ pkg/kmsg/build.yml | 6 ++++++ pkg/kmsg/main.go | 25 +++++++++++++++++++++++++ pkg/kmsg/vendor.conf | 1 + 5 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 pkg/kmsg/Dockerfile create mode 100644 pkg/kmsg/build.yml create mode 100644 pkg/kmsg/main.go create mode 100644 pkg/kmsg/vendor.conf diff --git a/docs/logging.md b/docs/logging.md index 8ae60a777..e862eb1ca 100644 --- a/docs/logging.md +++ b/docs/logging.md @@ -88,8 +88,6 @@ conds socket could be created to keep syslog compatibility, e.g. by using https://github.com/mcuadros/go-syslog. Processes that require syslog should then be able to log directly to memlogd. -- Kernel messages not read on startup yet (but can be captured with - `logwrite dmesg`) - Currently no direct external hooks exposed - but options available that could be added. Should also be possible to pipe output to e.g. `oklog` from `logread` (https://github.com/oklog/oklog) diff --git a/pkg/kmsg/Dockerfile b/pkg/kmsg/Dockerfile new file mode 100644 index 000000000..511bbf441 --- /dev/null +++ b/pkg/kmsg/Dockerfile @@ -0,0 +1,14 @@ +FROM linuxkit/alpine:6264e5b39af8eb1da7ffa4c05a7ccc597da01197 AS mirror + +RUN apk add --no-cache go musl-dev linux-headers +ENV GOPATH=/go PATH=$PATH:/go/bin + +COPY . /go/src/kmsg/ +RUN go-compile.sh /go/src/kmsg + +FROM scratch +ENTRYPOINT [] +CMD [] +WORKDIR / +COPY --from=mirror /go/bin/kmsg /usr/bin/kmsg +CMD ["/usr/bin/kmsg"] diff --git a/pkg/kmsg/build.yml b/pkg/kmsg/build.yml new file mode 100644 index 000000000..730796102 --- /dev/null +++ b/pkg/kmsg/build.yml @@ -0,0 +1,6 @@ +image: kmsg +config: + binds: + - /dev/kmsg:/dev/kmsg + capabilities: + - CAP_SYSLOG diff --git a/pkg/kmsg/main.go b/pkg/kmsg/main.go new file mode 100644 index 000000000..4a8c9a76b --- /dev/null +++ b/pkg/kmsg/main.go @@ -0,0 +1,25 @@ +package main + +// Log the kernel log buffer (from /dev/kmsg) + +import ( + "fmt" + "log" + "time" + + "github.com/euank/go-kmsg-parser/kmsgparser" +) + +func main() { + parser, err := kmsgparser.NewParser() + if err != nil { + log.Fatalf("unable to create parser: %v", err) + } + defer parser.Close() + + kmsg := parser.Parse() + + for msg := range kmsg { + fmt.Printf("(%d) - %s: %s", msg.SequenceNumber, msg.Timestamp.Format(time.RFC3339Nano), msg.Message) + } +} diff --git a/pkg/kmsg/vendor.conf b/pkg/kmsg/vendor.conf new file mode 100644 index 000000000..6d2f13b46 --- /dev/null +++ b/pkg/kmsg/vendor.conf @@ -0,0 +1 @@ +github.com/euank/go-kmsg-parser 5ba4d492e455a77d25dcf0d2c4acc9f2afebef4e