Skip to content

Commit

Permalink
Merge pull request #62 from coroot/tcp_retransmissions
Browse files Browse the repository at this point in the history
TCP retransmissions
  • Loading branch information
def committed Jun 21, 2023
2 parents e7376b2 + f1be886 commit 228a1e8
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 15 deletions.
27 changes: 12 additions & 15 deletions auditor/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,21 @@ import (
)

type netSummary struct {
status model.Status
rttMin *timeseries.Aggregate
rttMax *timeseries.Aggregate
rttSum *timeseries.Aggregate
rttCount *timeseries.Aggregate
status model.Status
retransmissions *timeseries.Aggregate
rttSum *timeseries.Aggregate
rttCount *timeseries.Aggregate
}

func newNetSummary() *netSummary {
return &netSummary{
rttMin: timeseries.NewAggregate(timeseries.Min),
rttMax: timeseries.NewAggregate(timeseries.Max),
rttSum: timeseries.NewAggregate(timeseries.NanSum),
rttCount: timeseries.NewAggregate(timeseries.NanSum),
retransmissions: timeseries.NewAggregate(timeseries.NanSum),
rttSum: timeseries.NewAggregate(timeseries.NanSum),
rttCount: timeseries.NewAggregate(timeseries.NanSum),
}
}

func (s *netSummary) addRtt(rtt *timeseries.TimeSeries) {
s.rttMax.Add(rtt)
s.rttMin.Add(rtt)
s.rttSum.Add(rtt)
s.rttCount.Add(rtt.Map(timeseries.Defined))
}
Expand Down Expand Up @@ -57,6 +53,9 @@ func (a *appAuditor) network() {
if u.Rtt != nil {
summary.addRtt(u.Rtt)
}
if u.Retransmissions != nil {
summary.retransmissions.Add(u.Retransmissions)
}
if instance.IsObsolete() || u.IsObsolete() {
linkStatus = model.UNKNOWN
}
Expand All @@ -78,10 +77,8 @@ func (a *appAuditor) network() {
if avg.Last() > rttCheck.Threshold {
rttCheck.AddItem(appId.Name)
}
report.GetOrCreateChartInGroup("Network round-trip time to <selector>, seconds", appId.Name).
AddSeries("min", summary.rttMin).
AddSeries("avg", avg).
AddSeries("max", summary.rttMax)
report.GetOrCreateChart("Network round-trip time, seconds").AddSeries("→"+appId.Name, avg)
report.GetOrCreateChart("TCP retransmissions, segments/second").AddSeries("→"+appId.Name, summary.retransmissions)
}
if !seenConnections {
rttCheck.SetStatus(model.UNKNOWN, "no data")
Expand Down
4 changes: 4 additions & 0 deletions constructor/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ func loadContainers(w *model.World, metrics map[string][]model.MetricValues, pjs
if !instance.TcpListens[l] {
instance.TcpListens[l] = isActive
}
case "container_net_tcp_retransmits":
if c := getOrCreateConnection(instance, container.Name, m, w, connectionCache); c != nil {
c.Retransmissions = merge(c.Retransmissions, m.Values, timeseries.Any)
}
case "container_http_requests_count", "container_postgres_queries_count", "container_redis_queries_count",
"container_memcached_queries_count", "container_mysql_queries_count", "container_mongo_queries_count",
"container_kafka_requests_count", "container_cassandra_queries_count", "container_rabbitmq_messages":
Expand Down
1 change: 1 addition & 0 deletions constructor/queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ var QUERIES = map[string]string{
"container_net_tcp_successful_connects": `rate(container_net_tcp_successful_connects_total[$RANGE])`,
"container_net_tcp_active_connections": `container_net_tcp_active_connections`,
"container_net_tcp_listen_info": `container_net_tcp_listen_info`,
"container_net_tcp_retransmits": `rate(container_net_tcp_retransmits_total[$RANGE])`,
"container_log_messages": `container_log_messages_total % 10000000`,
"container_application_type": `container_application_type`,
"container_cpu_limit": `container_resources_cpu_limit_cores`,
Expand Down
2 changes: 2 additions & 0 deletions model/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ type Connection struct {
Connects *timeseries.TimeSeries
Active *timeseries.TimeSeries

Retransmissions *timeseries.TimeSeries

RequestsCount map[Protocol]map[string]*timeseries.TimeSeries // by status
RequestsLatency map[Protocol]*timeseries.TimeSeries
RequestsHistogram map[Protocol]map[float32]*timeseries.TimeSeries // by le
Expand Down

0 comments on commit 228a1e8

Please sign in to comment.