Skip to content

Commit

Permalink
Target hits metrics
Browse files Browse the repository at this point in the history
Collect number of packets and bytes for each target.
Metrics are collected based on nftables metrics on postrouting rules
matching target identifier (fwmark).
  • Loading branch information
LionelJouin committed Oct 19, 2023
1 parent 2e277c7 commit 21ea823
Show file tree
Hide file tree
Showing 8 changed files with 832 additions and 75 deletions.
23 changes: 23 additions & 0 deletions cmd/stateless-lb/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import (
"github.com/nordix/meridio/pkg/loadbalancer/flow"
"github.com/nordix/meridio/pkg/loadbalancer/nfqlb"
"github.com/nordix/meridio/pkg/loadbalancer/stream"
"github.com/nordix/meridio/pkg/loadbalancer/target"
"github.com/nordix/meridio/pkg/loadbalancer/types"
"github.com/nordix/meridio/pkg/log"
"github.com/nordix/meridio/pkg/metrics"
Expand Down Expand Up @@ -167,6 +168,16 @@ func main() {
},
}

hostname, err := os.Hostname()
if err != nil {
log.Fatal(logger, "Unable to get hostname", "error", err)
}

targetHitsMetrics, err := target.NewTargetHitsMetrics(hostname)
if err != nil {
log.Fatal(logger, "Unable to init lb target metrics", "error", err)
}

lbFactory := nfqlb.NewLbFactory(nfqlb.WithNFQueue(config.Nfqueue))
nfa, err := nfqlb.NewNetfilterAdaptor(nfqlb.WithNFQueue(config.Nfqueue), nfqlb.WithNFQueueFanout(config.NfqueueFanout))
if err != nil {
Expand All @@ -185,6 +196,7 @@ func main() {
lbFactory, // to spawn nfqlb instance for each Stream created
nfa, // netfilter kernel configuration to steer VIP traffic to nfqlb process
config.IdentifierOffsetStart,
targetHitsMetrics,
)

interfaceMonitorEndpoint := interfacemonitor.NewServer(interfaceMonitor, sns, netUtils)
Expand Down Expand Up @@ -274,6 +286,13 @@ func main() {
return
}

err = targetHitsMetrics.Collect()
if err != nil {
logger.Error(err, "Unable to start target hits metrics collector")
cancel()
return
}

metricsServer := metrics.Server{
IP: "",
Port: config.MetricsPort,
Expand Down Expand Up @@ -311,6 +330,7 @@ type SimpleNetworkService struct {
lbFactory types.NFQueueLoadBalancerFactory
nfa types.NFAdaptor
natHandler *nat.NatHandler
targetHitsMetrics *target.HitsMetrics
}

/* // Request checks if allowed to serve the request
Expand Down Expand Up @@ -347,6 +367,7 @@ func newSimpleNetworkService(
lbFactory types.NFQueueLoadBalancerFactory,
nfa types.NFAdaptor,
identifierOffsetStart int,
targetHitsMetrics *target.HitsMetrics,
) *SimpleNetworkService {
identifierOffsetGenerator := NewIdentifierOffsetGenerator(identifierOffsetStart)
logger := log.FromContextOrGlobal(ctx).WithValues("class", "SimpleNetworkService")
Expand All @@ -370,6 +391,7 @@ func newSimpleNetworkService(
lbFactory: lbFactory,
nfa: nfa,
natHandler: nh,
targetHitsMetrics: targetHitsMetrics,
}
logger.Info("Created", "object", simpleNetworkService)
return simpleNetworkService
Expand Down Expand Up @@ -579,6 +601,7 @@ func (sns *SimpleNetworkService) addStream(strm *nspAPI.Stream) error {
sns.netUtils,
sns.lbFactory,
identifierOffset,
sns.targetHitsMetrics,
)
if err != nil {
return err
Expand Down
Loading

0 comments on commit 21ea823

Please sign in to comment.