Skip to content

Commit 991f01f

Browse files
committed
TUN-7131: Add cloudflared log event to connection messages and enable streaming logs
1 parent b89c092 commit 991f01f

File tree

6 files changed

+60
-29
lines changed

6 files changed

+60
-29
lines changed

connection/control.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package connection
22

33
import (
44
"context"
5-
"fmt"
65
"io"
76
"net"
87
"time"
98

109
"github.com/rs/zerolog"
1110

11+
"github.com/cloudflare/cloudflared/management"
1212
tunnelpogs "github.com/cloudflare/cloudflared/tunnelrpc/pogs"
1313
)
1414

@@ -85,7 +85,7 @@ func (c *controlStream) ServeControlStream(
8585
return err
8686
}
8787

88-
c.observer.logServerInfo(c.connIndex, registrationDetails.Location, c.edgeAddress, fmt.Sprintf("Connection %s registered with protocol: %s", registrationDetails.UUID, c.protocol))
88+
c.observer.logConnected(registrationDetails.UUID, c.connIndex, registrationDetails.Location, c.edgeAddress, c.protocol)
8989
c.observer.sendConnectedEvent(c.connIndex, c.protocol, registrationDetails.Location)
9090
c.connectedFuse.Connected()
9191

@@ -116,7 +116,11 @@ func (c *controlStream) waitForUnregister(ctx context.Context, rpcClient NamedTu
116116

117117
c.observer.sendUnregisteringEvent(c.connIndex)
118118
rpcClient.GracefulShutdown(ctx, c.gracePeriod)
119-
c.observer.log.Info().Uint8(LogFieldConnIndex, c.connIndex).Msg("Unregistered tunnel connection")
119+
c.observer.log.Info().
120+
Int(management.EventTypeKey, int(management.Cloudflared)).
121+
Uint8(LogFieldConnIndex, c.connIndex).
122+
IPAddr(LogFieldIPAddress, c.edgeAddress).
123+
Msg("Unregistered tunnel connection")
120124
}
121125

