mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-22 12:58:37 +00:00
Switch logging service from log.tailscale.io to log.tailscale.com (#14398)
Updates tailscale/corp#23617 Signed-off-by: Joe Tsai <joetsai@digital-static.net>
This commit is contained in:
parent
2506b81471
commit
b62a013ecb
@ -20,10 +20,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func BenchmarkHandleBootstrapDNS(b *testing.B) {
|
func BenchmarkHandleBootstrapDNS(b *testing.B) {
|
||||||
tstest.Replace(b, bootstrapDNS, "log.tailscale.io,login.tailscale.com,controlplane.tailscale.com,login.us.tailscale.com")
|
tstest.Replace(b, bootstrapDNS, "log.tailscale.com,login.tailscale.com,controlplane.tailscale.com,login.us.tailscale.com")
|
||||||
refreshBootstrapDNS()
|
refreshBootstrapDNS()
|
||||||
w := new(bitbucketResponseWriter)
|
w := new(bitbucketResponseWriter)
|
||||||
req, _ := http.NewRequest("GET", "https://localhost/bootstrap-dns?q="+url.QueryEscape("log.tailscale.io"), nil)
|
req, _ := http.NewRequest("GET", "https://localhost/bootstrap-dns?q="+url.QueryEscape("log.tailscale.com"), nil)
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
b.RunParallel(func(b *testing.PB) {
|
b.RunParallel(func(b *testing.PB) {
|
||||||
@ -63,7 +63,7 @@ func TestUnpublishedDNS(t *testing.T) {
|
|||||||
nettest.SkipIfNoNetwork(t)
|
nettest.SkipIfNoNetwork(t)
|
||||||
|
|
||||||
const published = "login.tailscale.com"
|
const published = "login.tailscale.com"
|
||||||
const unpublished = "log.tailscale.io"
|
const unpublished = "log.tailscale.com"
|
||||||
|
|
||||||
prev1, prev2 := *bootstrapDNS, *unpublishedDNS
|
prev1, prev2 := *bootstrapDNS, *unpublishedDNS
|
||||||
*bootstrapDNS = published
|
*bootstrapDNS = published
|
||||||
@ -119,18 +119,18 @@ func TestUnpublishedDNSEmptyList(t *testing.T) {
|
|||||||
|
|
||||||
unpublishedDNSCache.Store(&dnsEntryMap{
|
unpublishedDNSCache.Store(&dnsEntryMap{
|
||||||
IPs: map[string][]net.IP{
|
IPs: map[string][]net.IP{
|
||||||
"log.tailscale.io": {},
|
"log.tailscale.com": {},
|
||||||
"controlplane.tailscale.com": {net.IPv4(1, 2, 3, 4)},
|
"controlplane.tailscale.com": {net.IPv4(1, 2, 3, 4)},
|
||||||
},
|
},
|
||||||
Percent: map[string]float64{
|
Percent: map[string]float64{
|
||||||
"log.tailscale.io": 1.0,
|
"log.tailscale.com": 1.0,
|
||||||
"controlplane.tailscale.com": 1.0,
|
"controlplane.tailscale.com": 1.0,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("CacheMiss", func(t *testing.T) {
|
t.Run("CacheMiss", func(t *testing.T) {
|
||||||
// One domain in map but empty, one not in map at all
|
// One domain in map but empty, one not in map at all
|
||||||
for _, q := range []string{"log.tailscale.io", "login.tailscale.com"} {
|
for _, q := range []string{"log.tailscale.com", "login.tailscale.com"} {
|
||||||
resetMetrics()
|
resetMetrics()
|
||||||
ips := getBootstrapDNS(t, q)
|
ips := getBootstrapDNS(t, q)
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ See https://tailscale.com/kb/1315/mdm-keys#set-a-custom-control-server-url for m
|
|||||||
<string id="LogTarget_Help"><![CDATA[This policy can be used to require the use of a non-standard log server.
|
<string id="LogTarget_Help"><![CDATA[This policy can be used to require the use of a non-standard log server.
|
||||||
Please note that using a non-standard log server will limit Tailscale Support's ability to diagnose problems.
|
Please note that using a non-standard log server will limit Tailscale Support's ability to diagnose problems.
|
||||||
|
|
||||||
If you configure this policy, set it to the URL of your log server, beginning with https:// and ending with no trailing slash. If blank or "https://log.tailscale.io", the default log server will be used.
|
If you configure this policy, set it to the URL of your log server, beginning with https:// and ending with no trailing slash. If blank or "https://log.tailscale.com", the default log server will be used.
|
||||||
|
|
||||||
If you disable this policy, the Tailscale standard log server will be used by default, but a non-standard Tailscale log server can be configured using the TS_LOG_TARGET environment variable.]]></string>
|
If you disable this policy, the Tailscale standard log server will be used by default, but a non-standard Tailscale log server can be configured using the TS_LOG_TARGET environment variable.]]></string>
|
||||||
<string id="Tailnet">Specify which Tailnet should be used for Login</string>
|
<string id="Tailnet">Specify which Tailnet should be used for Login</string>
|
||||||
|
@ -14,7 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// handleProxyConnectConn handles a CONNECT request to
|
// handleProxyConnectConn handles a CONNECT request to
|
||||||
// log.tailscale.io (or whatever the configured log server is). This
|
// log.tailscale.com (or whatever the configured log server is). This
|
||||||
// is intended for use by the Windows GUI client to log via when an
|
// is intended for use by the Windows GUI client to log via when an
|
||||||
// exit node is in use, so the logs don't go out via the exit node and
|
// exit node is in use, so the logs don't go out via the exit node and
|
||||||
// instead go directly, like tailscaled's. The dialer tried to do that
|
// instead go directly, like tailscaled's. The dialer tried to do that
|
||||||
|
@ -889,7 +889,7 @@ func (opts TransportOptions) New() http.RoundTripper {
|
|||||||
|
|
||||||
host := cmp.Or(opts.Host, logtail.DefaultHost)
|
host := cmp.Or(opts.Host, logtail.DefaultHost)
|
||||||
tr.TLSClientConfig = tlsdial.Config(host, opts.Health, tr.TLSClientConfig)
|
tr.TLSClientConfig = tlsdial.Config(host, opts.Health, tr.TLSClientConfig)
|
||||||
// Force TLS 1.3 since we know log.tailscale.io supports it.
|
// Force TLS 1.3 since we know log.tailscale.com supports it.
|
||||||
tr.TLSClientConfig.MinVersion = tls.VersionTLS13
|
tr.TLSClientConfig.MinVersion = tls.VersionTLS13
|
||||||
|
|
||||||
return tr
|
return tr
|
||||||
|
@ -7,6 +7,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"tailscale.com/logtail"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLogHost(t *testing.T) {
|
func TestLogHost(t *testing.T) {
|
||||||
@ -20,7 +22,7 @@ func TestLogHost(t *testing.T) {
|
|||||||
env string
|
env string
|
||||||
want string
|
want string
|
||||||
}{
|
}{
|
||||||
{"", "log.tailscale.io"},
|
{"", logtail.DefaultHost},
|
||||||
{"http://foo.com", "foo.com"},
|
{"http://foo.com", "foo.com"},
|
||||||
{"https://foo.com", "foo.com"},
|
{"https://foo.com", "foo.com"},
|
||||||
{"https://foo.com/", "foo.com"},
|
{"https://foo.com/", "foo.com"},
|
||||||
|
@ -6,14 +6,14 @@ retrieving, and processing log entries.
|
|||||||
# Overview
|
# Overview
|
||||||
|
|
||||||
HTTP requests are received at the service **base URL**
|
HTTP requests are received at the service **base URL**
|
||||||
[https://log.tailscale.io](https://log.tailscale.io), and return JSON-encoded
|
[https://log.tailscale.com](https://log.tailscale.com), and return JSON-encoded
|
||||||
responses using standard HTTP response codes.
|
responses using standard HTTP response codes.
|
||||||
|
|
||||||
Authorization for the configuration and retrieval APIs is done with a secret
|
Authorization for the configuration and retrieval APIs is done with a secret
|
||||||
API key passed as the HTTP basic auth username. Secret keys are generated via
|
API key passed as the HTTP basic auth username. Secret keys are generated via
|
||||||
the web UI at base URL. An example of using basic auth with curl:
|
the web UI at base URL. An example of using basic auth with curl:
|
||||||
|
|
||||||
curl -u <log_api_key>: https://log.tailscale.io/collections
|
curl -u <log_api_key>: https://log.tailscale.com/collections
|
||||||
|
|
||||||
In the future, an HTTP header will allow using MessagePack instead of JSON.
|
In the future, an HTTP header will allow using MessagePack instead of JSON.
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
log.SetFlags(0)
|
log.SetFlags(0)
|
||||||
|
|
||||||
req, err := http.NewRequest("POST", "https://log.tailscale.io/instances", strings.NewReader(url.Values{
|
req, err := http.NewRequest("POST", "https://log.tailscale.com/instances", strings.NewReader(url.Values{
|
||||||
"collection": []string{*collection},
|
"collection": []string{*collection},
|
||||||
"instances": []string{*publicID},
|
"instances": []string{*publicID},
|
||||||
"adopt": []string{"true"},
|
"adopt": []string{"true"},
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#
|
#
|
||||||
# Then generate a LOGTAIL_API_KEY and two test collections by visiting:
|
# Then generate a LOGTAIL_API_KEY and two test collections by visiting:
|
||||||
#
|
#
|
||||||
# https://log.tailscale.io
|
# https://log.tailscale.com
|
||||||
#
|
#
|
||||||
# Then set the three variables below.
|
# Then set the three variables below.
|
||||||
trap 'rv=$?; [ "$rv" = 0 ] || echo "-- exiting with code $rv"; exit $rv' EXIT
|
trap 'rv=$?; [ "$rv" = 0 ] || echo "-- exiting with code $rv"; exit $rv' EXIT
|
||||||
|
@ -37,7 +37,7 @@ func main() {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := http.NewRequest("GET", "https://log.tailscale.io/c/"+*collection+"?stream=true", nil)
|
req, err := http.NewRequest("GET", "https://log.tailscale.com/c/"+*collection+"?stream=true", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
// Package logtail sends logs to log.tailscale.io.
|
// Package logtail sends logs to log.tailscale.com.
|
||||||
package logtail
|
package logtail
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -55,7 +55,7 @@ const bufferSize = 4 << 10
|
|||||||
|
|
||||||
// DefaultHost is the default host name to upload logs to when
|
// DefaultHost is the default host name to upload logs to when
|
||||||
// Config.BaseURL isn't provided.
|
// Config.BaseURL isn't provided.
|
||||||
const DefaultHost = "log.tailscale.io"
|
const DefaultHost = "log.tailscale.com"
|
||||||
|
|
||||||
const defaultFlushDelay = 2 * time.Second
|
const defaultFlushDelay = 2 * time.Second
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ type Config struct {
|
|||||||
Collection string // collection name, a domain name
|
Collection string // collection name, a domain name
|
||||||
PrivateID logid.PrivateID // private ID for the primary log stream
|
PrivateID logid.PrivateID // private ID for the primary log stream
|
||||||
CopyPrivateID logid.PrivateID // private ID for a log stream that is a superset of this log stream
|
CopyPrivateID logid.PrivateID // private ID for a log stream that is a superset of this log stream
|
||||||
BaseURL string // if empty defaults to "https://log.tailscale.io"
|
BaseURL string // if empty defaults to "https://log.tailscale.com"
|
||||||
HTTPC *http.Client // if empty defaults to http.DefaultClient
|
HTTPC *http.Client // if empty defaults to http.DefaultClient
|
||||||
SkipClientTime bool // if true, client_time is not written to logs
|
SkipClientTime bool // if true, client_time is not written to logs
|
||||||
LowMemory bool // if true, logtail minimizes memory use
|
LowMemory bool // if true, logtail minimizes memory use
|
||||||
@ -507,7 +507,7 @@ func (l *Logger) upload(ctx context.Context, body []byte, origlen int) (retryAft
|
|||||||
}
|
}
|
||||||
if runtime.GOOS == "js" {
|
if runtime.GOOS == "js" {
|
||||||
// We once advertised we'd accept optional client certs (for internal use)
|
// We once advertised we'd accept optional client certs (for internal use)
|
||||||
// on log.tailscale.io but then Tailscale SSH js/wasm clients prompted
|
// on log.tailscale.com but then Tailscale SSH js/wasm clients prompted
|
||||||
// users (on some browsers?) to pick a client cert. We'll fix the server's
|
// users (on some browsers?) to pick a client cert. We'll fix the server's
|
||||||
// TLS ServerHello, but we can also fix it client side for good measure.
|
// TLS ServerHello, but we can also fix it client side for good measure.
|
||||||
//
|
//
|
||||||
|
@ -89,8 +89,8 @@ func Config(host string, ht *health.Tracker, base *tls.Config) *tls.Config {
|
|||||||
// (with the baked-in fallback root) in the VerifyConnection hook.
|
// (with the baked-in fallback root) in the VerifyConnection hook.
|
||||||
conf.InsecureSkipVerify = true
|
conf.InsecureSkipVerify = true
|
||||||
conf.VerifyConnection = func(cs tls.ConnectionState) (retErr error) {
|
conf.VerifyConnection = func(cs tls.ConnectionState) (retErr error) {
|
||||||
if host == "log.tailscale.io" && hostinfo.IsNATLabGuestVM() {
|
if host == "log.tailscale.com" && hostinfo.IsNATLabGuestVM() {
|
||||||
// Allow log.tailscale.io TLS MITM for integration tests when
|
// Allow log.tailscale.com TLS MITM for integration tests when
|
||||||
// the client's running within a NATLab VM.
|
// the client's running within a NATLab VM.
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ type Server struct {
|
|||||||
// If nil, a new FileStore is initialized at `Dir/tailscaled.state`.
|
// If nil, a new FileStore is initialized at `Dir/tailscaled.state`.
|
||||||
// See tailscale.com/ipn/store for supported stores.
|
// See tailscale.com/ipn/store for supported stores.
|
||||||
//
|
//
|
||||||
// Logs will automatically be uploaded to log.tailscale.io,
|
// Logs will automatically be uploaded to log.tailscale.com,
|
||||||
// where the configuration file for logging will be saved at
|
// where the configuration file for logging will be saved at
|
||||||
// `Dir/tailscaled.log.conf`.
|
// `Dir/tailscaled.log.conf`.
|
||||||
Store ipn.StateStore
|
Store ipn.StateStore
|
||||||
|
@ -17,7 +17,7 @@ var (
|
|||||||
fakeControl = newVIP("control.tailscale", 3)
|
fakeControl = newVIP("control.tailscale", 3)
|
||||||
fakeDERP1 = newVIP("derp1.tailscale", "33.4.0.1") // 3340=DERP; 1=derp 1
|
fakeDERP1 = newVIP("derp1.tailscale", "33.4.0.1") // 3340=DERP; 1=derp 1
|
||||||
fakeDERP2 = newVIP("derp2.tailscale", "33.4.0.2") // 3340=DERP; 2=derp 2
|
fakeDERP2 = newVIP("derp2.tailscale", "33.4.0.2") // 3340=DERP; 2=derp 2
|
||||||
fakeLogCatcher = newVIP("log.tailscale.io", 4)
|
fakeLogCatcher = newVIP("log.tailscale.com", 4)
|
||||||
fakeSyslog = newVIP("syslog.tailscale", 9)
|
fakeSyslog = newVIP("syslog.tailscale", 9)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -394,7 +394,7 @@ func (n *network) acceptTCP(r *tcp.ForwarderRequest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// serveLogCatchConn serves a TCP connection to "log.tailscale.io", speaking the
|
// serveLogCatchConn serves a TCP connection to "log.tailscale.com", speaking the
|
||||||
// logtail/logcatcher protocol.
|
// logtail/logcatcher protocol.
|
||||||
//
|
//
|
||||||
// We terminate TLS with an arbitrary cert; the client is configured to not
|
// We terminate TLS with an arbitrary cert; the client is configured to not
|
||||||
|
Loading…
x
Reference in New Issue
Block a user