mirror of
https://github.com/cloudflare/cloudflared.git
synced 2025-07-27 17:29:58 +00:00
TUN-8456: Update quic-go to 0.45 and collect mtu and congestion control metrics
This commit is contained in:

committed by
Chung-Ting Huang

parent
cb6e5999e1
commit
0b62d45738
@@ -30,6 +30,9 @@ var (
|
||||
minRTT *prometheus.GaugeVec
|
||||
latestRTT *prometheus.GaugeVec
|
||||
smoothedRTT *prometheus.GaugeVec
|
||||
mtu *prometheus.GaugeVec
|
||||
congestionWindow *prometheus.GaugeVec
|
||||
congestionState *prometheus.GaugeVec
|
||||
}{
|
||||
totalConnections: prometheus.NewCounter(
|
||||
prometheus.CounterOpts{
|
||||
@@ -146,6 +149,33 @@ var (
|
||||
},
|
||||
clientConnLabels,
|
||||
),
|
||||
mtu: prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Namespace: namespace,
|
||||
Subsystem: "client",
|
||||
Name: "mtu",
|
||||
Help: "Current maximum transmission unit (MTU) of a connection",
|
||||
},
|
||||
clientConnLabels,
|
||||
),
|
||||
congestionWindow: prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Namespace: namespace,
|
||||
Subsystem: "client",
|
||||
Name: "congestion_window",
|
||||
Help: "Current congestion window size",
|
||||
},
|
||||
clientConnLabels,
|
||||
),
|
||||
congestionState: prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Namespace: namespace,
|
||||
Subsystem: "client",
|
||||
Name: "congestion_state",
|
||||
Help: "Current congestion control state. See https://pkg.go.dev/github.com/quic-go/quic-go@v0.45.0/logging#CongestionState for what each value maps to",
|
||||
},
|
||||
clientConnLabels,
|
||||
),
|
||||
}
|
||||
|
||||
registerClient = sync.Once{}
|
||||
@@ -179,6 +209,9 @@ func newClientCollector(index string, logger *zerolog.Logger) *clientCollector {
|
||||
clientMetrics.minRTT,
|
||||
clientMetrics.latestRTT,
|
||||
clientMetrics.smoothedRTT,
|
||||
clientMetrics.mtu,
|
||||
clientMetrics.congestionWindow,
|
||||
clientMetrics.congestionState,
|
||||
packetTooBigDropped,
|
||||
)
|
||||
})
|
||||
@@ -232,6 +265,19 @@ func (cc *clientCollector) updatedRTT(rtt *logging.RTTStats) {
|
||||
clientMetrics.smoothedRTT.WithLabelValues(cc.index).Set(durationToPromGauge(rtt.SmoothedRTT()))
|
||||
}
|
||||
|
||||
func (cc *clientCollector) updateCongestionWindow(size logging.ByteCount) {
|
||||
clientMetrics.congestionWindow.WithLabelValues(cc.index).Set(float64(size))
|
||||
}
|
||||
|
||||
func (cc *clientCollector) updatedCongestionState(state logging.CongestionState) {
|
||||
clientMetrics.congestionState.WithLabelValues(cc.index).Set(float64(state))
|
||||
}
|
||||
|
||||
func (cc *clientCollector) updateMTU(mtu logging.ByteCount) {
|
||||
clientMetrics.mtu.WithLabelValues(cc.index).Set(float64(mtu))
|
||||
cc.logger.Debug().Msgf("QUIC MTU updated to %d", mtu)
|
||||
}
|
||||
|
||||
func (cc *clientCollector) collectPackets(size logging.ByteCount, frames []logging.Frame, counter, bandwidth *prometheus.CounterVec, direction direction) {
|
||||
for _, frame := range frames {
|
||||
switch f := frame.(type) {
|
||||
|
@@ -47,6 +47,8 @@ func newConnTracer(metricsCollector *clientCollector) *logging.ConnectionTracer
|
||||
DroppedPacket: tracer.DroppedPacket,
|
||||
UpdatedMetrics: tracer.UpdatedMetrics,
|
||||
LostPacket: tracer.LostPacket,
|
||||
UpdatedMTU: tracer.UpdatedMTU,
|
||||
UpdatedCongestionState: tracer.UpdatedCongestionState,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +78,7 @@ func (ct *connTracer) LostPacket(level logging.EncryptionLevel, number logging.P
|
||||
|
||||
func (ct *connTracer) UpdatedMetrics(rttStats *logging.RTTStats, cwnd, bytesInFlight logging.ByteCount, packetsInFlight int) {
|
||||
ct.metricsCollector.updatedRTT(rttStats)
|
||||
ct.metricsCollector.updateCongestionWindow(cwnd)
|
||||
}
|
||||
|
||||
func (ct *connTracer) SentLongHeaderPacket(hdr *logging.ExtendedHeader, size logging.ByteCount, ecn logging.ECN, ack *logging.AckFrame, frames []logging.Frame) {
|
||||
@@ -93,3 +96,11 @@ func (ct *connTracer) ReceivedLongHeaderPacket(hdr *logging.ExtendedHeader, size
|
||||
func (ct *connTracer) ReceivedShortHeaderPacket(hdr *logging.ShortHeader, size logging.ByteCount, ecn logging.ECN, frames []logging.Frame) {
|
||||
ct.metricsCollector.receivedPackets(size, frames)
|
||||
}
|
||||
|
||||
func (ct *connTracer) UpdatedMTU(mtu logging.ByteCount, done bool) {
|
||||
ct.metricsCollector.updateMTU(mtu)
|
||||
}
|
||||
|
||||
func (ct *connTracer) UpdatedCongestionState(state logging.CongestionState) {
|
||||
ct.metricsCollector.updatedCongestionState(state)
|
||||
}
|
||||
|
Reference in New Issue
Block a user