Skip to content
Snippets Groups Projects
Commit 2b5a8cbc authored by Oliver Herms's avatar Oliver Herms
Browse files

Add grpc metrics

parent b89f0923
No related branches found
No related tags found
No related merge requests found
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
"github.com/bio-routing/bio-rd/cmd/ris-mirror/rismirror" "github.com/bio-routing/bio-rd/cmd/ris-mirror/rismirror"
pb "github.com/bio-routing/bio-rd/cmd/ris/api" pb "github.com/bio-routing/bio-rd/cmd/ris/api"
"github.com/bio-routing/bio-rd/cmd/ris/risserver" "github.com/bio-routing/bio-rd/cmd/ris/risserver"
prom_grpc_cm "github.com/bio-routing/bio-rd/metrics/grpc/clientmanager/adapter/prom"
prom_ris_mirror "github.com/bio-routing/bio-rd/metrics/ris-mirror/adapter/prom" prom_ris_mirror "github.com/bio-routing/bio-rd/metrics/ris-mirror/adapter/prom"
"github.com/bio-routing/bio-rd/util/grpc/clientmanager" "github.com/bio-routing/bio-rd/util/grpc/clientmanager"
"github.com/bio-routing/bio-rd/util/servicewrapper" "github.com/bio-routing/bio-rd/util/servicewrapper"
...@@ -49,6 +50,7 @@ func main() { ...@@ -49,6 +50,7 @@ func main() {
m := rismirror.New() m := rismirror.New()
prometheus.MustRegister(prom_ris_mirror.NewCollector(m)) prometheus.MustRegister(prom_ris_mirror.NewCollector(m))
prometheus.MustRegister(prom_grpc_cm.NewCollector(grpcClientManager))
for _, rcfg := range cfg.RIBConfigs { for _, rcfg := range cfg.RIBConfigs {
for _, vrdRD := range rcfg.GetVRFs() { for _, vrdRD := range rcfg.GetVRFs() {
......
package prom
import (
"github.com/bio-routing/bio-rd/util/grpc/clientmanager"
"github.com/prometheus/client_golang/prometheus"
)
const (
prefix = "bio_grpc_clientmanager_"
)
var (
connectionStateDesc *prometheus.Desc
)
func init() {
labels := []string{"target"}
connectionStateDesc = prometheus.NewDesc(prefix+"connection_state", "Connection state, 0=IDLE,1=CONNECTING,2=READY,3=TRANSIENT_FAILURE,4=SHUTDOWN", labels, nil)
}
// NewCollector creates a new collector instance for the given clientmanager
func NewCollector(cm *clientmanager.ClientManager) prometheus.Collector {
return &grpcClientManagerCollector{
cm: cm,
}
}
// grpcClientManagerCollector provides a collector for RIS metrics of BIO to use with Prometheus
type grpcClientManagerCollector struct {
cm *clientmanager.ClientManager
}
// Describe conforms to the prometheus collector interface
func (c *grpcClientManagerCollector) Describe(ch chan<- *prometheus.Desc) {
ch <- connectionStateDesc
}
// Collect conforms to the prometheus collector interface
func (c *grpcClientManagerCollector) Collect(ch chan<- prometheus.Metric) {
for _, con := range c.cm.Metrics().Connections {
l := []string{con.Target}
ch <- prometheus.MustNewConstMetric(connectionStateDesc, prometheus.GaugeValue, float64(con.State), l...)
}
}
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"sync" "sync"
"github.com/bio-routing/bio-rd/util/grpc/clientmanager/metrics"
"github.com/pkg/errors" "github.com/pkg/errors"
"google.golang.org/grpc" "google.golang.org/grpc"
) )
...@@ -50,3 +51,19 @@ func (cm *ClientManager) Add(target string, opts ...grpc.DialOption) error { ...@@ -50,3 +51,19 @@ func (cm *ClientManager) Add(target string, opts ...grpc.DialOption) error {
cm.connections[target] = cc cm.connections[target] = cc
return nil return nil
} }
// Metrics gets ClientManager metrics
func (cm *ClientManager) Metrics() *metrics.ClientManagerMetrics {
ret := metrics.New()
cm.connectionsMu.RLock()
defer cm.connectionsMu.RUnlock()
for t, c := range cm.connections {
ret.Connections = append(ret.Connections, &metrics.GRPCConnectionMetrics{
Target: t,
State: int(c.GetState()),
})
}
return ret
}
package metrics
// ClientManagerMetrics provides metrics for a single ClientManager instance
type ClientManagerMetrics struct {
Connections []*GRPCConnectionMetrics
}
// New returns ClientManagerMetrics
func New() *ClientManagerMetrics {
return &ClientManagerMetrics{
Connections: make([]*GRPCConnectionMetrics, 0),
}
}
// GRPCConnectionMetrics represents metrics of an GRPC connection
type GRPCConnectionMetrics struct {
Target string
State int
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment