Initial support for tracking connection metrics

This commit is contained in:
Geoff Bourne
2019-07-14 16:34:46 -05:00
parent a86eb65ca5
commit b290243d40
8 changed files with 101 additions and 16 deletions
+5 -1
View File
@@ -25,6 +25,7 @@ var (
cpuProfile = flag.String("cpu-profile", "", "Enables CPU profiling and writes to given path")
debug = flag.Bool("debug", false, "Enable debug logs")
connRateLimit = flag.Int("connection-rate-limit", 1, "Max number of connections to allow per second")
metricsBackend = flag.String("metrics-backend", "discard", "Backend to use for metrics exposure/publishing: discard,expvar")
)
var (
@@ -67,6 +68,8 @@ func main() {
ctx, cancel := context.WithCancel(context.Background())
metricsBuilder := NewMetricsBuilder()
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
@@ -75,7 +78,8 @@ func main() {
if *connRateLimit < 1 {
*connRateLimit = 1
}
server.Connector.StartAcceptingConnections(ctx, net.JoinHostPort("", strconv.Itoa(*port)), *connRateLimit)
connector := server.NewConnector(metricsBuilder.BuildConnectorMetrics())
connector.StartAcceptingConnections(ctx, net.JoinHostPort("", strconv.Itoa(*port)), *connRateLimit)
if *apiBinding != "" {
server.StartApiServer(*apiBinding)
+48
View File
@@ -0,0 +1,48 @@
package main
import (
discardMetrics "github.com/go-kit/kit/metrics/discard"
expvarMetrics "github.com/go-kit/kit/metrics/expvar"
"github.com/itzg/mc-router/server"
"github.com/sirupsen/logrus"
)
type MetricsBuilder interface {
BuildConnectorMetrics() *server.ConnectorMetrics
}
func NewMetricsBuilder() MetricsBuilder {
switch *metricsBackend {
case "discard":
return &discardMetricsBuilder{}
case "expvar":
return &expvarMetricsBuilder{}
default:
logrus.Fatalf("Unsupported metrics backend: %s", metricsBackend)
return nil
}
}
type expvarMetricsBuilder struct {
}
func (b expvarMetricsBuilder) BuildConnectorMetrics() *server.ConnectorMetrics {
return &server.ConnectorMetrics{
Errors: expvarMetrics.NewCounter("errors").With("subsystem", "connector"),
BytesTransmitted: expvarMetrics.NewCounter("bytes"),
Connections: expvarMetrics.NewCounter("connections"),
ActiveConnections: expvarMetrics.NewGauge("active_connections"),
}
}
type discardMetricsBuilder struct {
}
func (b discardMetricsBuilder) BuildConnectorMetrics() *server.ConnectorMetrics {
return &server.ConnectorMetrics{
Errors: discardMetrics.NewCounter(),
BytesTransmitted: discardMetrics.NewCounter(),
Connections: discardMetrics.NewCounter(),
ActiveConnections: discardMetrics.NewGauge(),
}
}