diff options
| -rw-r--r-- | cmd/tailscaled/depaware.txt | 2 | ||||
| -rw-r--r-- | logpolicy/logpolicy.go | 17 | ||||
| -rw-r--r-- | logtail/logtail.go | 38 | ||||
| -rw-r--r-- | tsnet/tsnet.go | 18 |
4 files changed, 39 insertions, 36 deletions
diff --git a/cmd/tailscaled/depaware.txt b/cmd/tailscaled/depaware.txt index 5901580cc..f29250ebc 100644 --- a/cmd/tailscaled/depaware.txt +++ b/cmd/tailscaled/depaware.txt @@ -81,7 +81,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de github.com/klauspost/compress/huff0 from github.com/klauspost/compress/zstd github.com/klauspost/compress/internal/cpuinfo from github.com/klauspost/compress/zstd github.com/klauspost/compress/internal/snapref from github.com/klauspost/compress/zstd - github.com/klauspost/compress/zstd from tailscale.com/smallzstd + github.com/klauspost/compress/zstd from tailscale.com/smallzstd+ github.com/klauspost/compress/zstd/internal/xxhash from github.com/klauspost/compress/zstd github.com/kortschak/wol from tailscale.com/ipn/ipnlocal LD github.com/kr/fs from github.com/pkg/sftp diff --git a/logpolicy/logpolicy.go b/logpolicy/logpolicy.go index 558a9d642..feb5426b4 100644 --- a/logpolicy/logpolicy.go +++ b/logpolicy/logpolicy.go @@ -43,7 +43,6 @@ import ( "tailscale.com/net/tshttpproxy" "tailscale.com/paths" "tailscale.com/safesocket" - "tailscale.com/smallzstd" "tailscale.com/types/logger" "tailscale.com/util/clientmetric" "tailscale.com/util/racebuild" @@ -520,17 +519,11 @@ func New(collection string) *Policy { } c := logtail.Config{ - Collection: newc.Collection, - PrivateID: newc.PrivateID, - Stderr: logWriter{console}, - NewZstdEncoder: func() logtail.Encoder { - w, err := smallzstd.NewEncoder(nil) - if err != nil { - panic(err) - } - return w - }, - HTTPC: &http.Client{Transport: NewLogtailTransport(logtail.DefaultHost)}, + Collection: newc.Collection, + PrivateID: newc.PrivateID, + Stderr: logWriter{console}, + CompressTransport: true, + HTTPC: &http.Client{Transport: NewLogtailTransport(logtail.DefaultHost)}, } if collection == logtail.CollectionNode { c.MetricsDelta = clientmetric.EncodeLogTailMetricsDelta diff --git a/logtail/logtail.go b/logtail/logtail.go index 8d159b358..7caa6f5fa 100644 --- a/logtail/logtail.go +++ b/logtail/logtail.go @@ -21,8 +21,10 @@ import ( "sync/atomic" "time" + "github.com/klauspost/compress/zstd" "tailscale.com/logtail/backoff" "tailscale.com/net/interfaces" + "tailscale.com/smallzstd" "tailscale.com/syncs" tslogger "tailscale.com/types/logger" "tailscale.com/wgengine/monitor" @@ -44,17 +46,18 @@ type Encoder interface { } type Config struct { - Collection string // collection name, a domain name - PrivateID PrivateID // machine-specific private identifier - BaseURL string // if empty defaults to "https://log.tailscale.io" - HTTPC *http.Client // if empty defaults to http.DefaultClient - SkipClientTime bool // if true, client_time is not written to logs - LowMemory bool // if true, logtail minimizes memory use - TimeNow func() time.Time // if set, subsitutes uses of time.Now - Stderr io.Writer // if set, logs are sent here instead of os.Stderr - StderrLevel int // max verbosity level to write to stderr; 0 means the non-verbose messages only - Buffer Buffer // temp storage, if nil a MemoryBuffer - NewZstdEncoder func() Encoder // if set, used to compress logs for transmission + Collection string // collection name, a domain name + PrivateID PrivateID // machine-specific private identifier + BaseURL string // if empty defaults to "https://log.tailscale.io" + HTTPC *http.Client // if empty defaults to http.DefaultClient + SkipClientTime bool // if true, client_time is not written to logs + LowMemory bool // if true, logtail minimizes memory use + TimeNow func() time.Time // if set, subsitutes uses of time.Now + Stderr io.Writer // if set, logs are sent here instead of os.Stderr + StderrLevel int // max verbosity level to write to stderr; 0 means the non-verbose messages only + Buffer Buffer // temp storage, if nil a MemoryBuffer + NewZstdEncoder func() Encoder // if set, used to compress logs for transmission + CompressTransport bool // if true, uses compression for logs transmission // MetricsDelta, if non-nil, is a func that returns an encoding // delta in clientmetrics to upload alongside existing logs. @@ -131,6 +134,19 @@ func NewLogger(cfg Config, logf tslogger.Logf) *Logger { shutdownStart: make(chan struct{}), shutdownDone: make(chan struct{}), } + if cfg.CompressTransport && cfg.NewZstdEncoder == nil { + cfg.NewZstdEncoder = func() Encoder { + // Per RFC 8478, section 3.1.1.1.1.1, the "SingleSegment" format + // ensures that the frame contains the uncompressed content size. + // This is a useful signal to the server for what + // uncompressed output size to expect. + w, err := smallzstd.NewEncoder(nil, zstd.WithSingleSegment(true)) + if err != nil { + panic(err) + } + return w + } + } if cfg.NewZstdEncoder != nil { l.zstdEncoder = cfg.NewZstdEncoder() } diff --git a/tsnet/tsnet.go b/tsnet/tsnet.go index 41e733564..d11b8bb5b 100644 --- a/tsnet/tsnet.go +++ b/tsnet/tsnet.go @@ -210,18 +210,12 @@ func (s *Server) start() error { return fmt.Errorf("error creating filch: %w", err) } c := logtail.Config{ - Collection: lpc.Collection, - PrivateID: lpc.PrivateID, - Stderr: ioutil.Discard, // log everything to Buffer - Buffer: f, - NewZstdEncoder: func() logtail.Encoder { - w, err := smallzstd.NewEncoder(nil) - if err != nil { - panic(err) - } - return w - }, - HTTPC: &http.Client{Transport: logpolicy.NewLogtailTransport(logtail.DefaultHost)}, + Collection: lpc.Collection, + PrivateID: lpc.PrivateID, + Stderr: ioutil.Discard, // log everything to Buffer + Buffer: f, + CompressTransport: true, + HTTPC: &http.Client{Transport: logpolicy.NewLogtailTransport(logtail.DefaultHost)}, } s.logtail = logtail.NewLogger(c, logf) |