122126
func (c *controlStream) IsStopped() bool {

connection/observer.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@ import (
44
"net"
55
"strings"
66

7+
"github.com/google/uuid"
78
"github.com/rs/zerolog"
9+
10+
"github.com/cloudflare/cloudflared/management"
811
)
912

1013
const (
14+
LogFieldConnectionID = "connection"
1115
LogFieldLocation = "location"
1216
LogFieldIPAddress = "ip"
17+
LogFieldProtocol = "protocol"
1318
observerChannelBufferSize = 16
1419
)
1520

@@ -41,13 +46,16 @@ func (o *Observer) RegisterSink(sink EventSink) {
4146
o.addSinkChan <- sink
4247
}
4348

44-
func (o *Observer) logServerInfo(connIndex uint8, location string, address net.IP, msg string) {
49+
func (o *Observer) logConnected(connectionID uuid.UUID, connIndex uint8, location string, address net.IP, protocol Protocol) {
4550
o.sendEvent(Event{Index: connIndex, EventType: Connected, Location: location})
4651
o.log.Info().
52+
Int(management.EventTypeKey, int(management.Cloudflared)).
53+
Str(LogFieldConnectionID, connectionID.String()).
4754
Uint8(LogFieldConnIndex, connIndex).
4855
Str(LogFieldLocation, location).
4956
IPAddr(LogFieldIPAddress, address).
50-
Msg(msg)
57+
Str(LogFieldProtocol, protocol.String()).
58+
Msg("Registered tunnel connection")
5159
o.metrics.registerServerLocation(uint8ToString(connIndex), location)
5260
}
5361

edgediscovery/allregions/discovery.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99

1010
"github.com/pkg/errors"
1111
"github.com/rs/zerolog"
12+
13+
"github.com/cloudflare/cloudflared/management"
1214
)
1315

1416
const (
@@ -108,16 +110,20 @@ var friendlyDNSErrorLines = []string{
108110

109111
// EdgeDiscovery implements HA service discovery lookup.
110112
func edgeDiscovery(log *zerolog.Logger, srvService string) ([][]*EdgeAddr, error) {
111-
log.Debug().Str("domain", "_"+srvService+"._"+srvProto+"."+srvName).Msg("looking up edge SRV record")
113+
logger := log.With().Int(management.EventTypeKey, int(management.Cloudflared)).Logger()
114+
logger.Debug().
115+
Int(management.EventTypeKey, int(management.Cloudflared)).
116+
Str("domain", "_"+srvService+"._"+srvProto+"."+srvName).
117+
Msg("edge discovery: looking up edge SRV record")
112118

113119
_, addrs, err := netLookupSRV(srvService, srvProto, srvName)
114120
if err != nil {
115121
_, fallbackAddrs, fallbackErr := fallbackLookupSRV(srvService, srvProto, srvName)
116122
if fallbackErr != nil || len(fallbackAddrs) == 0 {
117123
// use the original DNS error `err` in messages, not `fallbackErr`
118-
log.Err(err).Msg("Error looking up Cloudflare edge IPs: the DNS query failed")
124+
logger.Err(err).Msg("edge discovery: error looking up Cloudflare edge IPs: the DNS query failed")
119125
for _, s := range friendlyDNSErrorLines {
120-
log.Error().Msg(s)
126+
logger.Error().Msg(s)
121127
}
122128
return nil, errors.Wrapf(err, "Could not lookup srv records on _%v._%v.%v", srvService, srvProto, srvName)
123129
}
@@ -131,9 +137,13 @@ func edgeDiscovery(log *zerolog.Logger, srvService string) ([][]*EdgeAddr, error
131137
if err != nil {
132138
return nil, err
133139
}
134-
for _, e := range edgeAddrs {
135-
log.Debug().Msgf("Edge Address: %+v", *e)
140+
logAddrs := make([]string, len(edgeAddrs))
141+
for i, e := range edgeAddrs {
142+
logAddrs[i] = e.UDP.IP.String()
136143
}
144+
logger.Debug().
145+
Strs("addresses", logAddrs).
146+
Msg("edge discovery: resolved edge addresses")
137147
resolvedAddrPerCNAME = append(resolvedAddrPerCNAME, edgeAddrs)
138148
}
139149

@@ -188,13 +198,15 @@ func ResolveAddrs(addrs []string, log *zerolog.Logger) (resolved []*EdgeAddr) {
188198
for _, addr := range addrs {
189199
tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
190200
if err != nil {
191-
log.Error().Str(logFieldAddress, addr).Err(err).Msg("failed to resolve to TCP address")
201+
log.Error().Int(management.EventTypeKey, int(management.Cloudflared)).
202+
Str(logFieldAddress, addr).Err(err).Msg("edge discovery: failed to resolve to TCP address")
192203
continue
193204
}
194205

195206
udpAddr, err := net.ResolveUDPAddr("udp", addr)
196207
if err != nil {
197-
log.Error().Str(logFieldAddress, addr).Err(err).Msg("failed to resolve to UDP address")
208+
log.Error().Int(management.EventTypeKey, int(management.Cloudflared)).
209+
Str(logFieldAddress, addr).Err(err).Msg("edge discovery: failed to resolve to UDP address")
198210
continue
199211
}
200212
version := V6

edgediscovery/edgediscovery.go

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/rs/zerolog"
77

88
"github.com/cloudflare/cloudflared/edgediscovery/allregions"
9+
"github.com/cloudflare/cloudflared/management"
910
)
1011

1112
const (
@@ -74,33 +75,35 @@ func (ed *Edge) GetAddrForRPC() (*allregions.EdgeAddr, error) {
7475

7576
// GetAddr gives this proxy connection an edge Addr. Prefer Addrs this connection has already used.
7677
func (ed *Edge) GetAddr(connIndex int) (*allregions.EdgeAddr, error) {
77-
log := ed.log.With().Int(LogFieldConnIndex, connIndex).Logger()
78+
log := ed.log.With().
79+
Int(LogFieldConnIndex, connIndex).
80+
Int(management.EventTypeKey, int(management.Cloudflared)).
81+
Logger()
7882
ed.Lock()
7983
defer ed.Unlock()
8084

8185
// If this connection has already used an edge addr, return it.
8286
if addr := ed.regions.AddrUsedBy(connIndex); addr != nil {
83-
log.Debug().Msg("edgediscovery - GetAddr: Returning same address back to proxy connection")
87+
log.Debug().IPAddr(LogFieldIPAddress, addr.UDP.IP).Msg("edge discovery: returning same edge address back to pool")
8488
return addr, nil
8589
}
8690

8791
// Otherwise, give it an unused one
8892
addr := ed.regions.GetUnusedAddr(nil, connIndex)
8993
if addr == nil {
90-
log.Debug().Msg("edgediscovery - GetAddr: No addresses left to give proxy connection")
94+
log.Debug().Msg("edge discovery: no addresses left in pool to give proxy connection")
9195
return nil, errNoAddressesLeft
9296
}
93-
log = ed.log.With().
94-
Int(LogFieldConnIndex, connIndex).
95-
IPAddr(LogFieldIPAddress, addr.UDP.IP).Logger()
96-
log.Debug().Msgf("edgediscovery - GetAddr: Giving connection its new address")
97+
log.Debug().IPAddr(LogFieldIPAddress, addr.UDP.IP).Msg("edge discovery: giving new address to connection")
9798
return addr, nil
9899
}
99100

100101
// GetDifferentAddr gives back the proxy connection's edge Addr and uses a new one.
101102
func (ed *Edge) GetDifferentAddr(connIndex int, hasConnectivityError bool) (*allregions.EdgeAddr, error) {
102-
log := ed.log.With().Int(LogFieldConnIndex, connIndex).Logger()
103-
103+
log := ed.log.With().
104+
Int(LogFieldConnIndex, connIndex).
105+
Int(management.EventTypeKey, int(management.Cloudflared)).
106+
Logger()
104107
ed.Lock()
105108
defer ed.Unlock()
106109

@@ -110,14 +113,14 @@ func (ed *Edge) GetDifferentAddr(connIndex int, hasConnectivityError bool) (*all
110113
}
111114
addr := ed.regions.GetUnusedAddr(oldAddr, connIndex)
112115
if addr == nil {
113-
log.Debug().Msg("edgediscovery - GetDifferentAddr: No addresses left to give proxy connection")
116+
log.Debug().Msg("edge discovery: no addresses left in pool to give proxy connection")
114117
// note: if oldAddr were not nil, it will become available on the next iteration
115118
return nil, errNoAddressesLeft
116119
}
117-
log = ed.log.With().
118-
Int(LogFieldConnIndex, connIndex).
119-
IPAddr(LogFieldIPAddress, addr.UDP.IP).Logger()
120-
log.Debug().Msgf("edgediscovery - GetDifferentAddr: Giving connection its new address from the address list: %v", ed.regions.AvailableAddrs())
120+
log.Debug().
121+
IPAddr(LogFieldIPAddress, addr.UDP.IP).
122+
Int("available", ed.regions.AvailableAddrs()).
123+
Msg("edge discovery: giving new address to connection")
121124
return addr, nil
122125
}
123126

@@ -133,8 +136,9 @@ func (ed *Edge) AvailableAddrs() int {
133136
func (ed *Edge) GiveBack(addr *allregions.EdgeAddr, hasConnectivityError bool) bool {
134137
ed.Lock()
135138
defer ed.Unlock()
136-
log := ed.log.With().
137-
IPAddr(LogFieldIPAddress, addr.UDP.IP).Logger()
138-
log.Debug().Msgf("edgediscovery - GiveBack: Address now unused")
139+
ed.log.Debug().
140+
Int(management.EventTypeKey, int(management.Cloudflared)).
141+
IPAddr(LogFieldIPAddress, addr.UDP.IP).
142+
Msg("edge discovery: gave back address to the pool")
139143
return ed.regions.GiveBack(addr, hasConnectivityError)
140144
}

features/features.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var (
1616
FeatureSerializedHeaders,
1717
FeatureDatagramV2,
1818
FeatureQUICSupportEOF,
19+
FeatureManagementLogs,
1920
}
2021
)
2122

supervisor/tunnel.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/cloudflare/cloudflared/features"
2323
"github.com/cloudflare/cloudflared/h2mux"
2424
"github.com/cloudflare/cloudflared/ingress"
25+
"github.com/cloudflare/cloudflared/management"
2526
"github.com/cloudflare/cloudflared/orchestration"
2627
quicpogs "github.com/cloudflare/cloudflared/quic"
2728
"github.com/cloudflare/cloudflared/retry"
@@ -238,6 +239,7 @@ func (e *EdgeTunnelServer) Serve(ctx context.Context, connIndex uint8, protocolF
238239
}
239240

240241
logger := e.config.Log.With().
242+
Int(management.EventTypeKey, int(management.Cloudflared)).
241243
IPAddr(connection.LogFieldIPAddress, addr.UDP.IP).
242244
Uint8(connection.LogFieldConnIndex, connIndex).
243245
Logger()

0 commit comments

Comments
 (0)