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:
Joe Tsai 2024-12-16 14:53:34 -08:00 committed by GitHub
parent 2506b81471
commit b62a013ecb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 26 additions and 24 deletions

View File

@ -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)

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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"},

View File

@ -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.

View File

@ -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"},

View File

@ -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

View File

@ -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)
} }

View File

@ -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.
// //

View File

@ -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
} }

View File

@ -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

View File

@ -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)
) )

View File

@ -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